Amazon DocumentDB(MongoDB 호환)를 사용할 때 발생하는 인증 문제를 해결하고 싶습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
AWS Identity and Access Management(IAM)를 사용하여 Amazon DocumentDB에 인증하는 경우 "MongoServerError: Authentication failed" 오류가 표시될 수 있습니다. IAM 엔터티에 대한 권한을 잘못 구성한 경우 IAM 역할을 사용할 때 인증 오류가 표시될 수도 있습니다.
참고: Amazon DocumentDB는 클러스터 버전 5.0 이상에서만 인스턴스 기반 클러스터에 대한 IAM 기반 인증을 지원합니다. Amazon DocumentDB 기본 사용자는 IAM 기반 인증을 지원하지 않습니다.
데이터베이스 사용자 및 역할 구성 검토
다음 단계를 완료하십시오.
-
MongoDB 셸을 사용하여 Amazon DocumentDB 클러스터에 루트 사용자로 로그인합니다.
-
IAM 엔터티(IAM 사용자 또는 IAM 역할 ARN)가 $external 데이터베이스에 올바르게 설정되었는지 확인하려면 MongoDB 셸에서 다음 명령을 실행합니다.
use $external;
show users;
-
IAM 사용자 및 IAM 역할의 IAM ARN을 $external 데이터베이스에 등록했는지 확인하십시오. 또한 대상 데이터베이스에 필요한 역할 및 권한을 할당했는지 확인하십시오.
연결 문자열 검증
Amazon DocumentDB 클러스터에 연결할 때는 클라이언트가 연결 문자열에 AuthSource와 AuthMechanism을 모두 올바르게 지정해야 합니다. IAM 인증을 위해서는 AuthSource=$external인 MONGODB-AWS 메커니즘을 사용해야 합니다.
IAM 인증을 사용하여 MongoDB 클러스터에 연결
IAM 사용자 또는 IAM 역할에 MongoDB 클러스터에 액세스할 수 있는 적절한 권한이 있는지 확인하십시오.
mongo "mongodb://<access_key>:<secret_key>@<cluster_endpoint>:<db_port>/test?authSource=%24external&authMechanism=MONGODB-AWS"
참고: access_key를 AWS 액세스 키 ID로 바꾸십시오. secret_key를 AWS 비밀 키로 바꾸십시오. cluster_endpoint를 Amazon DocumentDB 클러스터 엔드포인트로 바꾸십시오. db_port를 데이터베이스 포트 번호로 바꾸십시오. 기본 데이터베이스 포트 번호는 27017입니다.
AWS 환경 자격 증명을 사용하여 MongoDB 클러스터에 연결
AWS 환경 자격 증명으로 MongoDB 클러스터에 연결할 수 있는지 확인하십시오.
mongo "mongodb://<cluster_endpoint>:<db_port>/test?authSource=%24external&authMechanism=MONGODB-AWS"
참고: cluster_endpoint를 Amazon DocumentDB 클러스터 엔드포인트로 바꾸십시오. db_port를 데이터베이스 포트 번호로 바꾸십시오. 기본 데이터베이스 포트 번호는 27017입니다.
클라이언트는 해당 환경에서 임시 자격 증명을 자동으로 검색합니다. 여기에는 다음과 같은 AWS 서비스 역할의 자격 증명이 포함됩니다.
- Amazon Elastic Cloud Compute(Amazon EC2) 인스턴스 프로파일
- Amazon Elastic Container Service(Amazon ECS) 작업 역할
- AWS Lambda 실행 역할
- Amazon Elastic Kubernetes Service(Amazon EKS) 서비스 계정 역할
IAM 역할 또는 IAM 사용자가 클라이언트에서 활성 상태인지 확인
Amazon EC2 또는 AWS Lambda에 대한 AWS 자격 증명을 명시적으로 전달하지 않을 경우 컴퓨팅 리소스에 IAM 역할을 연결했는지 확인하십시오.
Amazon EKS용 AWS 자격 증명을 명시적으로 전달하지 않을 경우 포드 또는 서비스 계정에 적절한 IAM 역할 주석 및 매핑이 있는지 확인하십시오. 또한 컴퓨팅 리소스에 IAM 역할을 연결했는지 확인하십시오.
유효한 IAM ID를 확인하려면 다음 get-caller-identity 명령을 실행합니다.
aws sts get-caller-identity
출력 예시:
{
"UserId": "AIDATOCZW5HO####T22",
"Account": "236411349###",
"Arn": "arn:aws:iam::`444455556666`:user/DocDBRole"
}
출력이 IAM 사용자 또는 IAM 역할과 일치하면 $external 데이터베이스의 ARN이 올바르게 구성된 것입니다.
참고: Amazon DocumentDB는 Node.js 드라이버 버전 6.13.1 이하를 지원하지 않습니다. Amazon DocumentDB용 IAM과 Node.js 드라이버를 함께 사용하려면 Node.js 드라이버와 도구를 6.13.1 이후 버전으로 업그레이드해야 합니다.
관련 정보
IAM ID를 사용한 인증