명령줄에서 IAM 인증을 사용하여 DB 인스턴스에 연결: AWS CLI 및 mysql 클라이언트 - Amazon Relational Database Service

명령줄에서 IAM 인증을 사용하여 DB 인스턴스에 연결: AWS CLI 및 mysql 클라이언트

아래 설명과 같이 AWS CLI 및 mysql 명령줄 도구를 사용하여 명령줄에서 Amazon RDS DB 인스턴스로 연결할 수 있습니다.

필수 조건

다음은 IAM 인증을 사용하여 DB 인스턴스에 연결하기 위한 사전 조건입니다.

참고

IAM 인증을 통한 SQL Workbench/J를 사용하여 데이터베이스에 연결하는 방법에 대한 자세한 내용은 블로그 게시물 IAM 인증을 사용하여 SQL Workbench/J를 Aurora MySQL 또는 Amazon RDS for MySQL에 연결을 참조하세요.

IAM 인증 토크 생성

다음은 AWS CLI를 사용하여 서명이 되어 있는 인증 토큰을 생성하는 방법을 설명한 예제입니다.

aws rds generate-db-auth-token \ --hostname rdsmysql.123456789012.us-west-2.rds.amazonaws.com \ --port 3306 \ --region us-west-2 \ --username jane_doe

위의 예제에서 각 파라미터는 다음과 같습니다.

  • --hostname – 액세스할 DB 인스턴스의 호스트 이름입니다.

  • --port – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.

  • --region - DB 인스턴스가 실행되는 AWS 리전입니다.

  • --username – 액세스할 데이터베이스 계정입니다.

토큰에서 가장 앞의 일부 문자는 다음과 같은 모습입니다.

rdsmysql.123456789012.us-west-2.rds.amazonaws.com:3306/?Action=connect&DBUser=jane_doe&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900...
참고

인증 토큰을 생성할 때는 DB 인스턴스 엔드포인트 대신 사용자 지정 Route 53 DNS 레코드를 사용할 수 없습니다.

DB 인스턴스에 연결

일반적인 연결 형식은 다음과 같습니다.

mysql --host=hostName --port=portNumber --ssl-ca=full_path_to_ssl_certificate --enable-cleartext-plugin --user=userName --password=authToken

파라미터는 다음과 같습니다.

  • --host – 액세스할 DB 인스턴스의 호스트 이름입니다.

  • --port – DB 인스턴스에 연결할 때 사용할 포트 번호입니다.

  • --ssl-ca - 퍼블릭 키를 포함하는 SSL 인증서 파일의 전체 경로

    MariaDB용 SSL/TLS 지원 방법에 대한 자세한 내용은 MariaDB DB 인스턴스와 함께 SSL/TLS 사용 섹션을 참조하세요.

    MySQL용 SSL/TLS 지원 방법에 대한 자세한 내용은 MySQL DB 인스턴스와 함께 SSL/TLS 사용 섹션을 참조하세요.

    SSL 인증서를 다운로드하려면 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 섹션을 참조하세요.

  • --enable-cleartext-plugin – 현재 연결에서 AWSAuthenticationPlugin을 사용하도록 지정하는 값입니다.

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

  • --user – 액세스할 데이터베이스 계정입니다.

  • --password – 서명된 IAM 인증 토큰입니다.

인증 토큰은 수백 자의 문자로 구성됩니다. 그렇기 때문에 명령줄에서는 다루지 불편할 수도 있습니다. 이러한 문제를 해결하기 위해 토큰을 환경 변수로 저장한 후 연결할 때 이 변수를 사용하는 것도 한 가지 방법입니다. 다음은 이러한 문제 해결 방법을 설명한 예제입니다. 이 예에서 /sample_dir/는 퍼블릭 키를 포함하는 SSL 인증서 파일의 전체 경로입니다.

RDSHOST="mysqldb.123456789012.us-east-1.rds.amazonaws.com" TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username jane_doe )" mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN

AWSAuthenticationPlugin을 사용하여 연결할 때는 SSL을 통해 보안을 유지합니다. 이러한 보안 여부를 확인하려면 mysql> 명령 프롬프트에 다음과 같이 입력합니다.

show status like 'Ssl%';

그러면 출력 시 다음과 같이 자세하게 표시됩니다.

+---------------+-------------+ | Variable_name | Value | +---------------+-------------+ | ... | ... | Ssl_cipher | AES256-SHA | | ... | ... | Ssl_version | TLSv1.1 | | ... | ... +-----------------------------+

프록시를 통해 DB 인스턴스에 연결하려는 경우 IAM 인증을 사용하여 프록시에 연결을 참조하세요.