IAM 인증을 사용하여 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL에 연결하려면 어떻게 해야 하나요?

4분 분량
0

PostgreSQL용 Amazon Relational Database Service(RDS) 또는 Amazon Aurora PostgreSQL 호환 에디션 DB 인스턴스가 있습니다. AWS Identity and Access Management(AWS IAM) 인증을 사용하여 내 인스턴스에 연결하고 싶습니다.

간략한 설명

IAM 데이터베이스 인증은 다음과 같은 이유로 인해 기본 인증 방법보다 더 안전합니다.

  • IAM에서는 AWS 액세스 키를 사용해 데이터베이스 인증 토큰을 생성합니다. 데이터베이스 사용자 자격 증명을 저장할 필요가 없습니다.

  • 인증 토큰의 수명은 15분이므로 비밀번호 재설정을 강제할 필요가 없습니다.

  • IAM 데이터베이스 인증에는 SSL 연결이 필요합니다. 이렇게 하면 Amazon RDS DB 인스턴스와 주고받는 모든 데이터가 암호화됩니다.

  • 애플리케이션이 Amazon Elastic Compute Cloud(Amazon EC2)에서 실행되는 경우, Amazon EC2 인스턴스 프로파일 보안 인증 정보를 사용하여 데이터베이스에 액세스할 수 있습니다. 인스턴스에 데이터베이스 비밀번호를 저장할 필요는 없습니다.

IAM 역할을 사용하여 IAM 데이터베이스 인증을 설정하려면 다음 단계를 따르세요.

  1. RDS DB 인스턴스에서 IAM DB 인증을 사용 설정합니다.

  2. IAM 사용자를 만들고 데이터베이스 사용자를 IAM 역할에 매핑하는 IAM 정책을 연결합니다.

  3. EC2 인스턴스에 IAM 역할을 연결합니다.

  4. IAM 역할을 식별하기 위해 AWS 인증 토큰을 생성합니다.

  5. SSL 루트 인증서 파일 또는 인증서 번들 파일을 다운로드합니다.

  6. RDS DB 인스턴스에 연결하려면 IAM 역할 보안 인증 정보와 인증 토큰 또는 SSL 인증서를 사용합니다.

MySQL을 실행하는 경우, 사용자가 IAM 자격 증명을 사용하여 Amazon RDS for MySQL DB 인스턴스에 인증하도록 허용하려면 어떻게 해야 하나요?를 참고하세요.

해결 방법

시작하기 전에 다음 사전 요구 사항을 완료합니다.

  • IAM 데이터베이스 인증을 지원하는 Amazon RDS for PostgreSQL DB 인스턴스 또는 Aurora PostgreSQL 호환 클러스터를 시작합니다.

  • EC2 인스턴스를 시작하여 데이터베이스에 연결합니다.

자세한 내용은 Aurora의 경우 IAM 데이터베이스 인증, Amazon RDS의 경우 IAM 데이터베이스 인증을 참고하세요.

RDS DB 인스턴스 또는 Aurora PostgreSQL 호환 DB 클러스터에 연결하려면 PostgreSQL의 IAM 데이터베이스 인증을 사용하세요.

  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 for PostgreSQL DB 인스턴스 또는 Aurora PostgreSQL-Compatible 클러스터에 로그인합니다.

    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 모드에 인증서 경로를 입력합니다. 경로를 다운로드하려면 다음 명령을 실행합니다.

    wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

    참고: 2015-루트 인증서는 2020년에 만료되었습니다. 2019-루트 인증서로 이동하려면 SSL/TLS 인증서 로테이션을 참고하세요.

    애플리케이션에서 인증서 체인을 허용하지 않는 경우 이전 및 새 루트 인증서가 모두 포함된 인증서 번들을 다운로드합니다.

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. 서버를 만든 후 서버에 연결합니다. 메시지가 표시되면 generate-db-auth-tokeniamuser 사용자에 생성한 임시 토큰을 입력합니다.

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 인증 사용