在 AWS Secrets Manager 中设置 RDS 代理的数据库凭证 - Amazon Relational Database Service

在 AWS Secrets Manager 中设置 RDS 代理的数据库凭证

对于您创建的每个代理,首先使用 Secrets Manager 服务来存储用户名和密码凭证集。您可以在 RDS 数据库实例上,为代理连接到的每个数据库用户账户分别创建 Secrets Manager 密钥。

在 Secrets Manager 控制台中,您可以使用 usernamepassword 字段的值创建这些密钥。这样一来,代理就可以连接到与代理关联的 RDS 数据库实例上的相应数据库用户。为此,您可以使用 Credentials for other database (其他数据库的凭证)Credentials for RDS database (RDS 数据库凭证)Other type of secrets (其他密钥类型) 设置。为用户名密码字段填写相应的值,以及任何其它必填字段的值。代理会忽略其他存在于密钥中的字段,如主机端口。这些详细信息由代理自动提供。

您也可以选择其他密钥类型。在这种情况下,您可以使用名为 usernamepassword 的键创建密钥。

要以特定数据库用户身份通过代理进行连接,请确保与密钥关联的密码与该用户的数据库密码相匹配。如果不匹配,您可以在 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" --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 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\"}",