AWS Secrets Manager에서 RDS 프록시용 데이터베이스 자격 증명 설정 - Amazon Aurora

AWS Secrets Manager에서 RDS 프록시용 데이터베이스 자격 증명 설정

생성하는 각 프록시에 대해 먼저 Secrets Manager 서비스를 사용하여 사용자 이름 및 암호 자격 증명 집합을 저장합니다. 프록시가 Aurora DB 클러스터에서 연결하는 각 데이터베이스 사용자 계정에 대해 별도의 Secrets Manager 암호를 만듭니다.

Secrets Manager 콘솔에서는 usernamepassword 필드에 대한 값을 사용하여 이러한 보안 암호를 만듭니다. 이렇게 하면 프록시가 프록시와 연결된 Aurora DB 클러스터에서 해당 데이터베이스 사용자에게 연결할 수 있습니다. 이렇게 하려면 다른 데이터베이스 자격 증명, RDS 데이터베이스 자격 증명 또는 다른 유형의 비밀 설정을 사용할 수 있습니다. 사용자 이름암호 필드에 적절한 값을 입력하고 다른 필수 필드의 값을 입력합니다. 비밀에 호스트포트 같은 다른 필드가 존재하는 경우 프록시는 이를 무시합니다. 이러한 세부 정보는 프록시에서 자동으로 제공합니다.

다른 유형의 비밀을 선택할 수도 있습니다. 이 경우 usernamepassword라는 키를 사용하여 비밀을 만듭니다.

프록시를 통해 특정 데이터베이스 사용자로 연결하려면 보안 암호와 연결된 암호가 해당 사용자의 데이터베이스 암호와 일치하는지 확인합니다. 일치하지 않는 경우 Secrets Manager에서 연결된 비밀을 업데이트할 수 있습니다. 이 경우에도 비밀 자격 증명과 데이터베이스 암호가 일치하는 다른 계정에 연결할 수 있습니다.

AWS CLI 또는 RDS API를 통해 프록시를 생성할 때 해당 암호의 Amazon 리소스 이름(ARN)을 지정합니다. 프록시가 액세스할 수 있는 모든 DB 사용자 계정에 지정합니다. AWS Management Console에서는 설명하는 이름으로 비밀을 선택합니다.

Secrets Manager에서 비밀을 생성하는 방법에 대한 자세한 내용은 Secrets Manager 설명서에서 비밀 생성 페이지를 참조하세요. 다음 기법 중 한 가지를 사용할 수 있습니다.

  • 콘솔에서 Secrets Manager를 사용합니다.

  • CLI를 사용하여 RDS Proxy에서 사용할 Secrets Manager 비밀을 만들려면 다음과 같은 명령을 사용합니다.

    aws secretsmanager create-secret --name "secret_name" --description "secret_description" --region region_name --secret-string '{"username":"db_user","password":"db_user_password"}'
  • 또한 사용자 지정 키를 생성하여 Secrets Manager 보안 암호를 암호화할 수 있습니다. 다음 명령은 예시 키를 생성합니다.

    PREFIX=my_identifier aws kms create-key --description "$PREFIX-test-key" --policy '{ "Id":"$PREFIX-kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam:account_id::role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] }'

예를 들어, 다음 명령은 두 데이터베이스 사용자에 대한 Secrets Manager 보안 암호를 생성합니다.

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

사용자 지정 AWS KMS 키로 암호화된 이러한 보안 암호를 만들려면 다음 명령을 사용하세요.

aws secretsmanager create-secret \ --name secret_name_1 --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id aws secretsmanager create-secret \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}' --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id

AWS 계정이 소유한 암호를 확인하려면 다음과 같은 명령을 사용합니다.

aws secretsmanager list-secrets

CLI를 사용하여 프록시를 생성할 경우 하나 이상의 보안 정보에 대한 Amazon 리소스 이름(ARN)을 --auth 파라미터에 전달합니다. 다음 Linux 예제에서는 AWS 계정이 소유한 각 보안 정보의 이름과 ARN만 사용하여 보고서를 준비하는 방법을 보여 줍니다. 이 예에서는 --output table 버전 2에서 제공되는 AWS CLI 파라미터를 사용합니다. AWS CLI 버전 1을 사용하는 경우 --output text를 대신 사용합니다.

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

올바른 자격 증명을 올바른 형식으로 보아 정보에 저장했는지 확인하려면 다음과 같은 명령을 사용합니다. 암호의 약식 이름 또는 ARN을 your_secret_name으로 대체합니다.

aws secretsmanager get-secret-value --secret-id your_secret_name

출력에는 다음과 같이 JSON으로 인코딩된 값을 표시하는 행이 포함되어야 합니다.

"SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}",