메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

MySQL 및 Amazon Aurora를 위한 IAM 데이터베이스 인증

Amazon Relational Database Service(Amazon RDS)이 MySQL 또는 Amazon Aurora를 실행하는 상태에서, AWS Identity and Access Management(IAM) 데이터베이스 인증 및 데이터베이스 엔진에 내장된 고유 인증 방법을 이용해 DB 인스턴스에 인증할 수 있습니다. IAM 데이터베이스 인증으로, IAM 사용자 또는 IAM 역할 및 인증 토큰을 이용해 DB 인스턴스 또는 DB 클러스터에 인증합니다. 인증 토큰은 서명 버전 4 서명 프로세스를 통해 생성하는 고유 값이며 생성 후 15분에 만료됩니다. IAM 데이터베이스 인증을 사용하면 동일한 자격 증명을 사용해 AWS 리소스 및 데이터베이스에 대한 액세스를 제어할 수 있습니다. IAM 데이터베이스 인증을 활성화하면 표준 데이터베이스 인증도 계속 사용할 수 있습니다.

MySQL 또는 Aurora 데이터베이스 엔진에 연결하는 사용자 지정 애플리케이션용 IAM 데이터베이스 인증 사용을 권장합니다. IAM 데이터베이스 인증은 다음과 같은 이점이 있습니다.

  • 인증 토큰은 AWS 액세스 키를 사용하는 서명 버전 4 서명 프로세스를 이용해 생성하므로 사용자 암호보다 보안이 더욱 강력합니다. 자세한 내용은 서명 버전 4 서명 프로세스를 참조하십시오.

  • 인증 토큰의 수명은 제한적이므로 사용자 암호를 재설정할 필요는 없습니다. 토큰은 생성 후 15분에 만료됩니다.

  • 데이터베이스 암호 대신 AWS 생성 인증 토큰을 사용하므로 데이터베이스는 데이터베이스 사용자 자격 증명을 저장하지 않습니다.

  • IAM 데이터베이스를 인증하면 SSL(Secure Sockets Layer)을 사용해야 하므로 DB 인스턴스 또는 DB 클러스터를 통해 전송되는 모든 데이터를 암호화해야 합니다.

  • IAM을 이용해 AWS 계정과 데이터베이스 리소스에 액세스할 수 있도록 자격 증명 관리를 IAM에 위임할 수 있습니다.

  • Amazon EC2에서 실행되는 애플리케이션의 경우, EC2 인스턴스 프로파일 자격 증명을 이용해 데이터베이스에 액세스할 수 있으므로 EC2 인스턴스에서 데이터베이스 암호를 사용할 필요가 없습니다.

IAM 데이터베이스 인증을 이용해 DB 인스턴스 또는 DB 클러스터에 인증하려면 다음에 주의해야 합니다.

  • MySQL용 DB 인스턴스 또는 Aurora용 DB 클러스터를 생성하거나 수정할 때는 IAM 데이터베이스 인증을 활성화할 수 있습니다. 또는 기본적으로 IAM 데이터베이스 인증이 비활성화됩니다.

  • 스냅샷을 생성하거나 복사하면, IAM 데이터베이스 인증 설정은 DB 인스턴스 또는 DB 클러스터에서 상속됩니다.

  • 스냅샷에서 DB 인스턴스 또는 DB 클러스터를 복구하면, IAM 데이터베이스 인증 설정은 스냅샷의 인증 설정으로 지정됩니다. 복구 중 IAM 데이터베이스 인증 설정을 변경할 수 있습니다.

  • MySQL을 Aurora로 마이그레이션하는 경우, IAM 데이터베이스 인증 설정은 MySQL DB 인스턴스에서 상속됩니다.

  • DB 클러스터에서 DB 인스턴스 또는 Aurora 복제본의 읽기 복제본을 생성하면, 복제본은 소스 DB 인스턴스 또는 DB 클러스터의 IAM 데이터베이스 인증 설정을 상속합니다.

  • IAM 데이터베이스 인증을 비활성화하고 IAM 사용자에 매핑하는 데이터베이스 엔진의 데이터베이스 계정을 보유하고 있다면, 이러한 사용자는 인증할 수 없으므로 DB 인스턴스나 DB 클러스터에 연결할 수 없습니다.

  • IAM 데이터베이스 인증 설정을 변경하더라도 DB 인스턴스 또는 DB 클러스터는 가동 중지되지 않습니다. 그러므로 변경 사항을 즉시 적용하거나 다음 유지 관리 기간 중에 적용할 수 있습니다.

다음 데이터베이스 엔진에 대해 IAM 데이터베이스 인증을 사용할 수 있습니다.

  • MySQL 5.6, 마이너 버전 5.6.34 이상

  • MySQL 5.7, 마이너 버전 5.7.16 이상

  • Amazon Aurora 1.10 이상

MySQL의 경우, db.t1.micro 및 db.m1.small을 제외하고 모든 지원 인스턴스 클래스에서 IAM 데이터베이스 인증을 사용할 수 있습니다. Aurora의 경우, db.t2.small을 제외하고 모든 지원 인스턴스 클래스에서 IAM 데이터베이스 인증을 사용할 수 있습니다. 각 데이터베이스 엔진이 지원하는 인스턴스 클래스에 대한 자세한 내용은 DB 인스턴스 클래스 단원을 참조하십시오.

IAM 데이터베이스 인증을 이용할 때는, db.t2.micro 인스턴스 클래스를 사용하는 경우를 제외하고 연결을 초당 20회 이하로 제한해야 합니다. 이 경우, 초당 10회 이하로 연결을 제한해야 합니다.

연결 및 인증에 대한 자세한 내용은 다음을 참조하십시오.

IAM 데이터베이스 인증을 이용한 DB 인스턴스 또는 DB 클러스터 인증

IAM 데이터베이스 인증을 이용해 DB 인스턴스 또는 DB 클러스터 인증을 활성화하려면 다음 조치를 취하십시오.

IAM 데이터베이스 인증을 이용해 DB 인스턴스 또는 DB 클러스터에 인증하려면

  1. AWS 관리 콘솔, AWS CLI 또는 Amazon RDS API를 이용하여 DB 인스턴스 또는 DB 클러스터의 IAM 데이터베이스 인증을 활성화합니다. 자세한 내용은 IAM 데이터베이스 인증의 활성화 및 비활성화 섹션을 참조하십시오.

  2. 이러한 계정을 IAM 사용자 또는 역할에 매핑할 수 있도록 허용하는, 인증 토큰을 사용하는 1개 이상의 데이터베이스 사용자 계정을 생성합니다. 이렇게 하려면 CREATE USER 명령에서 인증 플러그인을 지정해야 합니다. 자세한 내용은 IAM 데이터베이스 인증용 데이터베이스 계정 생성 섹션을 참조하십시오.

  3. DB 인스턴스 또는 DB 클러스터 리소스 ID를 지정하여 RDS 리소스에 대한 액세스를 허용하는 IAM 정책을 생성하고, 인증 토큰 활성화 데이터베이스 사용자 계정을 생성해 액세스에 이용합니다. 그런 다음 해당 정책을 IAM 사용자나 역할이 연결합니다. 그러면 지정된 데이터베이스 사용자와 마찬가지로 IAM 사용자 또는 역할을 지정된 DB 인스턴스나 DB 클러스터에 연결할 수 있습니다. 자세한 내용은 IAM 정책 계정과 IAM 사용자 또는 역할의 연결 섹션을 참조하십시오. IAM에 대한 자세한 내용은 IAM 사용 설명서IAM 사용자IAM 역할을 참조하십시오.

  4. Java용 AWS SDK 또는 AWS CLI를 이용해, IAM 사용자 또는 역할의 확인을 위해 사용할 수 있는 인증 토큰을 확보하십시오. 인증에 토큰 확보 방법에 대해서는 인증 토큰 가져오기 단원을 참조하십시오.

  5. SSL 연결을 이용하는 데이터베이스에 연결해 IAM 사용자 또는 역할을 암호로 데이터베이스 사용자 계정 및 사용자 토큰으로 지정하십시오. 자세한 내용은 IAM 데이터베이스 인증을 이용한 DB 인스턴스 또는 DB 클러스터 연결 섹션을 참조하십시오.

IAM 데이터베이스 인증의 활성화 및 비활성화

AWS 관리 콘솔, AWS CLI 또는 Amazon RDS API를 이용하여 IAM 데이터베이스 인증을 위한 DB 인스턴스 또는 DB 클러스터를 활성화할 수 있습니다. 기본적으로 IAM 데이터베이스 인증이 비활성화됩니다.

Amazon RDS 관리 콘솔

다음과 같이 콘솔에서 IAM 데이터베이스 인증을 활성화 및 비활성화할 수 있습니다.

  • DB 인스턴스 또는 DB 클러스터를 생성하면, [Configure Advanced Settings] 페이지의 [Database Options] 그룹에서 [Enable IAM DB Authentication]을 [Yes]로 설정하여 IAM 데이터베이스 인증을 활성화할 수 있습니다.

  • DB 인스턴스 또는 DB 클러스터를 수정하면, [Modify DB Instance] 페이지의 [Database Options] 그룹에서 [Enable IAM DB Authentication]을 [Yes]로 설정하여 IAM 데이터베이스 인증을 활성화할 수 있습니다.

  • DB 인스턴스 또는 DB 클러스터를 복원하면, [Restore DB Instance] 페이지의 [Database Options] 그룹에서 [Enable IAM DB Authentication]을 [No]로 설정하여 IAM 데이터베이스 인증을 비활성화할 수 있습니다.

AWS CLI

다음과 같이 AWS CLI를 이용해 IAM 데이터베이스 인증을 활성화 및 비활성화할 수 있습니다.

  • CLI로 DB 인스턴스 또는 DB 클러스터를 생성하는 경우, create-db-instance 명령(MySQL) 또는 create-db-cluster 명령(Aurora)을 이용해 IAM 데이터베이스 인증을 활성화할 수 있습니다. IAM 데이터베이스 인증은 DB 인스턴스 또는 DB 클러스터에 대해 기본적으로 꺼져 있습니다. IAM 데이터베이스 인증을 활성화하려면 --enable-iam-database-authentication을 지정합니다.

  • CLI로 DB 인스턴스 또는 DB 클러스터를 수정하는 경우, modify-db-instance 명령(MySQL) 또는 modify-db-cluster 명령(Aurora)을 이용해 IAM 데이터베이스 인증을 활성화 또는 비활성화할 수 있습니다. IAM 데이터베이스 인증을 활성화하려면 --enable-iam-database-authentication을 지정합니다. IAM 데이터베이스 인증을 비활성화하려면 --no-enable-iam-database-authentication을 지정합니다.

  • restore-db-instance-to-point-in-time 또는 restore-db-instance-from-db-snapshot 명령을 이용해 DB 인스턴스를 복원하거나, restore-db-cluster-to-point-in-time 또는 restore-db-cluster-from-snapshot 명령을 이용해 DB 클러스터를 복원하는 경우, IAM 데이터베이스 인증 설정은 소스 스냅샷의 인증 설정으로 지정됩니다. --enable-iam-database-authentication을 활성화하거나 --no-enable-iam-database-authentication을 비활성화하여 IAM 데이터베이스 인증 설정을 변경할 수 있습니다.

다음은 IAM 데이터베이스 인증을 활성화하여 mydbinstance이라는 MySQL DB 인스턴스를 생성하는 예제입니다.

Linux, OS X, Unix의 경우:

Copy
aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --db-instance-class db.m3.medium \ --engine MySQL \ --allocated-storage 20 \ --master-username masterawsuser \ --master-user-password masteruserpassword \ --enable-iam-database-authentication

Windows의 경우:

Copy
aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --db-instance-class db.m3.medium ^ --engine MySQL ^ --allocated-storage 20 ^ --master-username masterawsuser ^ --master-user-password masteruserpassword ^ --enable-iam-database-authentication

다음은 mysqldb DB 인스턴스에 대해 IAM 데이터베이스 인증을 활성화하는 예제입니다. 변경이 바로 적용됩니다. 다음 유지 관리 기간 동안 변경 사항을 적용하려면 --apply-immediately 대신 --no-apply-immediately을 사용할 수 있습니다.

Linux, OS X, Unix의 경우:

Copy
aws rds modify-db-instance \ --db-instance-identifier mysqldb \ --apply-immediately \ --enable-iam-database-authentication

Windows의 경우:

Copy
aws rds modify-db-instance ^ --db-instance-identifier mysqldb ^ --apply-immediately ^ --enable-iam-database-authentication

Amazon RDS API

다음과 같이 Amazon RDS API를 이용해 IAM 데이터베이스 인증을 활성화 및 비활성화할 수 있습니다.

  • API로 DB 인스턴스 또는 DB 클러스터를 생성하는 경우, CreateDBInstance 작업(MySQL) 또는 CreateDBCluster 작업(Amazon Aurora)을 이용해 IAM 데이터베이스 인증을 활성화할 수 있습니다. IAM 데이터베이스 인증은 DB 인스턴스 또는 DB 클러스터에 대해 기본적으로 꺼져 있습니다. IAM 데이터베이스 인증을 활성화하려면 EnableIAMDatabaseAuthentication에 대해 true를 지정합니다.

  • API로 DB 인스턴스 또는 DB 클러스터를 수정하는 경우, ModifyDBInstance 작업(MySQL) 또는 ModifyDBCluster 작업(Aurora)을 이용해 IAM 데이터베이스 인증을 활성화 또는 비활성화할 수 있습니다. IAM 데이터베이스 인증을 활성화하려면 EnableIAMDatabaseAuthentication에 대해 true를 지정합니다. IAM 데이터베이스 인증을 비활성화하려면 EnableIAMDatabaseAuthentication에 대해 false를 지정합니다.

  • RestoreDBInstanceToPointInTime 또는 RestoreDBInstanceFromDBSnapshot 작업을 이용해 DB 인스턴스를 복원하거나, RestoreDBClusterToPointInTime 또는 RestoreDBClusterFromSnapshot 작업을 이용해 DB 클러스터를 복원하는 경우, IAM 데이터베이스 인증 설정은 소스 스냅샷의 인증 설정으로 지정됩니다. EnableIAMDatabaseAuthentication에 대해 true를 지정해 활성화하거나 EnableIAMDatabaseAuthentication에 대해 false를 지정해 비활성화하여 IAM 데이터베이스 인증 설정을 변경할 수 있습니다.

IAM 데이터베이스 인증용 데이터베이스 계정 생성

IAM 데이터베이스 인증을 이용해 DB 인스턴스 또는 DB 클러스터에 연결하려면, 이러한 사용자 계정이 IAM 사용자 또는 역할에 매핑될 수 있도록 허용하는, 인증 토큰을 수용할 수 있는 데이터베이스 사용자 계정을 생성합니다.

이렇게 하려면 인증 플러그인을 사용해야 합니다. 이 경우, CREATE USER 명령의 IDENTIFIED WITH 인수를 이용해 인증 플러그인으로 AWSAuthenticationPlugin을 지정합니다. 그러면 저장된 암호가 없는 데이터베이스 사용자 계정이 생성되지만, 그 자리에 AWS 인증 토큰을 수용할 수 있습니다.

표준 데이터베이스 클라이언트 애플리케이션에서 DB 인스턴스 또는 DB 클러스터에 연결하거나 ALTER USER DROP USER 등의 SQL 명령을 실행하여, 다른 데이터베이스 사용자 계정과 동일한 방식으로 인증 플러그인과 연동된 데이터베이스 계정을 관리합니다.

인증 토큰을 사용하는 데이터베이스 사용자 계정을 생성하려면 다음과 같이 CREATE USER MySQL 명령을 사용하는 데이터베이스 사용자 계정을 생성합니다.

Copy
CREATE USER jane_doe IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

앞에 나온 명령에서 다음은 true입니다.

  • IDENTIFIED WITH는 IAM 데이터베이스 인증을 관리하는 플러그인 AWSAuthenticationPlugin을 데이터베이스 사용자 계정과 연동합니다.

  • as 'RDS" 키워드는 데이터베이스 계정을 IAM 사용자 또는 역할에 매핑합니다. IAM 사용자 또는 역할은 Amazon IAM ARN 형식이어야 합니다. 이런 경우 데이터베이스 계정이 arn:aws:iam::123456789012:user/jane_doe IAM 사용자에 매핑합니다. IAM 데이터베이스 인증이 활성화된 경우 jane_doe가 DB 인스턴스에 인증될 수 있습니다. Amazon IAM ARN 형식에 대한 자세한 내용은 IAM ARN 단원을 참조하십시오. IAM 사용자 또는 역할을 생성하는 방법에 대한 자세한 내용은 AWS 계정의 IAM 사용자 생성 단원을 참조하십시오. IAM 사용자 관리에 대한 자세한 내용은 IAM 사용자 관리 단원을 참조하십시오.

참고

데이터베이스 계정에 매핑된 IAM 사용자를 제거한 후 DROP USER MySQL 명령을 실행하여 사용자를 제거해야 합니다.

IAM 정책 계정과 IAM 사용자 또는 역할의 연결

IAM 사용자 또는 역할을 Amazon RDS DB 인스턴스나 DB 클러스터에 연결하도록 허용하려면, IAM 정책을 생성하여 IAM 사용자 또는 역할에 해당 정책을 연결해야 합니다. IAM 정책은 AWS 리소스에 대한 허가, 그리고 IAM 사용자 또는 역할이 수행할 수 있는 작업을 지정합니다. 이 경우 다음 정책 속성을 지정하여 데이터베이스 사용자 계정에 대한 액세스를 허용합니다.

  • Effect: [Allow]를 지정해 DB 인스턴스 또는 DB 클러스터에 대한 액세스를 허용합니다. 기본 [Effect] 값은 DB 인스턴스 또는 DB 클러스터에 대한 액세스를 거부하는 [Deny]입니다.

  • Action: rds-db:connect [Action] 값을 지정해 1개 이상의 DB 인스턴스 또는 DB 클러스터에 대한 연결을 허용합니다.

  • Resource: 다음과 같이 구성되는 데이터베이스 사용자 계정 ARN(Amazon Resource Name)을 지정합니다.

    Copy
    arn:aws:rds-db:region:account-id:dbuser:dbi-resource-id/database-user-name

    다음의 예처럼 dbi 리소스 ID를 지정하여 DB 인스턴스 또는 DB 클러스터의 특정 데이터베이스 사용자 계정 연결을 허용할 수 있습니다.

    Copy
    arn:aws:rds-db:us-west-2:12345678:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe

    Amazon RDS Management Console의 DB 인스턴스 또는 DB 클러스터 세부 정보 페이지에서 dbi 리소스 ID를 찾을 수 있습니다. 또한 AWS CLI describe-db-instances 명령 또는 Amazon RDS API DescribeDBInstances 작업이 반환하는 DBInstance 객체의 DbiResourceId 요소, 또는 AWS CLI describe-db-clusters 명령 또는 Amazon RDS API DescribeDBClusters 작업이 반환하는 DBCluster 객체의 DbClusterResourceId 요소로부터 DB 인스턴스 dbi 리소스 ID를 확보할 수 있습니다.

    또는 다음의 예처럼 dbi 리소스 ID 대신 *을 지정하여 모든 DB 인스턴스 또는 DB 클러스터의 데이터베이스 사용자 계정 연결을 허용할 수 있습니다. DB 인스턴스 또는 DB 클러스터는 지정한 인증 토큰으로 활성화되는 데이터베이스 사용자 계정을 가져야 합니다.

    Copy
    arn:aws:rds-db:us-west-2:12345678:dbuser:*/jane_doe

    데이터베이스 사용자는 IAM 데이터베이스 인증용 데이터베이스 계정 생성의 설명대로 IAM 데이터베이스 인증을 관리하는 AWSAuthenticationPlugin 플러그인과 연동되어야 합니다.

    IAM 사용자 또는 역할은 데이터베이스 사용자가 액세스할 수 있는 데이터베이스에만 액세스할 수 있습니다. 예를 들어 DB 인스턴스에 데이터베이스 A와 B가 있고 데이터베이스 사용자 jane_doe가 데이터베이스 A에만 액세스한다면, 해당 계정을 사용해 해당 DB 인스턴스에 액세스하는 IAM 사용자 또는 역할은 데이터베이스 A에만 액세스할 수 있습니다. 동일한 제한 사항이 테이블, 보기 등과 같은 다른 데이터베이스 객체에 적용됩니다.

    여러 IAM 사용자 또는 역할을 동일한 데이터베이스 사용자 계정에 매핑할 수 있습니다. 예를 들면 IAM 사용자 A 및 B는 데이터베이스 사용자 ARN arn:aws:rds-db:us-west-2:12345678:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe를 리소스로 지정하여 A와 B에 DB 인스턴스 액세스를 부여하는 정책을 모두 적용할 수 있습니다.

IAM 정책에 대한 자세한 내용은 IAM 정책 개요를 참조하십시오.

다음은 2개의 사용자 계정을 사용하여 2개의 DB 인스턴스 연결을 허용하는 예제 정책입니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-west-2:12345678:dbuser:db-12ABC34DEFG5HIJ6KLMNOP78QR/jane_doe", "arn:aws:rds-db:us-east-1:12345678:dbuser:db-23ABC45DEFG6HIJ7KLMNOP89QR/mary_roe" ] } ] }

다음은 jane_doe의 인증 토큰 활성화 데이터베이스 사용자 계정을 가지는, 주어진 계정의 us-west-2 리전의 모든 DB 인스턴스 및 DB 클러스터에 대한 연결을 허용하는 예제 정책입니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "rds-db:connect" ], "Resource": [ "arn:aws:rds-db:us-west-2:12345678:dbuser:*/jane_doe" ] } ] }

rds-db:connect IAM 정책을 IAM 사용자 또는 역할에 연결하는 방법을 알아보려면, IAM 사용 설명서 첫 고객 관리 정책 생성 및 연결 자습서를 참조하십시오. 이 자습서에서는 앞서 다룬 정책 등과 같은 rds-db:connect 정책을 지정합니다.

인증 토큰 가져오기

IAM 데이터베이스 인증에서는 IAM 사용자 또는 IAM 역할 및 인증 토큰을 사용해 데이터베이스 엔진에 인증합니다. 인증 토큰은 수명이 15분인 AWS 서명 버전 4 알고리즘이 생성하는 값입니다. 만료된 토큰을 사용해 데이터베이스에 연결하면 연결 요청이 거부됩니다.

인증 토큰은 다양한 방법으로 가져올 수 있습니다. 다음 단원에서 각 방법에 대해 설명합니다.

애플리케이션을 Amazon EC2 인스턴스에서 실행하는 경우 EC2 인스턴스 프로파일 자격 증명을 사용할 수 있습니다. EC2 인스턴스 프로파일 자격 증명에 대해 자세히 알아보려면 IAM 사용 설명서 IAM 역할을 이용해 Amazon EC2의 AWS 리소스에 액세스 허용하기 IAM 역할을 이용해 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 허용하기를 참조하십시오.

Java용 AWS SDK를 사용한 인증 토큰 확보

DefaultAWSCredentialsProviderChain 클래스를 사용해 인증 토큰을 확보하려면, 우선 AWS SDK for Java에 있는 RdsIamAuthTokenGenerator 클래스의 인스턴스를 생성합니다. 그런 다음 getToken() 메서드를 호출합니다.

RdsIamAuthTokenGenerator 인스턴스를 생성하려면 AWS 자격 증명을 입력해야 합니다. AWS 자격 증명을 입력하려면 먼저 AWS SDK for Java에도 속하는 DefaultAWSCredentialsProviderChain 클래스 인스턴스를 생성해야 합니다. 이 클래스는 기본 자격 증명 공급자 체인에서 찾을 수 있는 첫 번째 AWS 액세스 키와 AWS 보안 키를 사용합니다. AWS 액세스 키에 대한 자세한 내용은 IAM 사용자를 위한 액세스 키 관리 단원을 참조하십시오. RdsIamAuthTokenGenerator의 인스턴스와 함께 getToken() 메서드를 호출하십시오.

다음은 DefaultAWSCredentialsProviderChain를 사용하여 인증 토큰을 확보하는 예제입니다.

Copy
private static String generateAuthToken() { // Generate an authentication token using AWS credentials in the default credential provider chain. RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder() .credentials(new DefaultAWSCredentialsProviderChain()) .region(regionName) .build(); String authToken = generator.getAuthToken(GetIamAuthTokenRequest .builder() .hostname(rds_instance_hostname) .port(rds_instance_port) .userName("iam-database-user") .build()); return authToken; }

AWS CLI를 사용한 인증 토큰 확보

AWS CLI에서 generate-db-auth-token CLI 명령을 사용해 인증 토큰을 확보할 수 있습니다. generate-db-auth-token 명령은 다음 형식을 취합니다.

Copy
generate-db-auth-token --hostname <value> --port <value> --username <value>

generate-db-auth-token CLI 명령의 파라미터는 다음과 같이 정의됩니다.

  • hostname — (문자열) 연결할 데이터베이스의 호스트 이름.

  • port — (정수) 데이터베이스가 수신 대기하는 포트 번호.

  • username — (문자열) 로그인할 사용자 이름.

다음 예제는 사용자 이름 iamuser에 대해 포트 3306에서 호스트 이름의 인증 토큰을 생성합니다.

Copy
aws rds generate-db-auth-token --hostname iam-db-auth-test.eu-central-1.rds.amazonaws.com --port 3306 --username iamuser

IAM 데이터베이스 인증을 이용한 DB 인스턴스 또는 DB 클러스터 연결

IAM 데이터베이스 인증을 이용하여 DB 인스턴스에 연결하려면, 데이터베이스 연결 암호화를 위한 암호로 인증 토큰이 포함된 SSL 연결을 이용해야 합니다. 자세한 내용은 DB 인스턴스 연결 암호화를 위한 SSL 사용 및 보안 연결 사용을 참조하십시오.

다음 예제에서는 MySQL을 실행하는 DB 인스턴스에 연결하는 이전 예제의 authToken 값을 이용합니다. Amazon RDS 인스턴스의 엔드포인트를 가져오기 위해 AWS Management Console이나 MySQL용 AWS CLI describe-db-instances 명령, 또는 Aurora용 RDS API 작업 describe-db-clusters를 사용할 수 있습니다.

참고

DB 클러스터: 클러스터 엔드포인트, 리더 엔드포인트 또는 인스턴스 엔드포인트에 대한 여러 엔드포인트 중 하나를 사용하여 Aurora DB 클러스터의 인스턴스에 연결할 수 있습니다. 자세한 내용은 Aurora 엔드포인트 단원을 참조하십시오.

Copy
private static Connection getDBConnectionUsingIam() { String jdbcUrl = "jdbc:mysql://" + rds_instance_endpoint; Properties mysqlConnectionProperties = new Properties(); mysqlConnectionProperties.setProperty("verifyServerCertificate", "true"); mysqlConnectionProperties.setProperty("useSSL", "true"); System.setProperty("javax.net.ssl.trustStore","path_to_truststore"); System.setProperty("javax.net.ssl.trustStorePassword","trustore_password"); mysqlConnectionProperties.setProperty("user", "iam-database-user"); // Call a method to generate an authentication token (see above example) String authToken = generateAuthToken(); // Set authentication token as password mysqlConnectionProperties.setProperty("password", authToken); Connection connection = DriverManager.getConnection(jdbcUrl, mysqlConnectionProperties); }

관련 주제