사용자가 IAM 보안 인증을 사용해 Amazon RDS for MySQL DB 인스턴스에 인증하도록 허용하려면 어떻게 해야 하나요?

5분 분량
0

MySQL을 실행하는 Amazon Relational Database Service(RDS) 데이터베이스(DB) 인스턴스에 연결하려고 합니다. 기본 인증 방법 대신 AWS Identity and Access Management(IAM) 보안 인증을 사용하고 싶습니다.

간략한 설명

사용자는 IAM 사용자 또는 역할 보안 인증과 인증 토큰을 사용해 Amazon RDS DB 인스턴스 또는 클러스터에 연결할 수 있습니다. IAM 데이터베이스 인증은 다음과 같은 이유로 기본 인증 방법보다 더 안전합니다.

  • IAM 데이터베이스 인증 토큰은 AWS 액세스 키를 사용하여 생성됩니다. 데이터베이스 사용자 보안 인증을 저장할 필요가 없습니다.

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

  • IAM 데이터베이스 인증에는 보안 소켓 계층(SSL) 연결이 필요합니다. DB 인스턴스와 주고 받는 모든 데이터는 암호화됩니다.

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

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

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

  2. AWS 인증 토큰을 사용하는 데이터베이스 사용자 계정을 생성합니다.

  3. 데이터베이스 사용자를 IAM 역할에 매핑하는 IAM 정책을 추가합니다.

  4. Amazon RDS 액세스를 허용하는 IAM 역할을 생성합니다.

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

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

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

  8. IAM 역할 보안 인증과 인증 토큰을 사용하여 RDS DB 인스턴스에 연결합니다.

  9. IAM 역할 보안 인증과 SSL 인증서를 사용하여 RDS DB 인스턴스에 연결합니다.

해결 방법

시작하기 전에 IAM 데이터베이스 인증을 지원하는 DB 인스턴스와 Amazon EC2 인스턴스를 시작하여 데이터베이스에 연결해야 합니다.

RDS DB 인스턴스에서 IAM DB 인증 사용 활성화

Amazon RDS 콘솔, AWS Command Line Interface(AWS CLI) 또는 Amazon RDS API를 사용하여 IAM 데이터베이스 인증을 활성화할 수 있습니다. Amazon RDS 콘솔을 사용하여 DB 인스턴스를 수정하는 경우 즉시 적용을 선택하여 IAM 데이터베이스 인증을 활성화합니다. IAM 인증을 활성화하려면 잠시 중단해야 합니다. 중단이 필요한 수정에 대한 자세한 내용은 Amazon RDS DB 인스턴스를 참고하세요.

참고: 즉시 적용을 선택하면 보류 중인 수정 사항도 유지 관리 기간 동안이 아니라 즉시 적용됩니다. 이로 인해 인스턴스가 장기간 중단될 수 있습니다. 자세한 내용은 즉시 적용 설정 사용을 참고하세요.

AWS 인증 토큰을 사용하는 데이터베이스 사용자 계정 생성

  1. 다음 명령을 실행하여 DB 인스턴스 또는 클러스터 엔드포인트에 연결합니다. 마스터 암호를 입력하여 로그인합니다.
$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p
  1. 암호 대신 AWS 인증 토큰을 사용하는 데이터베이스 사용자 계정을 생성합니다.
CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
  1. 기본적으로 데이터베이스 사용자는 권한 없이 생성됩니다. 이는 **SHOW GRANTS FOR {dbusername}**을 실행할 때 GRANT USAGE로 나타납니다. SSL을 사용해 연결할 때 사용자 계정이 필요하도록 하려면 다음 명령을 실행합니다.
ALTER USER {dbusername} REQUIRE SSL;
  1. exit 명령을 실행하여 MySQL을 닫습니다. 그리고 DB 인스턴스에서 로그아웃합니다.

데이터베이스 사용자를 IAM 역할에 매핑하는 IAM 정책 추가

  1. IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책을 선택합니다.

  3. 정책 생성을 선택합니다.

  4. 필요한 사용자에게 rds-db:connect 작업을 허용하는 정책을 입력합니다. 이 정책 생성과 관련한 자세한 내용은 IAM 데이터베이스에 액세스할 때 필요한 IAM 정책 생성 및 사용을 참조하세요.

**참고:**DB 인스턴스 식별자 및 데이터베이스 사용자 이름과 같은 데이터베이스 리소스의 세부 정보를 사용하여 리소스 값을 편집해야 합니다.

  1. 다음: 태그를 선택합니다.

  2. 다음: 검토를 선택합니다.

  3. 이름에 정책 이름을 입력합니다.

  4. 정책 생성을 선택합니다.

Amazon RDS 액세스를 허용하는 IAM 역할 생성

  1. IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택합니다.

  3. 역할 생성을 선택합니다.

  4. AWS 서비스를 선택합니다.

  5. EC2를 선택합니다.

  6. 사용 사례 선택에서 EC2를 선택한 후 다음: 권한을 선택합니다.

  7. 검색 창의 “데이터베이스 사용자를 매핑하는 IAM 정책 추가” 섹션에서 이전에 생성한 IAM 정책을 찾을 수 있습니다.

  8. 다음: 태그를 선택합니다.

  9. 다음: 검토를 선택합니다.

  10. **역할 이름에 ** 이 IAM 역할의 이름을 입력합니다.

  11. 역할 생성을 선택합니다.

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

1.    Amazon EC2 콘솔을 엽니다.

  1. Amazon RDS에 연결하는 데 사용할 EC2 인스턴스를 선택합니다.

  2. 새로 생성한 IAM 역할을 EC2 인스턴스에 연결합니다.

  3. SSH를 사용해 EC2 인스턴스에 연결합니다.

IAM 역할을 식별할 수 있는 AWS 인증 토큰 생성

Amazon EC2 인스턴스에 연결한 후 다음 AWS CLI 명령을 실행해 인증 토큰을 생성합니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

나중에 사용할 수 있도록 이 인증 토큰을 복사하여 저장합니다. 토큰은 생성 후 15분 이내에 만료됩니다.

또는 AWS SDK를 사용해 토큰을 생성할 수 있습니다.

SSL 루트 인증서 파일 또는 인증서 번들 파일 다운로드

다음 명령을 실행해 모든 리전에서 사용할 수 있는 루트 인증서를 다운로드합니다.

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

IAM 역할 보안 인증과 인증 토큰을 사용하여 RDS DB 인스턴스에 연결

인증서 파일을 다운로드한 후 다음 명령 중 하나를 실행해 SSL로 DB 인스턴스에 연결합니다.

참고: 애플리케이션에서 인증서 체인을 허용하지 않는 경우 다음 명령을 실행해 인증서 번들을 다운로드합니다.

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

사용 중인 인증서(RootCA이나 Bundle)에 따라 다음 명령 중 하나를 실행합니다.

RootCA 명령:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

번들 명령:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

참고: MariaDB 클라이언트를 사용하는 경우 --enable-cleartext-plugin 옵션이 필요하지 않습니다.

IAM 역할 보안 인증과 SSL 인증서를 사용해 RDS DB 인스턴스에 연결

인증서 파일을 다운로드한 후 SSL을 사용해 DB 인스턴스에 연결합니다. 자세한 내용은 MySQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결을 참고하세요.

관련 정보

MariaDB, MySQL, PostgreSQL용 IAM 데이터베이스 인증

사용자가 Amazon RDS DB 인스턴스를 생성, 삭제, 수정, 백업, 복구할 때 필요한 최소 권한은 무엇입니까?