PostgreSQL용 Amazon Relational Database Service(RDS) 또는 Amazon Aurora PostgreSQL 호환 에디션 DB 인스턴스가 있습니다. AWS Identity and Access Management(AWS IAM) 인증을 사용하여 내 인스턴스에 연결하고 싶습니다.
간략한 설명
IAM 데이터베이스 인증은 기본 인증 방법보다 더 안전합니다. 자세한 내용은 MariaDB, MySQL 및 PostgreSQL을 위한 IAM 데이터베이스 인증을 참조하십시오.
IAM 역할을 사용하여 IAM 데이터베이스 인증을 설정하려면 다음 단계를 완료하십시오.
- RDS DB 인스턴스에서 IAM DB 인증을 활성화합니다.
- IAM 사용자를 생성한 다음 데이터베이스 사용자를 IAM 역할에 매핑하는 IAM 정책을 연결합니다.
- IAM 역할을 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 연결합니다.
- IAM 역할을 식별하려면 AWS 인증 토큰을 생성합니다.
- SSL 루트 인증서 파일 또는 인증서 번들 파일을 다운로드합니다.
- RDS DB 인스턴스에 연결하려면 IAM 역할 보안 인증 정보와 인증 토큰 또는 SSL 인증서를 사용합니다.
MySQL을 실행하는 경우, 사용자가 IAM 자격 증명을 사용하여 Amazon RDS for MySQL DB 인스턴스에 인증하도록 허용하려면 어떻게 해야 합니까?를 참조하십시오.
해결 방법
사전 요구 사항
다음 사전 요구 사항을 완료하십시오.
자세한 내용은 Aurora의 경우 IAM 데이터베이스 인증, Amazon RDS의 경우 IAM 데이터베이스 인증을 참조하십시오.
Amazon RDS 인스턴스 또는 Aurora 클러스터를 사용하여 IAM 인증에 필요한 구성을 확인하거나 IAM 인증 문제를 해결하려면 AWSSupport-TroubleshootRDSIAMAuthentication 런북을 사용하십시오. 자세한 내용은 AWSSupport-TroubleshootRDSIAMAuthentication을 참조하십시오.
IAM 데이터베이스 인증 사용
RDS DB 인스턴스 또는 Aurora PostgreSQL 호환 DB 클러스터에 연결하려면 PostgreSQL의 IAM 데이터베이스 인증을 사용하십시오.
-
RDS DB 인스턴스 또는 Aurora 클러스터에서 IAM 인증을 사용하도록 설정합니다.
-
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 사용자 정보로 바꾸십시오.
-
다음 기본 사용자로 Amazon RDS for PostgreSQL DB 인스턴스 또는 Aurora PostgreSQL-Compatible 클러스터에 로그인합니다.
psql
psql -h {database or cluster endpoint} -U {Master username} -d {database name}
pgAdmin
pgAdmin 탐색 창에서 서버를 선택합니다.
그런 다음 서버 이름을 선택하고 기본 사용자 암호를 입력합니다.
-
IAM 사용자와 이름이 같은 하위 사용자를 생성합니다.
CREATE USER iamuser WITH LOGIN; GRANT rds_iam TO iamuser;
-
생성한 사용자 이름으로 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 ~]$
-
pgAdmin에서 새 서버 연결을 만들려면 일반 탭을 선택한 다음 지금 연결 상자의 선택을 취소합니다. 연결 탭에서 호스트 이름, 포트, 사용자 이름을 입력하되 암호는 아직 입력하지 마십시오. SSL 탭에서 SSL 모드를 필요로 설정한 다음 서버 연결을 저장합니다.
-
(선택 사항) SSL 탭에서 SSL 모드를 확인-풀로 변경할 수 있습니다. 선택한 SSL 모드에 인증서 경로를 입력합니다. 경로를 다운로드하려면 다음 명령을 실행합니다.
wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
애플리케이션에서 인증서 체인을 허용하지 않는 경우 이전 및 새 루트 인증서가 모두 포함된 인증서 번들을 다운로드합니다.
$ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
-
서버에 연결합니다. 메시지가 표시되면 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 인증에 실패했습니다와 유사한 오류가 계속 발생하면 AWS 계정이 AWS Organizations 조직 계정인지 확인하십시오. 조직 계정 경우 계정이 속한 조직의 서비스 제어 정책(SCP)에 rds-db:*를 추가합니다. 또한 rds-db 권한이 없는 IAM 사용자 또는 역할의 계층 구조가 있는지 확인합니다.
자세한 내용은 서비스 제어 정책을 사용하여 AWS 조직의 계정 간에 권한 가드 레일을 설정하는 방법을 참조하십시오.
관련 정보
Aurora PostgreSQL과 호환되는 IAM 인증 사용
SSL/TLS 인증서 교체.