教程:旋转一个秘密Amazondatabase - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

教程:旋转一个秘密Amazondatabase

在本教程中,您为 Amazon 数据库创建一个密钥,并将该密钥配置为按计划轮换。您手动触发一次轮换,然后确认密钥的新版本能否继续提供访问权限。

配置测试 MySQL 数据库

在该步骤中,在 Amazon Relational Database Service (Amazon RDS) 中创建一个测试数据库。对于本教程,该测试数据库将运行 MySQL。

第 2 步:创建密钥

接下来,使用 Secrets Manager 控制台创建密钥,并在密钥中填充 MySQL 数据库的初始用户名和密码。使用返回的凭证登录到数据库以测试密钥。

第 3 步:验证您的初始机密

在步骤 3 中,使用新密钥测试凭证,并确保您可以使用这些凭证连接到数据库。

第 4 步:为您的秘密配置旋转

在步骤 4 中,为密钥启用轮换并执行初始轮换。

第 5 步:验证轮换成功

在该步骤中,在初始轮换完成后,重复验证步骤以确认可使用在轮换期间生成的新凭证继续访问数据库。

第 6 步:清除

在最后一步中,删除 Amazon RDS 数据库实例和密钥,以免产生任何不必要的成本。

Prerequisites

本教程假定您可以访问Amazon帐户,您可以登录Amazon作为具有完全权限的用户配置Amazon Secrets Manager和 Amazon RDS,可以使用控制台或Amazon CLI。

本教程使用 MySQL 客户端工具 MySQLWorkbench 与数据库交互、配置用户和检查状态。本教程在以下步骤中的相应位置包含安装说明。

在本教程中配置的数据库允许通过端口 3306 访问公有 Internet,这也是为了简化本教程的设置。要完成本教程,您必须能够使用 MySQL 客户端工具 MySQLWorkbench 从 Internet 连接的计算机中访问 MySQL 数据库。我们建议您遵循 Lambda 和 Amazon EC2 VPC 文档中的准则,以安全地配置生产服务器。

重要

为使轮换正常工作,网络环境必须允许 Lambda 轮换函数与数据库和 Secrets Manager 服务通信。因为本教程为数据库配置了公共 Internet 访问,所以 Lambda 会自动将轮换函数配置为通过公有 IP 地址访问数据库。如果阻止数据库实例的公共 Internet 访问权限,则必须将 Lambda 函数配置为与数据库实例在同一 VPC 中运行。那么你必须使用私有 Secrets Manager 终端节点配置您的 VPC,或者使用 NAT 网关为 VPC 配置了公共 Internet 访问权限,以便 Lambda 旋转函数可以访问公共 Secrets Manager 端点。

所需权限

要成功运行本教程,您必须拥有与 SecretsManagerReadWrite Amazon 托管策略关联的所有权限。您还必须有权创建 IAM 角色,并将权限策略附加到该角色。您可以授予 IAMFullAccess Amazon 托管策略,或显式分配 iam:CreateRoleiam:AttachRolePolicy

警告

iam:CreateRoleiam:AttachRolePolicy 允许用户为自己授予任何权限,因此,请仅为账户中的受信任用户授予这些策略。

配置测试 MySQL 数据库

  1. 在本教程的本部分中,您登录到您的账户,并在 Amazon RDS 中配置 MySQL 数据库。

  2. 执行以下步骤:

    1. 登录到Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

    2. Dashboard (控制面板) 中,向下滚动到 Create database (创建数据库) 部分,然后选择 Create database (创建数据库)

    3. 请参阅亚马逊 RDS 教程创建 MySQL 数据库实例,了解有关设置 RDS 数据库的最新信息。

      创建数据库时,请使用以下信息:

      • 数据库实例标识符:MyTestDatabaseInstance

      • 主用户名:adminuser

      • 主密码: 键入安全初始密码,并在确认密码请务必记住该密码。 在步骤 2 中创建密钥时,您需要使用该密码。

      注意

      数据库创建可能需要长达 20 分钟才能使数据库实例变得可用。

    4. RDS > Databases (数据库) 下的可用数据库列表中,选择您的数据库,然后选择 Modify (修改)

    5. 网络和安全性部分中,设置公开可用性

    6. Backup (备份) 部分中,将 Backup retention period (备份保留期) 设置为 0 days (0 天) 以禁用备份。

    7. 将其他设置保留为默认值。

    8. 选择 Continue (继续)

    9. 修改时间安排部分,选择。Apply immediately (立即应用)然后修改数据库实例

    10. 摘要部分显示AvailableUNERInfo,刷新页面,然后向下滚动到连接和安全性部分。

    11. 安全部分,选择。default (默认)UNERVPC 安全组。Amazon EC2 控制台将打开并显示已配置的个安全组

    12. 选择 Inbound rules (入站规则),然后选择 Edit Inbound Rules (编辑入站规则)

    13. Source type (源类型) 下,选择 Anywhere (任意位置),然后选择 Save rules (保存规则)

注意

要正确配置本教程,请至少使用这些设置。如果需要私有 VPC,则必须将 Lambda 函数配置为在该 VPC 中运行。接下来,您必 VPC 使用私有 Secrets Manager 端点或为 VPC 配置使用公共 Internet 访问权限NAT 网关。这些配置允许 Lambda 轮换函数访问公共 Secrets Manager 终端节点。

第 2 步:创建密钥

在该步骤中,您在 Secrets Manager 中创建密钥,并在密钥中填充测试详细信息,包括数据库和您的主用户的凭证。

创建密钥

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

  2. 确保您将控制台设置为与在上一步中创建 Amazon RDS MySQL 数据库相同的区域。

  3. 选择 Store a new secret (存储新密钥)

  4. Store a new secret (存储新密钥) 页面上的 Select secret type (选择密钥类型) 部分中,选择 Credentials for RDS database (RDS 数据库凭证)

  5. 对于用户名,请键入 adminuser 以匹配您以前在步骤 1.3 中提供的主用户的名称。

  6. 对于 Password (密码),请键入您在创建数据库时为 adminuser 提供的相同密码。

  7. 对于 Select the encryption key (选择加密密钥),将其设置为 DefaultEncryptionKey。如果您使用自定义主密钥 (CMK) 而不是默认 CMK,则 Amazon 会为您的帐户计费。

  8. 对于 Select which RDS database this secret will access (选择此密钥将访问的 RDS 数据库),选择您在步骤 1 中创建的 MyTestDatabaseInstance 实例。选择 Next (下一步)

  9. Secret name and description (密钥名称和描述) 部分中,为 Secret name (密钥名称) 键入 MyTestDatabaseMasterSecret。选择 Next (下一步)

  10. 配置自动轮换部分中,暂时禁用轮换。选择 Next (下一步)

  11. 检查部分中,确认您的详细信息,然后选择存储

    Secrets Manager 将返回到密钥列表,其中现在包含新密钥。

第 3 步:验证您的初始机密

在将密钥配置为自动轮换之前,应确认在密钥中包含正确的信息,并且可以连接到数据库。本教程介绍如何安装基于 GUI 的应用程序 MySQL Workbench 以测试连接。下载适合您所用操作系统的客户端。

您至少可以使用Amazon CLI或 Secrets Manager 控制台。然后,剪切用户名和密码并将其粘贴到 MySQL 数据库客户端中。

测试数据库连接

  1. 安装 MySQLWorkbench 客户端软件后,打开 MySQLWorkbench 客户端以显示 Welcome to MySQLWorkbench (欢迎使用 MySQLWorkbench) 界面。

  2. MySQL 连接中,选择+要显示的图标设置新连接

  3. 对于“Connection Name (连接名称)”,输入 MyTestDatabaseInstance

  4. 对于 Hostname (主机名),输入数据库的终端节点,例如 MyTestDatabase.hostname.region.rds.amazonaws.com

    您可以在数据库的详细信息页面上找到终端节点。在 Amazon RDS 控制台中,选择。数据库的 部分RDS > 数据库 > MyTestDatabaseInstance

  5. Port (端口) 保留为默认值 3306。

  6. Username (用户名) 字段中,键入您为数据库创建的用户名 adminuser

  7. 选择测试连接并在窗口中输入数据库密码。密码字段中返回的子位置类型。

  8. 如果配置正确,MySQLWorkbench 会显示一条成功连接消息。

  9. 选择 OK

    故障排除技巧

    如果 MySQLWorkbench 客户端无法连接到数据库,您应该检查附加到具有数据库的 VPC 的安全组。安全组中的默认规则允许所有出站流量,但这些规则阻止所有入站流量,您定义规则以显式允许的流量除外。如果在公有 Internet 上运行计算机,您的安全组必须在配置了数据库通信的 TCP 端口上允许来自 Internet 的入站流量,通常是端口 3306。如果将 MySQL 配置为使用不同的 TCP 端口,请确保更新安全规则以使其匹配。

第 4 步:为您的秘密配置旋转

在验证密钥中的初始凭证后,您可以配置并启动第一次轮换。

配置密钥轮换

  1. 在 Secrets Manager 控制台中,选择密钥MyTestDatabaseMasterSecret

  2. Secret details (密钥详细信息) 页上的 Rotation configuration (轮换配置) 部分中,选择 Edit rotation (编辑轮换)

  3. 编辑轮换配置页上,选择启用自动轮换

  4. 对于选择轮换间隔,请选择 30 天

  5. Select the secret will be used to perform the rotation (选择将用于执行轮换的密钥) 下,选择 Use this secret (使用此密钥)

  6. 选择 Save。Secrets Manager 开始为密钥配置轮换,包括创建 Lambda 轮换函数并附加允许 Secrets Manager 调用该函数的角色。

  7. 停留在包含 Rotation is being configured (正在配置轮换) 消息的浏览器页面,直到消息变为 Your secret MyTestDatabaseMasterSecret has been successfully stored and secret rotation is enabled (您的密钥 MyTestDatabaseMasterSecret 已成功存储且已启用密钥轮换)

第 5 步:验证轮换成功

在轮换了密钥之后,您可以确认密钥中的新凭证能够连接到数据库。

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

  2. 选择您的密钥 MyTestDatabaseMasterSecret

  3. 选择 Retrieve secret value (检索密钥值)

  4. 找到 password (密码) 字段。

    如果成功轮换密钥,则密码应更改为类似于下面的内容:E4%I)rj)vmpRg)U}++=}GHAnNDD1v0cJ,而不是显示原始密钥。

  5. 要访问您的数据库,请打开 MySQLWorkbench 并选择连接 MyTestDatabase

  6. 当提示输入密码时,从 Secrets Manager 中复制密码并粘贴到密码字段中返回的子位置类型。选择 OK

    您可以使用新密码成功访问数据库,并验证轮换密钥是否有效。

第 6 步:清除

重要

如果您还打算执行教程:使用主密码轮换用户密钥教程,请在完成该教程后执行这些步骤。

由于数据库和密钥可能会在您的 Amazon 账单中产生费用,在完成本教程中的实验后,您应该删除在本教程中创建的数据库实例和密钥。

删除密钥

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

  2. 在密钥列表中,选择为本教程创建的 MyTestDatabaseSecret 密钥。

  3. 选择操作,然后选择删除密钥

  4. 计划密钥删除对话框中,为输入等待期限键入 7,这是允许的最小值。

  5. 选择计划删除

    在经过恢复时段中的天数后,Secrets Manager 将永久删除密钥。

删除数据库实例

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Instances

  3. 在可用的实例列表中,选择为本教程创建的 MyTestDatabaseInstance 实例。

  4. 选择实例操作,然后选择删除

  5. Delete DB Instance (删除数据库实例) 页面上的 Options (选项) 部分中,为 Create final snapshot (创建最终快照) 选择 No (否)

  6. 选择将丢失所有数据的确认消息,然后选择删除