为 Amazon Secrets Manager 设置单用户轮换 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Amazon Secrets Manager 设置单用户轮换

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

本教程的大部分内容是介绍如何建立真实环境。为了向您展示轮换的工作原理,本教程使用了一个示例 Amazon RDS MySQL 数据库。为了安全起见,数据库位于不允许互联网访问的 VPC 中。要通过互联网从本地电脑连接到数据库,请使用堡垒主机,它是 VPC 中可以连接到数据库的服务器,但也允许从互联网进行 SSH 连接。本教程中的堡垒主机是 Amazon EC2 实例,该实例的安全组会阻止其他类型的连接。

作为本教程先决条件的组成部分,您还可以创建一个包含数据库管理员凭证的秘密。该秘密最初没有开启轮换。在本教程中,您将学习如何启用自动轮换。

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

权限

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

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

先决条件

先决条件 A:Amazon RDS 数据库、Amazon VPC 和 Secrets Manager 秘密

对于本教程,您将配合使用 Amazon CloudFormation 与提供的模板创建 CloudFormation 堆栈,而不是通过控制台创建这些资源。有关 CloudFormation 和模板的更多信息,请参阅 Amazon CloudFormation 概念

获取 CloudFormation 模板
通过模板创建堆栈
  1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. Stacks(堆栈)下,选择 Create stack(创建堆栈),然后选择 With new resources(使用新资源)。

  3. Create stack(创建堆栈)页面上,对于 Prepare template(准备模板),选择Template is ready(模板已就绪)。

  4. 对于 Template source(模板来源),选择 Upload a template file(上载模板文件)。

  5. 选择 Choose file(选择文件),然后选择您保存的文件。

  6. 选择 Next(下一步)。

  7. Specify stack details(指定堆栈详细信息)页面上,为堆栈 SecretsManagerRotationTutorial 命名,然后选择 Next(下一步)。

  8. Configure stack options(配置堆栈选项) 页面上,请选择 Next(下一步)。

  9. 在 Review(查看)页面上,选择 Create stack(创建堆栈)。

CloudFormation 将在控制台中打开新堆栈,然后开始在模板中创建资源。这一过程耗时最多 30 分钟。您可以在Events(事件)下查看该操作在流程中的进度。选择刷新按钮可以更新事件。

在堆栈完成后,您可以在 Logical ID(逻辑 ID)下通过 Status CREATE_COMPLETE(状态 CREATE_COMPLETE)查看 SecretsManagerRotationTutorial

先决条件 B:互联网网关

对于本教程,您需要创建互联网网关,并将其附加到 VPC,以允许流量传出 VPC。您可以在路由表中创建路由,以将发往 VPC 外部的流量发送到互联网网关。有关更多信息,请参阅使用互联网网关将子网连接到互联网

创建互联网网关
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 选择 Internet Gateways(互联网网关),然后选择 Create internet gateway(创建互联网网关)。

  3. Create internet gateway(创建互联网网关)页面上,对于 Name tag(名称标签),输入 SecretsManagerTutorialGateway,然后选择Create internet gateway(创建互联网网关)。

  4. igw-**** / SecretsManagerTutorialGateway 页面上的绿色横幅中,选择 Attach to a VPC(附加到 VPC)。

  5. Attach to VPC(附加到 VPC)页面上,对于 Available VPCs(可用 VPC),选择 vpc-**** - SecretsManagerTutorial,然后选择 Attach internet gateway(连接互联网网关)。

为互联网网关添加路由
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 选择 Route tables(路由表),然后选择与 VPC vpc-**** | SecretsManagerTutorial 相关联到的 Route table ID(路由表 ID)。您可能需要滚动才能看到该表中的 VPC 列。

  3. 选择 Actions(操作),然后选择 Edit routes(编辑路由)。

  4. Edit routes(编辑路由)页面上,选择 Add Route(添加路由),然后执行以下操作:

    1. Destination(目标位置)字段,输入 0.0.0.0/0

    2. 对于 Target(目标),选择 Internet Gateway(互联网网关),然后选择 igw-**** (SecretsManagerTutorialGateway)

    3. 选择 Save changes(保存更改)。

先决条件 C:安全组

创建安全组,以允许入站 SSH 流量访问您将在后面步骤中创建的 Amazon EC2 堡垒主机。

允许 SSH 访问堡垒主机
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 选择 Security Groups(安全组),然后选择 Create Security Group(创建安全组)。

  3. 对于安全组名称,输入 SecretsManagerTutorialAccess

  4. 对于描述,输入 Allows SSH access to bastion host

  5. 对于 VPC,选择 vpc-**** (SecretsManagerTutorial)。您可能需要删除预填充文本,以查看其他选择。

  6. Inbound Rules(入站规则)下,选择 Add Rule(添加规则)。

  7. 对于入站规则 1,执行以下操作:

    1. 对于类型,选择 SSH

    2. 对于 Source(源),选择 My IP

  8. 选择Create security group(创建安全组)。

先决条件 D:Amazon EC2 实例

要访问 VPC 中的数据库,您可以使用堡垒主机。堡垒主机也在 VPC 中,但它允许您的本地电脑使用 SSH 与它连接。您可以通过堡垒主机访问数据库。

为堡垒主机创建 EC2 实例
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 选择 Instances(实例),然后选择 Launch Instances(启动实例)。

  3. Step 1(步骤 1)页面上,选择原定设置的 Amazon Linux 2 AMI (HMV) Kernel 5.10,然后选择 Select(选择)。

  4. Step 2(步骤 2)页面上,选择原定设置的 t2.micro,然后选择 Next: Configure Instance Details(下一步:配置实例详细信息)。

  5. 在 Step 3 页面中,执行以下操作:

    1. 对于 Network(网络),选择 vpc-**** SecretsManagerTutorial

    2. 对于 Auto-assign Public IP(自动分配公有 IP),选择 Enable

    3. 选择下一步:添加存储

  6. Step 4(步骤 4)页面上,选择 Next: Add Tags(下一步:添加标签)。

  7. Step 5(步骤 5)页面上,选择“Add Tag”(添加标签)。

    对于“Key”(键),输入 Name,对于 Value(值),输入 SecretsManagerTutorialInstance,然后选择 Next: Configure Security Group(下一步:配置安全组)。

  8. Step 6(步骤 6)页面上,对于 Assign a security group(分配安全组),选择 Select an existing security group(选择现有安全组)。

  9. 对于“Security group ID”(安全组 ID),选择名称为 defaultSecretsManagerTutorialAccess 的安全组,然后选择 Review and Launch(审核并启动)。

  10. Step 7(步骤 7)页面上,选择 Launch(启动)。

  11. Select an existing key pair(选择现有密钥对)对话框中,执行以下操作:

    1. 选择 Create a new key pair(创建新密钥对)。

    2. 对于 Key pair name(密钥对名称),输入 SecretsManagerTutorialKeyPair

    3. 选择 Download Key Pair(下载密钥对)。在后面的步骤中,您将使用此私有密钥文件连接到实例。

    4. 选择 Launch Instances

先决条件 E:MySQL Workbench

要连接到数据库,请使用 MySQL 客户端工具。在本教程中,您将使用基于 GUI 的应用程序 MySQL Workbench。

要安装 MySQL Workbench,请参阅下载 MySQL Workbench

要连接到数据库,首先在 MySQL Workbench 中创建连接配置。对于配置,您需要获得来自 Amazon EC2 和 Amazon RDS 的一些信息。

在 MySQL Workbench 中创建数据库连接
  1. 在 MySQL Workbench 中,选择 MySQL Connections(MySQL 连接)旁边的 (+) 按钮。

  2. Setup New Connection(设置新连接)对话框中,执行以下操作:

    1. 对于 Connection Name(连接名称),输入 SecretsManagerTutorial

    2. 对于 Connection Method(连接方法),选择 Standard TCP/IP over SSH

    3. Parameters(参数)选项卡上,执行以下操作:

      1. 对于 SSH Hostname(SSH 主机名),输入 Amazon EC2 实例的公有 IP 地址。

        您可以通过选择实例 SecretsManagerTutorialInstance,在 Amazon EC2 控制台上查找该 IP 地址。复制 Public IPv4 DNS(公有 IPv4 DNS)下的 IP 地址。

      2. 对于 SSH Username(SSH 用户名),输入 ec2-user

      3. 对于 SSH Keyfile(SSH 密钥文件),选择您在之前的先决条件中下载的密钥对文件 SecretsManagerTutorialKeyPair.pem

      4. 对于 MySQL Hostname(MySQL 主机名),输入 Amazon RDS 端点地址。

        您可以在 Amazon RDS 控制台上通过选择数据库实例 secretsmanagertutorialdb 查找端点地址。复制 Endpoint(端点)下的地址。

      5. 对于 Username(用户名),输入 admin

    4. 选择 OK(确定)。

步骤 1:使用原始密码连接

第一步是检查秘密中的信息是否包含数据库的有效凭证。

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

  2. 选择 Secrets(秘密),然后选择秘密 SecretsManagerTutorialAdmin-****

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

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

测试凭证
  1. 在 MySQL Workbench 中,选择连接 SecretsManagerTutorial

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

    第一次连接时,您可能会看到一个关于服务器指纹的警告对话框。选择 OK(确定)以继续。

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

步骤 2:创建 Secrets Manager 端点

下一步是在 VPC 中创建 Secrets Manager 端点。在设置自动轮换时,Secrets Manager 会在 VPC 内创建 Lambda 轮换函数,以便它可以访问数据库。Lambda 轮换函数还会调用 Secrets Manager。通过在 VPC 内创建 Secrets Manager 端点,您可以确保从 Lambda 到 Secrets Manager 的调用不会离开 Amazon 基础设施。相反,这些调用将被路由到 VPC 内的 Secrets Manager 端点。

在 VPC 内创建 Secrets Manager 端点
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. Endpoints(端点)下,选择 Create Endpoint(创建端点)。

  3. 向下滚动到 Services(服务),输入 secretsmanager 以筛选列表,然后在您的 Amazon Web Services 区域 中选择 Secrets Manager 端点。例如,在美国东部(弗吉尼亚北部),选择 com.amazonaws.us-east-1.secretsmanager

  4. 对于 VPC,选择 vpc**** (SecretsManagerTutorial)

  5. 对于 Subnets(子网),选择所有 Availability Zones(可用性区域),然后对于每个区域,选择要包含的 Subnet ID(子网 ID)。

  6. 对于 Security groups(安全组),选择默认安全组。

  7. 对于 Policy(策略),选择 Full access

  8. 选择 Create endpoint(创建端点)。

步骤 3:轮换秘密

现在,您已准备好启用轮换。您可以开始立即轮换,这样在您保存秘密时,Secrets Manager 将立即轮换秘密。您还可以启用自动轮换,这样将在协调世界时午夜至凌晨 2:00 之间每 10 天轮换一次秘密。

启用自动轮换
  1. https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台

  2. 打开秘密 SecretsManagerTutorialAdmin-a1b2c3d4e5f6,向下滚动到 Rotation configuration(轮换配置),然后选择 Edit rotation(编辑轮换)。

  3. Edit rotation configuration(编辑轮换配置)对话框中,启用 Automatic rotation(自动轮换)。

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

  5. Rotation function(轮换函数),执行以下操作:

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

    2. Secrets Manager 将创建名为 SecretsManagertutorial-single-user-rotation 的 Lambda 轮换函数。

    3. 对于 Use separate credentials(使用单独的凭证),选择 No

  6. 选择 Save(保存)。

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

步骤 4:测试轮换的密码

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

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

  2. 选择 Secrets(秘密),然后选择秘密 SecretsManagerTutorialAdmin-****

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

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

测试凭证
  1. 在 MySQL Workbench 中,选择连接 SecretsManagerTutorial

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

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

这表明秘密轮换是成功的。秘密中已更新的密码是用于连接到数据库的有效密码。您已经完成了自动轮换的设置,下一次轮换将在 10 天后发生。

步骤 5:清理资源

如果您想尝试另一种轮换策略,交替用户轮换,则请跳过清理资源,然后转到 为 Amazon Secrets Manager 设置交替用户轮换

否则,为了避免潜在的费用,并删除有权访问互联网的 EC2 实例,请删除您在本教程中创建的以下资源:

后续步骤