在 Amazon Secrets Manager 中设置 RDS 代理的数据库凭证 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon RDS 中的 RDS 代理使用 Amazon Secrets Manager 安全地存储和管理数据库凭证。您无需在应用程序中嵌入凭证,而是将代理与包含必要身份验证详细信息的 Secrets Manager 密钥相关联。您可以在 RDS 数据库实例上,为代理连接到的每个数据库用户账户分别创建 Secrets Manager 密钥。

创建与 RDS 代理结合使用的密钥

在创建代理之前,必须先创建至少一个用于存储数据库凭证的密钥。

创建密钥
  1. 通过 https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台。

  2. 选择存储新密钥

  3. 选择 Amazon RDS 数据库的凭证

  4. 输入用户名和密码。您输入的凭证必须与关联的 RDS 数据库中存在的数据库用户的凭证相匹配。RDS 代理使用这些凭证代表应用程序对数据库进行身份验证和建立连接。

    如果不匹配,您可以更新密钥来与数据库密码匹配。在更新密钥之前,尝试使用该密钥通过代理进行连接会失败,但使用其它有效密钥的连接仍然有效。

    注意

    对于 RDS For SQL Server,无论数据库实例排序规则设置如何,RDS 代理都需要在 Secrets Manager 中设置一个区分大小写的密钥。如果应用程序支持用户名使用不同的大小写,例如“Admin”和“admin”,则必须为每个用户名创建单独的密钥。RDS 代理不支持在客户端和代理之间进行不区分大小写的用户名身份验证。

    有关 SQL Server 中的排序规则的更多信息,请参阅 Microsoft SQL Server 文档。

  5. 对于数据库,选择密钥将访问的 Amazon RDS 数据库。

  6. 填写密钥的其它设置,然后选择存储。有关全面的说明,请参阅《Amazon Secrets Manager User Guide》中的 Creating an Amazon Secrets Manager secret

通过 Amazon CLI 创建代理时,请指定相应密钥的 Amazon 资源名称(ARN)。请为代理可以访问的所有数据库用户账户执行此操作。在 Amazon Web Services Management Console 中,根据描述性名称选择密钥。

  • 要创建与 RDS 代理结合使用的 Secrets Manager 密钥,请使用 create-secret 命令:

    aws secretsmanager create-secret \ --name "secret_name" \ --description "secret_description" \ --region region_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 \ --name secret_name_2 --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

要创建使用自定义 Amazon 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

要查看您的 Amazon 账户拥有的密钥,请使用 list-secrets 命令:

aws secretsmanager list-secrets

使用 CLI 创建代理时,将一个或多个密钥的 Amazon Resource Name (ARN) 传递给了 --auth 参数。以下示例展示了如何准备报告,其中仅包含 Amazon 账户所拥有的每个密钥的名称和 ARN。此示例使用了 --output table 版本 2 中提供的 Amazon CLI 参数。如果您使用的是 Amazon CLI 版本 1,请改用 --output text

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

要确认密钥包含格式正确的凭证,请使用 get-secret-value 命令。将 your_secret_name 替换为密钥的短名称或 ARN。

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

输出包含一行 JSON 编码值,类似于以下内容:

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