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

최종 업데이트 날짜: 2020년 10월 15일

AWS Secrets Manager 교체 함수가 SSL을 통해 Amazon Relational Database Service(Amazon RDS) 인스턴스에 연결되지 않습니다. 오류 메시지는 다음과 유사합니다.

“: setSecret: 이전, 현재 또는 보류 중인 암호로 데이터베이스에 로그인 할 수 없습니다(: 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 사용자와 동일한 [사용자 이름(User name)]과 [암호(Password)]를 입력합니다.

4.    [이 보안 암호에 액세스할 RDS 데이터베이스 선택(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.    [새 AWS Lambda 함수 이름(New AWS Lambda function name)]에서 이름을 입력하고 [다음(Next)]을 선택한 후 [저장(Store)]을 선택합니다.

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

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

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

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

4.    [SSL을 사용해 DB 인스턴스 연결 암호화(Using SSL to encrypt a connection to a DB Instance)]에서 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.    [저장(Save)]을 선택합니다.

수동으로 보안 암호 교체

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 사용자에 대해 데이터베이스 연결 확인

자습서: AWS 데이터베이스의 암호 교체의 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