在 AWS Secrets Manager 中设置 RDS 代理的数据库凭证
对于您创建的每个代理,首先使用 Secrets Manager 服务来存储用户名和密码凭证集。您可以在 RDS 数据库实例上,为代理连接到的每个数据库用户账户分别创建 Secrets Manager 密钥。
在 Secrets Manager 控制台中,您可以使用 username
和 password
字段的值创建这些密钥。这样一来,代理就可以连接到与代理关联的 RDS 数据库实例上的相应数据库用户。为此,您可以使用 Credentials for other database (其他数据库的凭证)、Credentials for RDS database (RDS 数据库凭证) 或 Other type of secrets (其他密钥类型) 设置。为用户名和密码字段填写相应的值,以及任何其它必填字段的值。代理会忽略其他存在于密钥中的字段,如主机和端口。这些详细信息由代理自动提供。
您也可以选择其他密钥类型。在这种情况下,您可以使用名为 username
和 password
的键创建密钥。
要以特定数据库用户身份通过代理进行连接,请确保与密钥关联的密码与该用户的数据库密码相匹配。如果不匹配,您可以在 Secrets Manager 中更新关联的密钥。在这种情况下,您仍然可以连接到密钥凭证和数据库密码确实匹配的其他账户。
注意
对于 RDS for SQL Server,无论数据库实例排序设置如何,RDS 代理都需要在 Secrets Manager 中设置一个对应用程序代码区分大小写的密钥。例如,如果您的应用程序可以使用用户名“Admin”或“admin”,则可以为代理同时配置“Admin”和“admin”密钥。在客户端和代理之间的身份验证过程中,RDS 代理不允许用户名不区分大小写。
有关 SQL Server 中的排序规则的更多信息,请参阅 Microsoft SQL Server
通过 AWS CLI 或 RDS API 创建代理时,请指定相应密钥的 Amazon 资源名称(ARN)。请为代理可以访问的所有数据库用户账户执行此操作。在 AWS Management Console 中,根据描述性名称选择密钥。
有关在 Secrets Manager 中创建密钥的说明,请参阅 Secrets Manager 文档中的创建密钥页面。使用下面的方法之一:
-
使用控制台中的 Secrets Manager
。 -
要使用 CLI 创建与RDS Proxy 一起使用的 Secrets Manager 密钥,请使用类似如下的命令。
aws secretsmanager create-secret --name "
secret_name
" --description "secret_description
" --regionregion_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 \ --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 账户拥有的密钥,请使用以下命令。
aws secretsmanager list-secrets
使用 CLI 创建代理时,将一个或多个密钥的 Amazon Resource Name (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
\"}",