GetSessionToken 문제 디버깅
sts.getSessionToken()
요청이 AccessDenied: Cannot call GetSessionToken with session credentials
오류를 반환하면 다른 임시 자격 증명 세트를 얻기 위해 임시 자격 증명을 사용하려고 시도하고 있음을 나타냅니다.1. 상황
다음 오류 메시지를 받았을 때 EC2 인스턴스를 Mongo Atlas에 연결하려고 했습니다.
AccessDenied: Cannot call GetSessionToken with session credentials
내 EC2 인스턴스에는 Mongo Atlas의 데이터베이스 사용자에 추가한 인스턴스 역할이 연결되어 있습니다.
무슨 일이 일어날 수 있었습니까?
2. 설명
오류 메시지는 다른 임시 자격 증명 세트를 사용하여 임시 자격 증명을 얻고 싶다는 것을 나타냅니다.
Mongo Atlas는 passwordless authentication을 사용하여 AWS IAM을 지원합니다. Mongo 드라이버는 EC2 메타데이터에서 임시 자격 증명(액세스 키 ID, 보안 액세스 키 및 세션 토큰)을 읽습니다.
인스턴스 역할의 임시 자격 증명 사용에 대한 내 생각은 정확했습니다. 그러나 데이터베이스 연결이 설정되는 코드의 깊숙한 곳에서
GetSessionToken
STS API 엔드포인트를 호출하여 특정 상황에서 임시 자격 증명을 수신했습니다.3. 솔루션
GetSessionToken
API 끝점은 AWS 계정 또는 IAM 사용자에 대한 임시 자격 증명을 반환합니다.Lambda 실행 역할 또는 ECS 작업 역할과 유사한 EC2 인스턴스 역할은 이미 임시 자격 증명으로 작동합니다. 그들 중 누구도 AWS 계정이나 IAM 사용자가 아닙니다.
내 노트북에서 애플리케이션을 테스트하고 싶을 때 자체 AWS 사용자 자격 증명을 사용할 수 있습니다.
사용자는 장기 자격 증명(액세스 키 ID 및 비밀 액세스 키)을 가지고 있으므로
GetSessionToken
엔드포인트를 호출하고 임시 자격 증명을 데이터베이스 연결 문자열에 추가하는 것은 공격 표면을 줄이는 좋은 방법입니다.그러나 EC2 인스턴스의 경우 임시 자격 증명이 이미 존재하므로 바로 Atlas를 호출할 수 있습니다. 다른 자격 증명 세트를 얻을 필요가 없습니다.
4. GetSessionToken 정보
장기 자격 증명으로
GetSessionToken
작업을 호출해야 합니다. 일상적인 작업에 루트 사용자를 사용하는 것은 좋지 않지만 이론적으로 루트 사용자와 IAM 사용자 모두 엔드포인트를 호출할 수 있습니다.엔드포인트는 액세스 키 ID, 보안 액세스 키 및 세션 토큰을 포함하는 임시 자격 증명 집합을 반환합니다. 다단계 인증이 필요한 작업이나 암호 없는 방식으로 데이터베이스에 연결하는 작업에서 이러한 자격 증명을 사용할 수 있습니다.
대부분의 경우 애플리케이션에서 임시 자격 증명을 사용하여 데이터베이스 또는 다른 AWS 서비스에 연결하려고 합니다.
GetSessionToken
에 대한 요청에는 자격 증명이 유효한 기간을 지정하는 DurationSeconds
매개 변수가 있을 수 있습니다. 사용자 세션의 길이는 15분에서 3일까지 다양하며 기본값은 12시간입니다.그러나
GetSessionToken
및 AssumeRole
를 제외하고 GetCallerIdentity
에서 제공한 자격 증명으로 STS API 끝점을 호출할 수 없습니다. 이는 예를 들어 엔드포인트가 이미 제공한 자격 증명으로 GetSessionToken
를 다시 호출할 수 없음을 의미합니다.5. 결론
AccessDenied: Cannot call GetSessionToken with session credentials
오류 메시지는 임시 자격 증명 집합으로 STS 끝점을 호출했음을 보여줍니다. 작업에서 이 호출을 허용하지 않습니다.해결 방법은 장기 자격 증명(IAM 사용자)을 사용하여 호출
GetSessionToken
하거나 워크플로에서 추가 임시 자격 증명 호출을 제거하는 것입니다.자격 증명에 관련 권한이 있는 경우 애플리케이션의 역할은 성공적인 연결에 충분해야 합니다.
6. 추가 자료
GetSessionToken - API 설명서
Reference
이 문제에 관하여(GetSessionToken 문제 디버깅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/debugging-a-getsessiontoken-issue-fk3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)