AWS Security Token Service(AWS STS) AssumeRoleWithWebIdentity API 직접 호출이 "InvalidIdentityToken" 오류로 인해 실패했습니다. 이 문제를 해결하고 싶습니다.
해결 방법
AssumeRoleWithWebIdentity API 직접 호출이 실패하면 다음 메시지와 비슷한 오류가 발생할 수 있습니다.
"An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation. Couldn't retrieve verification key from your identity provider."
참고: 이 문제는 클라이언트 측의 실패이므로, AWS CloudTrail 이벤트 기록에 이 오류가 로깅되지 않습니다.
.well-known 및 jwks_uri에 대한 공용 액세스 확인
ID 제공업체(idP)의 .well-known URL과 jwks_uri에 액세스할 수 없는 경우 오류가 발생할 수 있습니다. IdP의 .well-known URL과 jwks_uri에 공용 액세스가 가능한지 확인하십시오.
접근성을 확인하려면 브라우저에서 다음 링크로 이동하십시오.
- 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-configurationwget https://BASE_SERVER_URL/.well-known/jwks.json
Linux의 경우:
curl https://BASE_SERVER_URL/.well-known/openid-configurationcurl https://BASE_SERVER_URL/.well-known/jwks.json
참고: BASE_SERVER_URL을 IdP의 기본 URL로 바꾸십시오.
링크에 액세스할 수 있는지 확인하려면 요청 응답에서 HTTP 200 상태 코드를 확인합니다.
방화벽 설정 확인
IdP의 .well-known URL 및 jwks_uri에 액세스할 수 없는 경우 방화벽 설정을 확인합니다. 도메인이 거부 목록에 없는지 확인합니다. 방화벽의 현재 구성에 따라 도메인을 허용 목록에 추가해야 할 수 있습니다.
사용자 지정 방화벽이 요청을 차단하면 오류가 발생할 수 있습니다.
방화벽 설정에 액세스할 수 없는 경우 휴대폰 등의 다른 네트워크의 장치에서 브라우저를 사용합니다.
브라우저에서 다음 링크로 이동하십시오.
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
참고: BASE_SERVER_URL을 IdP의 기본 URL로 바꾸십시오.
AssumeRoleWithWebIdentity API 직접 호출을 수행하는 서버가 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스인 경우 구성 설정을 확인합니다. 자세한 내용은 EC2 인스턴스에서 호스팅되는 웹사이트에 연결할 수 없는 이유는 무엇입니까?를 참조하십시오.
작업 지연 시간 확인
IdP에서 AWS STS 엔드포인트에 도달하기 위한 API 요청에 5초를 초과하는 지연 시간이 있는 경우 오류가 발생할 수 있습니다.
전체 작업의 지연 시간을 확인합니다. 여기에는 STS의 요청 및 응답 시간과 IdP 속성의 요청 및 응답 시간이 포함됩니다.
STS 지연 시간 최소화
STS 서비스에는 전역 엔드포인트 대신 AWS 리전 엔드포인트를 사용합니다. 이렇게 하면 요청이 지리적으로 가장 가까운 서버로 라우팅되어 대기 시간을 최소화할 수 있습니다. 자세한 내용은 AWS STS 리전을 사용하기 위한 코드 작성을 참조하십시오.
참고: AWS SDK에서 Region 파라미터는 요청의 대상 엔드포인트를 sts_regional_endpoint 구성 내에서 호출이 수행된 위치로 라우팅합니다.
IdP 지연 시간 평가
IdP는 STS 엔드포인트에 요청을 보냅니다. STS 엔드포인트에 대한 요청이 너무 오래 걸리는지 확인하려면 IdP 로그 내에서 IdP의 발신 패킷을 검토합니다.
참고: IdP에서 STS 엔드포인트까지 전송하는 데 5초 이상 걸리면 요청 시간이 초과되어 실패할 수 있습니다. 이 API 직접 호출의 지연 시간을 줄이려면 ID 제공업체에 지리적 가용성을 늘리도록 요청할 수 있습니다.
(선택 사항) 지수 백오프 사용 및 재시도 증가
IdP는 정보를 제공하여 AssumeRoleWithWebIdentity를 지원합니다. 대부분의 IdP는 스로틀링 오류를 방지하기 위해 API 제한을 두고 있으며, IdP가 API 직접 호출에서 필요한 키를 반환하지 않을 수 있습니다. API가 IdP에 도달하는 데 간헐적인 문제가 발생하는 경우 다음 문제 해결 옵션을 사용하십시오.
- 지수 백오프를 사용합니다.
- 재시도 횟수를 늘린 다음 최대 재시도 횟수를 설정합니다. 또한 최대 지연 간격을 구현합니다. 자세한 내용은 재시도 동작을 참조하십시오.
.well-known 및 jwks_uri로의 STS 요청 줄이기
JSON Web Key Set(JWKS)가 Pragma: no-cache 또는 Cache-Control: no-cache 응답 헤더를 설정하는 경우 STS는 JWKS를 캐싱하지 않습니다. STS는 캐시가 아닌 ID_TOKEN에서 참조되는 키에 대한 콜백을 수행합니다. 이 경우 STS가 .well-known URL과 jwks_uri에 너무 많은 요청을 보낼 수 있습니다.
STS에서 콜백을 줄이려면 JWKS에서 이러한 응답 헤더 중 하나를 설정하지 않았는지 확인하십시오. 이렇게 하면 STS가 JWKS를 캐싱할 수 있습니다.
JWKS의 키 수 줄이기
STS는 JWKS에서 최대 100개의 키만 지원합니다. JWKS에 100개가 넘는 키가 있는 경우 STS는 키로 서명된 토큰을 확인할 수 없습니다. AssumeRoleWithWebIdentity를 직접 호출하고 JWKS에 100개가 넘는 키가 있는 경우 "InvalidIdentityToken" 오류가 발생할 수 있습니다.
오류를 해결하려면 JWKS에서 더 이상 필요하지 않은 키를 제거하십시오. 또는 JWKS에 있는 키 수를 줄이십시오.
관련 정보
AWS Security Token Service API 레퍼런스
IAM 및 AWS STS의 API 스로틀링 또는 "Rate exceeded" 오류를 해결하려면 어떻게 해야 합니까?