일부 AWS 리전에서 "AWS was not able to validate the provided access credentials"라는 IAM 오류가 표시되는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 5월 14일

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 STS(AWS Security Token Service)는 이제 세션 토큰에 대해 업데이트된 버전 형식을 지원합니다. 기본적으로 활성화되지 않은 새 AWS 리전(예: 홍콩 및 바레인)은 업데이트된 AWS STS 형식을 사용합니다. 전역 AWS STS 엔드포인트(sts.amazonaws.com)는 기본적으로 이전 형식의 토큰을 발행합니다. 이 오류는 세션 토큰이 기본적으로 활성화되지 않은 AWS 리전에서 이전 형식을 사용하려고 시도하는 경우 발생할 수 있습니다. 자세한 내용은 AWS 리전에서 AWS STS 관리를 참조하십시오.

​해결 방법

리전 엔드포인트에서 가져온 토큰은 새 버전 형식을 사용하며 모든 AWS 리전에서 유효합니다. 모범 사례는 리전 STS 엔드포인트를 사용하는 것입니다. 이는 애플리케이션에 지리적으로 더 가까운 엔드포인트를 사용하면 더 짧은 지연 시간과 더 나은 응답 시간으로 STS 서비스에 액세스할 수 있기 때문입니다.

이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.

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

다음 예제 명령은 Python용 AWS SDK(Boto3)를 사용합니다.

참고:

  • your-region을 해당 AWS 리전으로 대체합니다.
  • 리전 엔드포인트에 대한 STS 클라이언트를 구성하려면 endpoint_url을 설정해야 합니다.
# Replace existing code to create STS client with the following
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.REGION.amazonaws.com')

전역 엔드포인트에 대한 세션 토큰의 리전 호환성 변경

또한 모든 AWS 리전에서 토큰을 사용할 수 있도록 업데이트된 형식을 사용하여 토큰을 발행하도록 STS 전역 엔드포인트를 구성할 수도 있습니다.

지침은 전역 엔드포인트에 대한 세션 토큰의 리전 호환성 변경을 참조하십시오.

중요: 새 토큰에는 이전 버전보다 많은 문자가 있습니다. 이는 토큰을 일시적으로 저장하는 기존 시스템에 영향을 줄 수 있습니다.