명령줄에서 IAM 인증을 사용해 DB 인스턴스에 연결: AWS CLI 및 mysql 클라이언트
명령줄에서 IAM 인증을 사용해 DB 인스턴스에 연결: AWS CLI 및 mysql 클라이언트
AWS CLI와 mysql 명령줄 도구를 사용해 명령줄에서 Amazon RDS DB 인스턴스에 연결할 수 있어요. IAM 인증 토큰을 생성하고 이 토큰으로 SSL 연결을 만드는 과정을 함께 볼게요.
출처: 문서
본문
AWS CLI와 mysql 명령줄 도구를 사용해 명령줄에서 Amazon RDS DB 인스턴스에 연결할 수 있어요.
사전 요구 사항
IAM 인증을 사용해 DB 인스턴스에 연결하기 위한 사전 요구 사항은 다음과 같아요.
- IAM 데이터베이스 인증 활성화 및 비활성화
- IAM 데이터베이스 접근을 위한 IAM 정책 생성 및 사용
- IAM 인증을 사용한 데이터베이스 계정 생성
참고
IAM 인증으로 SQL Workbench/J를 사용해 데이터베이스에 연결하는 방법은 "Use IAM authentication to connect with SQL Workbench/J to Aurora MySQL or Amazon RDS for MySQL" 블로그 게시물을 참고하세요.
주제 (Topics)
- IAM 인증 토큰 생성
- DB 인스턴스에 연결
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 지원에 대한 자세한 내용은 "Amazon RDS에서 MariaDB DB 인스턴스의 SSL/TLS 지원" 문서를, MySQL의 SSL/TLS 지원에 대한 자세한 내용은 "Amazon RDS에서 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 인증을 사용한 데이터베이스 연결" 문서를 참고하세요.