IAM 인증을 사용하여 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL에 연결하려면 어떻게 해야 합니까?
AWS Identity and Access Management(IAM) 인증을 사용하여 Amazon Relational Database Service(RDS) PostgreSQL 또는 Amazon Aurora PostgreSQL 호환 버전 DB 인스턴스에 연결하려면 어떻게 해야 합니까?
간략한 설명
사용자는 IAM 사용자 또는 역할 자격 증명과 인증 토큰을 사용하여 Amazon RDS DB 인스턴스 또는 클러스터에 연결할 수 있습니다. IAM 데이터베이스 인증은 다음과 같은 이유로 기본 인증 방법보다 안전합니다.
- IAM은 AWS 액세스 키를 사용하여 데이터베이스 인증 토큰을 생성하므로 데이터베이스 사용자 자격 증명을 저장할 필요가 없습니다.
- 인증 토큰의 수명은 15분이므로 암호 재설정을 적용할 필요가 없습니다.
- IAM 데이터베이스 인증은 SSL 연결이 필요하므로 RDS DB 인스턴스로 송수신되는 모든 데이터가 암호화됩니다.
- 애플리케이션이 Amazon Elastic Compute Cloud(Amazon EC2)에서 실행 중인 경우, EC2 인스턴스 프로파일 자격 증명을 사용하여 데이터베이스에 액세스할 수 있습니다. 인스턴스에 데이터베이스 암호를 저장할 필요가 없습니다.
IAM 역할을 사용하여 IAM 데이터베이스 인증을 설정하려면 다음 단계를 따르십시오.
1. RDS DB 인스턴스에서 IAM DB 인증 활성화
2. IAM 사용자를 생성하고 데이터베이스 사용자를 매핑하는 IAM 정책을 IAM 역할에 연결합니다.
4. AWS 인증 토큰을 생성하여 IAM 역할을 식별합니다.
5. SSL 루트 인증서 파일 또는 인증서 번들 파일을 다운로드합니다.
6. IAM 역할 보안 인증과 인증 토큰 또는 SSL 인증서를 사용하여 RDS DB 인스턴스에 연결합니다.
MySQL을 실행한다면 사용자가 자신의 IAM 보안 인증을 사용하여 Amazon RDS for MySQL DB 인스턴스에 대해 인증할 수 있도록 하려면 어떻게 해야 하나요?를 참조하십시오.
해결 방법
시작하기 전에 다음을 수행해야 합니다.
- PostgreSQL용 RDS DB 인스턴스 또는 IAM 데이터베이스 인증을 지원하는 Aurora PostgreSQL 호환 클러스터 실행
- 데이터베이스에 연결할 EC2 인스터스 실행
자세한 내용은 Amazon Aurora의 IAM 데이터베이스 인증과 RDS의 IAM 데이터베이스 인증을 참조하세요.
PostgreSQL의 IAM 데이터베이스 인증을 사용해서 Amazon RDS DB 인스턴스 또는 Amazon Aurora PostgreSQL DB 클러스터에 연결할 수 있습니다. 1. RDS DB 인스턴스 또는 Aurora 클러스터에서 IAM 인증을 활성화합니다.
2. IAM 사용자를 생성하고 다음의 정책을 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:<region>:<account>:dbuser:<resource id>/iamuser" ] } ] }
참고: iamuser를 IAM 사용자 정보로 바꾸십시오.
3. 마스터 사용자를 사용하여 Amazon RDS PostgreSQL DB 인스턴스 또는 Aurora PostgreSQL 클러스터에 로그인합니다.
psql
psql -h {database or cluster endpoint} -U {Master username} -d {database name}
pgAdmin
PGAdmin 탐색 창에서 서버를 선택합니다. 그런 다음 서버 이름을 선택하고 마스터 사용자 암호를 입력합니다.
4. IAM 사용자와 이름이 동일한 하위 사용자를 만듭니다.
CREATE USER iamuser WITH LOGIN; GRANT rds_iam TO iamuser;
5. 생성한 사용자 이름으로 generate-db-auth-token을 실행합니다. 그러면 사용자가 나중에 사용할 임시 암호가 생성됩니다. 다음의 연결 예제를 참조하세요.
[ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com" [ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)" [ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673 [ec2-user@ip-172-31-24-237 ~]$
6. pgAdmin에서 새 서버 연결을 생성하려면 일반 탭을 선택하고 지금 연결 상자의 선택을 취소(해제)합니다. 연결 탭에 호스트 이름, 포트, 사용자 이름을 입력하고, 암호는 입력하지 마십시오. SSL 탭에서 SSL 모드를 필수로 설정하고 서버 연결을 저장합니다.
7. (선택 사항) SSL 탭에서 **SSL 모드(SSL mode)**를 verify-full로 변경합니다. 선택한 SSL 모드에 따라 인증서(아래의 명령을 실행하여 다운로드) 경로를 입력합니다.
wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
참고: 2015-root 인증서를 사용하는 경우 해당 인증서는 2020년에 만료됩니다. 2019-root 인증서로 이동하려면 SSL/TLS 인증서 라우팅을 참조하세요.
애플리케이션에서 인증서 체인을 허용하지 않는 경우 다음 명령을 실행하여 이전 루트 인증서와 새 루트 인증서를 모두 포함하는 인증서 번들을 다운로드합니다.
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
8. 서버를 생성하고 메시지가 표시되면 임시 토큰 generate-db-auth-token(사용자 iamuser에 대해 생성)을 입력하여 서버에 연결합니다.
psql을 사용할 때는 다음의 명령을 실행하여 연결합니다. 다음 예제는 토큰을 생성할 때 설정한 환경 변수 $PGPASSWORD를 사용합니다. 컴퓨터에 설정되고 연결을 시작합니다.
psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"
참고: 각 토큰은 생성하고 15분 후에 만료됩니다. 동일한 토큰으로 연결을 다시 설정하려고 시도하면 연결에 실패합니다. 새 토큰을 생성해야 합니다.
여전히 "PAM authentication failed for your user"와 유사한 오류를 수신하는 경우, AWS 계정이 AWS Organizations 조직에 속해 있는지 확인합니다. 계정이 조직에 속한 경우에는 계정이 속해 있는 조직의 서비스 제어 정책(SCP)에 rds-db:*를 추가합니다. 자세한 내용은 서비스 제어 정책 생성, 업데이트 및 삭제를 참조하십시오.
계정이 조직에 속해 있는 경우에는 rds-db 권한이 없는 IAM 사용자 또는 역할 계층이 있는지 확인합니다. 자세한 내용은 AWS Organization의 여러 계정에서 서비스 제어 정책을 사용해 권한 가드레일을 설정하는 방법을 참조하세요.
관련 정보

관련 콘텐츠
- 질문됨 6년 전lg...
- 질문됨 13일 전lg...
- 질문됨 10일 전lg...
- 질문됨 5달 전lg...