为 AWS Secrets Manager 设置单用户轮换 - AWS Secrets Manager

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

为 AWS Secrets Manager 设置单用户轮换

在本教程中,您将学习如何为包含数据库凭证的密钥设置单用户轮换。单用户轮换是一种轮换策略,在该策略中,Secrets Manager 将同时在密钥和数据库中更新用户的凭证。有关更多信息,请参阅 轮换策略:单用户

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

Secrets Manager 轮换使用 AWS Lambda 函数来更新密钥和数据库。有关使用 Lambda 函数的成本的信息,请参阅 定价

权限

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

有关如何在生产环境中设置权限的信息,请参阅 AWS Secrets Manager 的身份验证和访问控制

先决条件

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

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

步骤 1:创建 Amazon RDS 数据库用户

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

检索管理员密码
  1. 在 Amazon RDS 控制台中,导航到您的数据库。

  2. Configuration(配置)选项卡的 Master Credentials ARN(主凭证 ARN)下,选择 Manage in Secrets Manager(在 Secrets Manager 中管理)。

    此时将打开 Secrets Manager 控制台。

  3. 在密钥详细信息页面上,选择 Retrieve secret value(检索密钥值)。

  4. 密码显示在 Secret value(密钥值)部分中。

创建数据库用户
  1. 在 MySQL Workbench 中,右键单击连接 SecretsManagerTutorial,然后选择 Edit Connection(编辑连接)。

  2. Manage Server Connections(管理服务器连接)对话框中,对于 Username(用户名),输入 admin,然后选择 Close(关闭)。

  3. 返回 MySQL 工作台,选择连接 SecretsManagerTutorial

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

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

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

    Output(输出)窗口中,您会看到这些命令执行成功。

步骤 2:为数据库用户凭证创建密钥

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

  1. https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台。

  2. 选择 存储新密钥

  3. Choose secret type(选择密钥类型)页面上,执行以下操作:

    1. 对于 Secret type(秘密类型),选择 Credentials for Amazon RDS database(Amazon RDS 数据库凭证)。

    2. 对于 Credentials(凭证),输入用户名 dbuser,以及您为使用 MySQL Workbench 创建的数据库用户输入的密码。

    3. 对于 Database(数据库),选择 secretsmanagertutorialdb

    4. 选择下一步

  4. Configure secret(配置密钥)页面上,对于 Secret name(密钥名称),输入 SecretsManagerTutorialDbuser,然后选择 Next(下一步)。

  5. Configure rotation(配置轮换)页面上,执行以下操作:

    1. 启用 Automatic rotation(自动轮换)。

    2. 对于 Rotation schedule(轮换计划),设置计划 Days(天数):2 天,以及 Duration(持续时间):2h。使 Rotate immediately(立即轮换)处于已选择状态。

    3. 对于 Rotation function(轮换函数),选择 Create a rotation function(创建轮换函数),然后对于函数名称,输入 tutorial-single-user-rotation

    4. 对于轮换策略,选择单用户

    5. 选择下一步

  6. Review(检查)页面上,选择 Store(存储)。

    Secrets Manager 会返回到密钥详细信息页面。您可以在该页面顶部查看轮换配置状态。Secrets Manager 使用 CloudFormation 创建资源,如 Lambda 轮换函数和运行 Lambda 函数的执行角色。当 CloudFormation 完成后,横幅将更改为 Secret scheduled for rotation(秘密已计划轮换)。第一次轮换已完成。

步骤 3:测试轮换的密码

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

从秘密中检索新密码
  1. 打开 Secrets Manager 控制台,网址为 https://console.aws.amazon.com/secretsmanager/

  2. 选择 Secrets(秘密),然后选择秘密 SecretsManagerTutorialDbuser

  3. Secret details(秘密详细信息)页面上,向下滚动并选择 Retrieve secret value(检索秘密值)。

  4. Key/value(键/值)表中,为 password 复制 Secret value(秘密值)。

测试凭证
  1. 在 MySQL Workbench 中,右键单击连接 SecretsManagerTutorial,然后选择 Edit Connection(编辑连接)。

  2. Manage Server Connections(管理服务器连接)对话框中,对于 Username(用户名),输入 dbuser,然后选择 Close(关闭)。

  3. 返回 MySQL 工作台,选择连接 SecretsManagerTutorial

  4. Open SSH Connection(打开 SSH 连接)对话框中,对于 Password(密码),粘贴您从秘密中检索到的密码,然后选择 OK(确定)。

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

步骤 4:清理资源

为避免潜在费用,请删除您在本教程中创建的秘密。有关说明,请参阅 删除 AWS Secrets Manager 密钥

要清理前面教程中创建的资源,请参阅 步骤 4:清理资源

后续步骤