为其他数据库或服务启用密钥轮换 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

为其他数据库或服务启用密钥轮换

要为支持的 RDS 数据库以外的数据库或某种其他服务配置密钥轮换,您必须手动执行几个额外的步骤。主要是,您必须创建 Lambda 轮换函数并提供代码。

警告

配置轮换将导致在存储密钥时立即轮换一次密钥。在执行该操作之前,您必须确保更新使用密钥中存储的凭证的所有应用程序以从 AWS Secrets Manager 中检索密钥。在初始轮换后,可能无法使用旧凭证。只要旧凭证不再有效,无法更新的任何应用程序都将立即中断。

您必须已创建 Lambda 轮换函数。如果尚未创建该函数,请执行轮换其他数据库或服务的 AWS Secrets Manager 密钥中的步骤。在创建该函数并准备好与您的密钥相关联时,请返回到该过程。

先决条件:启用轮换的网络要求

要成功启用轮换,您必须成功配置网络环境。

  • Lambda 函数必须能够与您的数据库或服务通信。 如果数据库或服务在 VPC 中的 Amazon EC2 实例上运行,建议将 Lambda 函数配置为在同一 VPC 中运行。这样可在轮换函数与服务之间启用直接连接。要进行此配置,请在 Lambda 函数的详细信息页面上,向下滚动至网络部分并从下拉列表中选择 VPC,使其与运行您服务的实例的 VPC 匹配。您还必须确保附加到实例的 EC2 安全组允许实例与 Lambda 之间进行通信。

  • Lambda 函数必须能够与 Secrets Manager 服务终端节点通信。 如果 Lambda 轮换函数因未配置为在 VPC 中运行或 VPC 已连接 NAT 网关而能够访问 Internet,您可将任何可用的公共终端节点用于 Secrets Manager。或者,如果 Lambda 函数已配置为在无法访问 Internet 的 VPC 中运行,您可为该 VPC 配置私有 Secrets Manager 服务终端节点

为其他数据库或服务启用和配置密钥轮换

请按照以下选项卡之一中的步骤进行操作:

使用 AWS 管理控制台
最小权限

要在控制台中启用和配置轮换,您必须具有以下权限:

  • secretsmanager:ListSecrets – 在控制台中查看密钥列表。

  • secretsmanager:DescribeSecrets – 访问选定密钥的详细信息页面。

  • secretsmanager:RotateSecret – 配置或触发轮换。

  1. 登录 Secrets Manager 控制台 (https://console.amazonaws.cn/secretsmanager/)。

  2. 选择要启用轮换的密钥的名称。

  3. 配置自动轮换部分中,选择启用自动轮换。这会启用该部分中的其他控件。

  4. 对于选择轮换间隔,请选择其中一个预定义值 —,或者选择自定义,然后键入所需的轮换间隔天数。

    Secrets Manager 在上一次轮换完成时计划下一次轮换。Secrets Manager 通过向上次轮换的实际日期添加轮换间隔(天数)来计划日期。该服务随机选择 24 小时日期窗口中的小时。分钟也以某种方式随机选择,但会根据小时的起始进行加权并受帮助分布负载的各种因素影响。

  5. 对于选择 AWS Lambda 函数,请从下拉列表中选择您的轮换函数。如果尚未创建该函数,请执行轮换其他数据库或服务的 AWS Secrets Manager 密钥中的步骤。在创建该函数并准备好与您的密钥相关联时,请返回并执行该步骤。

Using the AWS CLI or AWS SDKs
最小权限

要使用控制台创建 Lambda 函数,您必须具有以下权限:

  • lambda:CreateFunction – 在 AWS Lambda 中创建函数。

  • lambda:InvokeFunction – 将轮换函数附加到密钥。

  • secretsmanager:DescribeSecrets – 访问密钥详细信息页面。

  • secretsmanager:RotateSecret – 将轮换函数附加到密钥或触发轮换。

您可以使用以下命令在 Secrets Manager 中启用和配置轮换:

下面是一个示例 CLI 命令,它执行的操作等同于在 使用 AWS 管理控制台 选项卡中创建基于控制台的密钥。它将轮换间隔设置为 30 天,并指定有权在数据库上更改该密钥的凭证的第二个密钥的 Amazon 资源名称 (ARN)。

$ aws secretsmanager rotate-secret --secret-id production/MyAwesomeAppSecret --automatically-rotate-after-days 30 --rotation-lambda-arn arn:aws-cn:secretsmanager:region:accountid:secret:production/MasterSecret-AbCdEf { "ARN": "arn:aws-cn:secretsmanager:region:accountid:secret:production/MyAwesomeAppSecret-AbCdEf", "Name": "production/MyAwesomeAppSecret", "VersionId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE" }

不需要使用 ClientRequestToken 参数,因为我们使用的是 AWS CLI,它会自动为我们生成并提供一个令牌。输出包含在初始轮换期间创建的新版本的密钥版本 ID。在轮换完成后,该新版本将附加 AWSCURRENT 暂存标签,以前的版本附加 AWSPREVIOUS 暂存标签。