SSL 연결이 필요한 DB 사용자에 대해 AWS Secrets Manager 보안 암호를 교체하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 1일

내 AWS Secrets Manager 교체 함수가 SSL을 통해서 Amazon Relational Database Service(Amazon RDS) 인스턴스에 연결할 수 없습니다. 다음과 비슷한 오류가 발생합니다.

": setSecret: Unable to log into database with previous, current, or pending secret of secret"

해결 방법

DB 사용자의 Lambda 교체 함수를 수정하여 SSL 연결이 필요한 DB 사용자에 대해 보안 암호를 교체합니다. 이 예제에서는 Amazon RDS MySQL DB 단일 사용자 인스턴스를 사용하여 RDS MySQL 단일 사용자 템플릿을 수정합니다. RDS MySQL이 아닌 RDS 데이터베이스를 사용하려면 Lambda 교체 함수를 생성하기 위해 사용할 수 있는 AWS 템플릿을 확인하십시오.

보안 암호를 생성하고 자동 교체 활성화

1.    [Secrets Manager 콘솔]을 열고 [Store a new secret]를 선택합니다.

참고: 반드시 Amazon RDS MySQL 데이터베이스와 같은 리전에 로그인해야 합니다.

2.    [Select secret type]에서 [Credentials for RDS database]를 선택합니다.

3.    DB 사용자와 동일한 [사용자 이름]과 [암호]를 입력합니다.

4. [Select which RDS database this secret will access]에서 사용자의 Amazon RDS MySQL 데이터베이스를 선택한 후 [Next]를 선택합니다.

5.    [Secret name] 및 [Description]을 입력하고 [Next]를 선택합니다.

6.    [Configure automatic rotation]에서 [Enable automatic rotation]을 선택합니다.

7.    [New AWS Lambda function name]에서 이름을 입력하고 [Next]를 선택한 후 [Store]를 선택합니다.

SSL 연결을 통해 데이터베이스에 연결할 Lambda 교체 함수 사용자 지정

1.    [AWS Lambda 콘솔]을 열고 [Functions]를 선택합니다.

2.    [Function name]에서 사용자의 RDS MySQL 함수를 선택합니다.

3.    페이지 상단에서 [ARN] 옆의 [복사]아이콘을 선택합니다.

4.    SSL을 사용해 DB 인스턴스 연결 암호화에서 rds-combined-ca-bundle.pem 인증서 번들을 다운로드합니다..

참고: 파일 이름을 rds-combined-ca-bundle.pem으로 유지하고 디렉터리에서 파일을 입력하지 않습니다.

5.    rds-combined-ca-bundle.pem 파일을 Lambda에 추가합니다. 지침은 AWS Lambda 콘솔 편집기를 사용하여 함수 생성을 참조하십시오.

6.    lambda_function.py에서 “pymysql.connect”를 포함한 코드 줄을 다음으로 변경합니다.

conn = pymysql.connect(secret_dict['host'], user=secret_dict['username'], passwd=secret_dict['password'], port=port, db=dbname, connect_timeout=5, ssl={'ca': './rds-combined-ca-bundle.pem'})  

7.    [저장]을 선택하십시오.

수동으로 보안 암호 교체

1.    다음 명령을 실행하여 보안 암호 버전 ID를 나열합니다.

참고: EXAMPLESECRETNAME을 사용자의 보안 암호 변수로 교체합니다.

aws secretsmanager list-secret-version-ids --secret-id EXAMPLESECRETNAME

2.    출력에서 AWSPENDINGVersionStages 값이 있는 버전 ID를 찾습니다. 그리고 다음 명령을 실행하여 스테이징 레이블을 제거합니다.

aws secretsmanager update-secret-version-stage --secret-id EXAMPLESECRETNAME --remove-from-version-id EXAMPLEVERSIONID --version-stage AWSPENDING

3.    [Secrets Manager 콘솔]을 열고 보안 암호를 선택합니다.

4.    [Rotation Configuration]에서 [Rotate secret immediately]를 선택한 다음 [Rotate]를 선택합니다.

DB 사용자에 대해 데이터베이스 연결 확인

사용자 초기 암호 검증의 1~5 단계에 따라 MySQL 클라이언트를 설치하고 보안 암호를 임시로 검색합니다.

참고 3단계를 다음 명령으로 바꿉니다.

mysql -h $endpoint --ssl-ca=EXAMPLEPATH/rds-combined-ca-bundle.pem --ssl-verify-server-cert -u $user -P $port -p$password