AWS Security Token Service(AWS STS) API 호출 AssumeRoleWithWebIdentity가 "InvalidIdentityToken" 오류로 인해 실패했습니다.
간략한 설명
AssumeRoleWithWebIdentity API 호출이 실패하면 다음 메시지와 비슷한 오류가 발생할 수 있습니다.
"AssumeRoleWithWebIdentity 작업을 호출할 때 오류(InvalidIdentityToken)가 발생했습니다. ID 제공업체의 확인 키를 검색할 수 없습니다."
이 오류는 다음 시나리오에서 발생할 수 있습니다.
- ID 제공업체(idP)의 .well_known URL 및 jwks_uri를 공용 인터넷에서 액세스할 수 없습니다.
- 사용자 지정 방화벽이 요청을 차단하고 있습니다.
- IdP에서 AWS STS 엔드포인트에 도달하기 위한 API 요청에 5초를 초과하는 지연 시간이 발생합니다.
- STS가 IdP의 .well_known URL 또는 jwks_uri에 너무 많은 요청을 수행합니다.
참고: 이 문제는 클라이언트 측의 실패이므로, AWS CloudTrail 이벤트 기록에 이 오류가 로깅되지 않습니다.
해결 방법
.well_known 및 jwks_uri에 대한 공용 액세스 확인
IdP의 .well_known URL 및 jwks_uri에 공용 액세스가 가능한지 확인합니다. 브라우저, Windows 명령 또는 Linux 명령을 사용하여 확인할 수 있습니다. 이 작업을 수행하려면 다음 작업 중 하나를 완료합니다.
액세스 권한을 확인하려면 브라우저에서 다음 링크로 이동합니다.
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
-또는-
다음 명령을 실행합니다.
Windows:
wget https://BASE_SERVER_URL/.well-known/openid-configuration
wget https://BASE_SERVER_URL/.well-known/jwks.json
Linux:
curl https://BASE_SERVER_URL/.well-known/openid-configuration
curl https://BASE_SERVER_URL/.well-known/jwks.json
참고: 링크에 액세스할 수 있는지 확인하려면 요청 응답에서 200 상태 코드를 확인합니다.
방화벽 설정 확인
IdP의 .well_known URL 및 jwks_uri에 액세스할 수 없는 경우 방화벽 설정을 확인합니다. 도메인이 거부 목록에 없는지 확인합니다.
방화벽의 현재 구성에 따라 도메인을 허용 목록에 추가해야 할 수 있습니다.
방화벽 설정에 액세스할 수 없는 경우 휴대폰 등의 다른 네트워크의 장치에서 브라우저를 사용합니다. 브라우저에서 액세스를 확인하려면 1단계의 지침을 따릅니다. 웹 요청이 성공하면 방화벽이 요청을 차단하고 있는 것입니다.
AssumeRoleWithWebIdentity API를 호출하는 서버가 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스인 경우 구성 설정을 확인합니다. 지침은 EC2 인스턴스에서 호스팅되는 웹사이트에 연결할 수 없는 이유는 무엇입니까?를 참조하십시오.
작업 지연 시간 확인
전체 작업의 지연 시간을 확인합니다. 여기에는 다음과 같은 특성이 포함됩니다.
- STS로부터의 요청/응답 시간
- IdP로부터의 요청/응답 시간
STS 지연 시간 최소화
STS 서비스에는 전역 엔드포인트 대신 AWS 리전 엔드포인트를 사용합니다. 이렇게 하면 요청이 지리적으로 가장 가까운 서버로 라우팅되어 대기 시간을 최소화할 수 있습니다. 자세한 내용은 AWS STS 리전을 사용하기 위한 코드 작성을 참조하십시오.
참고: AWS SDK에서 Region 파라미터는 요청의 대상 엔드포인트를 sts_regional_endpoint 구성 내에서 호출이 수행된 위치로 라우팅합니다.
IdP 지연 시간 평가
IdP는 STS 엔드포인트에 요청을 보냅니다. STS 엔드포인트에 대한 요청이 너무 오래 걸리는지 확인하려면 IdP 로그에서 IdP의 발신 패킷을 분석합니다.
참고: IdP에서 STS 엔드포인트로의 요청이 5초 넘게 걸리는 경우 요청 시간이 초과되어 실패할 수 있습니다. 이 API 호출의 지연 시간을 줄이려면 ID 제공업체에 지리적 가용성을 늘리도록 요청할 수 있습니다.
(선택 사항) 지수 백오프 사용 및 재시도 증가
AssumeRoleWithWebIdentity API는 ID 제공업체(idP)에서 정보를 검색할 수 있어야 작동합니다. 제한 오류를 방지하기 위해 대부분의 IdP에 API 제한이 있으며 API 호출이 IdP에서 필요한 키를 가져오지 못할 수 있습니다. API가 간헐적으로 IdP에 도달하는 데 문제가 있는 경우 역할을 성공적으로 수행할 수 있도록 다음 단계를 따릅니다.
.well_known 및 jwks_uri로의 STS 요청 줄이기
JSON Web Key Set(JWKS)가 Pragma: no-cache 또는 Cache-Control: no-cache 응답 헤더를 설정하는 경우 STS는 JWKS를 캐싱하지 않습니다. 키가 ID_TOKEN에서 참조되지만 캐시에 없으면 STS는 콜백을 수행합니다. 이 경우 STS가 .well\ _known URL과 jwks\ _uri에 너무 많은 요청을 보낼 수 있습니다.
따라서 STS에서 콜백을 줄이려면 JWKS에서 이러한 응답 헤더 중 하나를 설정하지 않았는지 확인하십시오. 이렇게 하면 STS가 JWKS를 캐싱할 수 있습니다.
관련 정보
AWS Security Token Service API 레퍼런스
IAM 및 AWS STS의 API 제한 또는 "비율 초과" 오류를 해결하려면 어떻게 해야 합니까?