내용으로 건너뛰기

일부 리전에서 "AWS was not able to validate the provided access credentials"라는 IAM 오류를 해결하려면 어떻게 해야 합니까?

2분 분량
0

AWS Identity and Access Management(IAM) 역할을 맡았는데 API 호출에서 다음 오류가 반환되었습니다. "An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials."

간략한 설명

기본적으로 AWS는 새 AWS 리전을 활성화하지 않으며, 새 리전은 버전 2 토큰만 허용합니다. 버전 1 토큰이 AWS가 활성화하지 않은 리전의 서비스 엔드포인트를 요청하면 다음 오류가 발생합니다.

"An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials."

STS 리전 엔드포인트의 세션 토큰은 버전 2 토큰이고 모든 리전에서 유효하므로 AWS Security Token Service(AWS STS) 리전 엔드포인트를 사용하는 것이 가장 좋습니다. 또는 글로벌 엔드포인트에서 세션 토큰의 리전 호환성 설정을 변경할 수 있습니다.

해결 방법

리전 엔드포인트에서 토큰 받기

중요: AWS가 기본적으로 활성화하는 리전의 경우 요청을 보내는 계정과 상관없이 임시 자격 증명을 생성하는 AWS 계정에서 STS 리전 엔드포인트를 활성화해야 합니다. 수동으로 활성화하는 리전의 경우 요청을 보내는 계정과 자격 증명을 생성하는 계정 모두에서 리전을 활성화하십시오. 두 계정 모두에서 리전을 활성화하지 않으면 "InvalidClientTokenId" 오류가 표시됩니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AWS SDK 또는 AWS CLI를 사용하여 토큰을 받을 수 있습니다.

예를 들어 다음과 같은 AWS SDK for Python(Boto3) 명령을 실행할 수 있습니다.

# Replace existing code to create STS client with the following:  
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')

참고: your-region을 리전으로 바꾸고 endpoint_url을 엔드포인트로 바꾸십시오.

또는 다음과 같은 assume-role 명령을 실행합니다.

aws sts assume-role --role-arn arn:aws:iam::444455556666:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com

참고: your-region을 리전으로, role-arn을 IAM Amazon 리소스 이름(ARN)으로, endpoint_url을 엔드포인트로 바꾸십시오.

글로벌 엔드포인트에서 세션 토큰의 리전 호환성 설정 변경

기본적으로 글로벌 엔드포인트로 STS 호출을 수행하면 버전 1 토큰이 발급됩니다. 모든 리전에서 세션 토큰을 사용하려면 버전 2 토큰을 발급하도록 STS 글로벌 엔드포인트를 구성해야 합니다.

중요: 버전 2 토큰에는 버전 1보다 더 많은 문자가 포함됩니다. 토큰 크기 증가는 세션 토큰을 임시로 저장하는 기존 시스템에 영향을 미칠 수 있습니다. 토큰을 저장하는 시스템이 늘어난 토큰 크기를 관리할 수 있는지 확인하십시오.