

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为设置单用户轮换 AWS Secrets Manager
<a name="tutorials_rotation-single"></a>

在本教程中，您将学习如何为包含数据库凭证的密钥设置单用户轮换。*单用户轮换*是一种轮换策略，在该策略中，Secrets Manager 将同时在密钥和数据库中更新用户的凭证。有关更多信息，请参阅 [轮换策略：单用户](rotation-strategy.md#rotating-secrets-one-user-one-password)。

完成本教程后，我们建议您清理教程中的资源。请勿在生产环境中使用它们。

Secrets Manager 轮换使用 AWS Lambda 函数来更新密钥和数据库。有关使用 Lambda 函数的成本的信息，请参阅 [定价](intro.md#asm_pricing)。

**Contents**
+ [Permissions](#tutorials_rotation-single_permissions)
+ [先决条件](#tutorials_rotation-single_step-setup)
+ [步骤 1：创建 Amazon RDS 数据库用户](#tutorials_rotation-single_step-dbuser)
+ [步骤 2：为数据库用户凭证创建密钥](#tutorials_rotation-single_step-rotate)
+ [步骤 3：测试轮换的密码](#tutorials_rotation-single_step-connect-again)
+ [步骤 4：清理资源](#tutorials_rotation-single_step-cleanup)
+ [后续步骤](#tutorials_rotation-single_step-next)

## Permissions
<a name="tutorials_rotation-single_permissions"></a>

本教程的先决条件为，您需要对 AWS 账户的管理权限。在生产环境中，最佳实践是为每个步骤使用不同的角色。例如，具有数据库管理员权限的角色将创建 Amazon RDS 数据库，而具有网络管理员权限的角色将设置 VPC 和安全组。在执行教程步骤时，我们建议您继续使用相同身份。

有关如何在生产环境中设置权限的信息，请参阅 [的身份验证和访问控制 AWS Secrets Manager](auth-and-access.md)。

## 先决条件
<a name="tutorials_rotation-single_step-setup"></a>

本教程的先决条件是 [为用户设置交替轮换 AWS Secrets Manager](tutorials_rotation-alternating.md)。在第一个教程结束时，请不要清理资源。在该教程之后，您将拥有一个现实环境，其中包含一个 Amazon RDS 数据库和一个内含数据库管理员凭证的 Secrets Manager 密钥。您还有另一个密钥包含数据库用户的凭证，但您在本教程中不使用该密钥。

您还在 MySQL Workbench 中配置了一条连接，可以使用管理员凭证连接到数据库。

## 步骤 1：创建 Amazon RDS 数据库用户
<a name="tutorials_rotation-single_step-dbuser"></a>

首先，您需要一个用户，其凭证将被存储在秘密中。要创建用户，请使用存储在密钥中的管理员凭证登录 Amazon RDS 数据库。为简单起见，在本教程中，您将创建具有数据库完全权限的用户。在生产环境中，这并不常见，建议您遵循最低权限原则。

**检索管理员密码**

1. 在 Amazon RDS 控制台中，导航到您的数据库。

1. 在 **Configuration**（配置）选项卡的 **Master Credentials ARN**（主凭证 ARN）下，选择 **Manage in Secrets Manager**（在 Secrets Manager 中管理）。

   此时将打开 Secrets Manager 控制台。

1. 在密钥详细信息页面上，选择 **Retrieve secret value**（检索密钥值）。

1. 密码显示在 **Secret value**（密钥值）部分中。

**创建数据库用户**

1. 在 MySQL 工作台中，右键单击该连接 **SecretsManagerTutorial**，然后选择 “**编辑连接”**。

1. 在 **Manage Server Connections**（管理服务器连接）对话框中，对于 **Username**（用户名），输入 **admin**，然后选择 **Close**（关闭）。

1. 回到 MySQL 工作台，选择连接**SecretsManagerTutorial**。

1. 输入从密钥中检索到的管理员密码。

1.  在 MySQL Workbench 中，在 **Query**（查询）窗口中，输入以下命令（包括强密码），然后选择 **Execute**（执行）。轮换函数使用 SELECT 测试更新的密钥，因此 **dbuser** 必须至少具有该权限。

   ```
   CREATE USER 'dbuser'@'%' IDENTIFIED BY 'EXAMPLE-PASSWORD';
   GRANT SELECT ON myDB . * TO 'dbuser'@'%';
   ```

   在 **Output**（输出）窗口中，您会看到这些命令执行成功。

## 步骤 2：为数据库用户凭证创建密钥
<a name="tutorials_rotation-single_step-rotate"></a>

接下来，您将创建一个密钥用于存储您刚创建的用户的凭证，并且将启用自动轮换（包括立即轮换）。Secrets Manager 会轮换密钥，这意味着密码是以编程方式生成的 – 没有人看到过这个新密码。立即开始轮换也可以帮助您确定轮换设置是否正确。

1. 打开 Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 选择**存储新密钥**。

1. 在 **Choose secret type**（选择密钥类型）页面上，执行以下操作：

   1. 对于 **Secret type**（秘密类型），选择 **Credentials for Amazon RDS database**（Amazon RDS 数据库凭证）。

   1. 对于 **Credentials**（凭证），输入用户名 **dbuser**，以及您为使用 MySQL Workbench 创建的数据库用户输入的密码。

   1. 对于 **Database**（数据库），选择 **secretsmanagertutorialdb**。

   1. 选择**下一步**。

1. 在 **Configure secret**（配置密钥）页面上，对于 **Secret name**（密钥名称），输入 **SecretsManagerTutorialDbuser**，然后选择 **Next**（下一步）。

1. 在 **Configure rotation**（配置轮换）页面上，执行以下操作：

   1. 启用 **Automatic rotation**（自动轮换）。

   1. 对于 **Rotation schedule**（轮换计划），设置计划 **Days**（天数）：**2** 天，以及 **Duration**（持续时间）：**2h**。使 **Rotate immediately**（立即轮换）处于已选择状态。

   1. 对于 **Rotation function**（轮换函数），选择 **Create a rotation function**（创建轮换函数），然后对于函数名称，输入 **tutorial-single-user-rotation**。

   1. 对于**轮换策略**，选择**单用户**。

   1. 选择**下一步**。

1. 在 **Review**（检查）页面上，选择 **Store**（存储）。

   Secrets Manager 会返回到密钥详细信息页面。您可以在该页面顶部查看轮换配置状态。Secrets CloudFormation Manager 用于创建资源，例如 Lambda 轮换函数和运行 Lambda 函数的执行角色。 CloudFormation 完成后，横幅变**为预定轮换的 Secret**。第一次轮换已完成。

## 步骤 3：测试轮换的密码
<a name="tutorials_rotation-single_step-connect-again"></a>

在第一次密钥轮换（可能需要几秒钟）之后，您可以检查秘密是否仍包含有效凭证。秘密中的密码已从原始凭证发生更改。

**从秘密中检索新密码**

1. 打开 Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 选择 **Secrets**（秘密），然后选择秘密 **SecretsManagerTutorialDbuser**。

1. 在 **Secret details**（秘密详细信息）页面上，向下滚动并选择 **Retrieve secret value**（检索秘密值）。

1. 在 **Key/value**（键/值）表中，为 **password** 复制 **Secret value**（秘密值）。

**测试凭证**

1. 在 MySQL 工作台中，右键单击该连接 **SecretsManagerTutorial**，然后选择 “**编辑连接”**。

1. 在 **Manage Server Connections**（管理服务器连接）对话框中，对于 **Username**（用户名），输入 **dbuser**，然后选择 **Close**（关闭）。

1. 回到 MySQL 工作台，选择连接**SecretsManagerTutorial**。

1. 在 **Open SSH Connection**（打开 SSH 连接）对话框中，对于 **Password**（密码），粘贴您从秘密中检索到的密码，然后选择 **OK**（确定）。

   如果凭证有效，则 MySQL Workbench 将打开至数据库的设计页面。

## 步骤 4：清理资源
<a name="tutorials_rotation-single_step-cleanup"></a>

为避免潜在费用，请删除您在本教程中创建的秘密。有关说明，请参阅[删除密 AWS Secrets Manager 钥](manage_delete-secret.md)。

要清理前面教程中创建的资源，请参阅 [步骤 4：清理资源](tutorials_rotation-alternating.md#tutorials_rotation-alternating_step-cleanup)。

## 后续步骤
<a name="tutorials_rotation-single_step-next"></a>
+ 了解如何在您的应用程序中检索秘密。请参阅[从中获取秘密 AWS Secrets Manager](retrieving-secrets.md)。
+ 了解其他轮换计划。请参阅[轮换计划](rotate-secrets_schedule.md)。