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 Security Token Service(AWS STS)는 세션 토큰의 업데이트된 버전인 버전 2를 지원합니다. 새 AWS 리전은 기본적으로 활성화되지 않으며 업데이트된 버전의 세션 토큰만 허용합니다. 이 오류는 버전 1 세션 토큰이 기본적으로 활성화되지 않은 AWS 리전의 서비스 엔드포인트에 요청을 보내면 발생합니다. 자세한 내용은 AWS 리전의 AWS STS 관리를 참조하십시오.
해결 방법
리전 AWS STS 엔드포인트에서 획득한 세션 토큰은 버전 2이며 모든 AWS 리전에서 유효합니다. 리전별 AWS STS 엔드포인트를 사용하는 것이 모범 사롕입니다.
이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.
리전별 엔드포인트에서 토큰 획득
다음 예시 명령은 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, AccountID, RoleName을 환경에 맞게 바꾸십시오.
- 리전별 엔드포인트에 대한 STS 클라이언트를 구성하려면 endpoint_url을 설정해야 합니다.
리전별 엔드포인트를 사용하려면 기존 bash 명령에 리전과 엔드포인트 URL 옵션을 포함해야 합니다.
명령 예시:
aws sts assume-role --role-arn arn:aws:iam::AccountID:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
중요: 기본적으로 활성화되는 리전의 경우 임시 자격 증명이 생성된 계정에서 리전별 STS 엔드포인트를 활성화해야 합니다. 사용자가 요청을 할 때 동일한 계정에 로그인했는지 아니면 다른 계정에 로그인했는지는 중요하지 않습니다. 수동으로 활성화하는 리전의 경우 요청을 하는 계정과 자격 증명이 생성된 계정 모두에서 리전을 활성화하십시오. 이렇게 하지 않으면 InvalidClientTokenId 오류가 발생할 수 있습니다. 자세한 내용은 AWS 리전의 AWS STS 활성화 및 비활성화를 참조하십시오.
글로벌 엔드포인트에 대한 세션 토큰의 리전 호환성 변경
기본적으로 글로벌 엔드포인트에 대한 AWS STS 호출은 버전 1을 사용하는 세션 토큰을 발행합니다. 버전 1 토큰은 기본적으로 활성화되는 AWS 리전에서만 유효합니다. 하지만 버전 2에서 모든 AWS 리전에서 사용할 수 있는 토큰을 발행하도록 STS 글로벌 엔드포인트를 구성할 수도 있습니다.
자세한 내용은 글로벌 엔드포인트 세션 토큰 관리를 참조하십시오.
중요: 버전 2 토큰에는 버전 1보다 더 많은 문자가 포함됩니다. 이는 토큰을 임시로 저장하는 기존 시스템에 영향을 미칠 수 있습니다.
관련 정보
AWS 리전의 AWS STS 관리
리전 및 엔드포인트