在 AWS Secrets Manager 中设置 RDS 代理的数据库凭证
Amazon RDS 中的 RDS 代理使用 AWS Secrets Manager 安全地存储和管理数据库凭证。您无需在应用程序中嵌入凭证,而是将代理与包含必要身份验证详细信息的 Secrets Manager 密钥相关联。您可以在 Aurora 数据库集群上,为代理连接到的每个数据库用户账户分别创建 Secrets Manager 密钥。
创建与 RDS 代理结合使用的密钥
在创建代理之前,必须先创建至少一个用于存储数据库凭证的密钥。
创建密钥
通过 https://console.aws.amazon.com/secretsmanager/
打开 Secrets Manager 控制台。 -
选择存储新密钥。
-
选择 Amazon RDS 数据库的凭证。
-
输入用户名和密码。您输入的凭证必须与关联的 RDS 数据库中存在的数据库用户的凭证相匹配。RDS 代理使用这些凭证代表应用程序对数据库进行身份验证和建立连接。
如果不匹配,您可以更新密钥来与数据库密码匹配。在更新密钥之前,尝试使用该密钥通过代理进行连接会失败,但使用其它有效密钥的连接仍然有效。
注意
对于 RDS For SQL Server,无论数据库实例排序规则设置如何,RDS 代理都需要在 Secrets Manager 中设置一个区分大小写的密钥。如果应用程序支持用户名使用不同的大小写,例如“Admin”和“admin”,则必须为每个用户名创建单独的密钥。RDS 代理不支持在客户端和代理之间进行不区分大小写的用户名身份验证。
有关 SQL Server 中的排序规则的更多信息,请参阅 Microsoft SQL Server
文档。 -
对于数据库,选择密钥将访问的 Amazon RDS 数据库。
-
填写密钥的其它设置,然后选择存储。有关全面的说明,请参阅《AWS Secrets Manager User Guide》中的 Creating an AWS Secrets Manager secret。
通过 AWS CLI 创建代理时,请指定相应密钥的 Amazon 资源名称(ARN)。请为代理可以访问的所有数据库用户账户执行此操作。在 AWS Management Console 中,根据描述性名称选择密钥。
-
要创建与 RDS 代理结合使用的 Secrets Manager 密钥,请使用 create-secret 命令:
aws secretsmanager create-secret \ --name "
secret_name
" \ --description "secret_description
" \ --regionregion_name
\ --secret-string '{"username":"db_user","password":"db_user_password"}' -
您也可以创建自定义密钥来加密 Secrets Manager 密钥。以下命令创建一个密钥示例。
aws kms create-key --description "
test-key
" --policy '{ "Id":"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 \ --namesecret_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 \ --namesecret_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 账户拥有的密钥,请使用 list-secrets 命令:
aws secretsmanager list-secrets
使用 CLI 创建代理时,将一个或多个密钥的 Amazon Resource Name (ARN) 传递给了 --auth
参数。以下示例展示了如何准备报告,其中仅包含 AWS 账户所拥有的每个密钥的名称和 ARN。此示例使用了 --output table
版本 2 中提供的 AWS CLI 参数。如果您使用的是 AWS CLI 版本 1,请改用 --output
text
。
aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table
要确认密钥包含格式正确的凭证,请使用 get-secret-value 命令。将
替换为密钥的短名称或 ARN。your_secret_name
aws secretsmanager get-secret-value --secret-id
your_secret_name
输出包含一行 JSON 编码值,类似于以下内容:
... "SecretString": "{\"username\":\"
your_username
\",\"password\":\"your_password
\"}", ...