为 Amazon RDS、Amazon Aurora、Amazon Redshift 或 Amazon DocumentDB 密钥设置自动轮换 - AWS Secrets Manager

为 Amazon RDS、Amazon Aurora、Amazon Redshift 或 Amazon DocumentDB 密钥设置自动轮换

本教程介绍了如何为数据库密钥设置 通过 Lambda 函数进行轮换。Rotation 是定期更新密钥的过程。轮换密钥时,您会同时更新密钥和数据库中的凭证。在 Secrets Manager 中,您可以为数据库密钥设置自动轮换。

要使用控制台设置轮换,您需要先选择轮换策略。然后配置密钥以进行轮换,如果您还没有 Lambda 轮换函数,这将创建一个 Lambda 轮换函数。控制台还会为 Lambda 函数执行角色设置权限。最后一步是确保 Lambda 轮换函数可以通过网络访问 Secrets Manager 和数据库。

警告

要启用自动轮换,您必须有权为 Lambda 轮换函数创建 IAM 执行角色并向其附加权限策略。您需要拥有 iam:CreateRoleiam:AttachRolePolicy 两个权限。授予这些权限允许身份授予自己任何权限。

步骤 1:选择轮换策略并(可选)创建超级用户密钥

有关 Secrets Manager 提供的策略的信息,请参阅 Lambda 函数轮换策略

如果选择 alternating users strategy(交替用户策略),您必须 创建密钥 并在其中存储数据库超级用户凭证。您需要一个包含超级用户凭证的密钥,因为轮换会克隆第一个用户,而大多数用户没有该权限。请注意,Amazon RDS 代理不支持交替用户策略。

步骤 2:配置轮换并创建轮换函数

为 Amazon RDS、Amazon DocumentDB 或 Amazon Redshift 密钥启用轮换
  1. 打开 Secrets Manager 控制台:https://console.aws.amazon.com/secretsmanager/

  2. 密钥列表页上,选择您的密钥。

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

  4. 编辑轮换配置对话框中,执行以下操作:

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

    2. Rotation schedule(轮换计划)下,在 Schedule expression builder(计划表达式生成器)或 Schedule expression(计划表达式)中,以 UTC 时区格式输入您的计划。Secrets Manager 会将您的计划存储为 rate()cron() 表达式。轮换时段将自动从午夜开始,除非您指定 Start time(开始时间)。您可以每四小时轮换一次密钥。有关更多信息,请参阅 轮换计划

    3. (可选)对于 Window duration(时段持续时间),选择您希望 Secrets Manager 在其间轮换密钥的时段长度,例如 3h 表示三个小时的时段。该时段不得延伸到下一个轮换时段。如果未指定 Window duration(时段持续时间),则对于以小时为单位的轮换计划,时段将在一小时后自动关闭。对于以天为单位的轮换计划,时段将在一天结束时自动关闭。

    4. (可选)请选择 Rotate immediately when the secret is stored(在存储密钥时立即轮换),以在保存更改时轮换密钥。如果您清除该复选框,则第一次轮换将按照您设置的计划开始。

      如果轮换失败,例如因为步骤 3 和 4 尚未完成,Secrets Manager 会多次重试轮换过程。

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

      • 选择 Create a new Lambda function(创建新的 Lambda 函数),然后输入新函数的名称。Secrets Manager 会将 SecretsManager 添加到函数名称的开头。Secrets Manager 会基于相应的模板创建函数并为 Lambda 执行角色设置必要的权限

      • 选择 Use an existing Lambda function(使用现有 Lambda 函数),以重复使用用于另一个密钥的轮换函数。在 Recommended VPC configurations(建议的 VPC 配置)下列出的轮换函数,与数据库具有相同的 VPC 和安全组,有助于函数访问数据库。

    6. 对于轮换策略,选择单用户交替用户策略。有关更多信息,请参阅 步骤 1:选择轮换策略并(可选)创建超级用户密钥

  5. 选择保存

第 3 步:(可选)为轮换函数设置额外的权限条件

我们建议您在轮换函数的资源策略中包括上下文密钥 aws:SourceAccount,以防止 Lambda 被用作混淆代理。对于某些 AWS 服务,为了避免混淆代理情况,AWS 建议您同时使用 aws:SourceArnaws:SourceAccount 全局条件密钥。但如果轮换函数策略中包括 aws:SourceArn 条件,则轮换函数只能用于轮换该 ARN 指定的密钥。我们建议您仅在其中包括上下文键 aws:SourceAccount,以便对多个密钥使用轮换函数。

更新轮换函数资源策略
  1. 在 Secrets Manager 控制台中选择您的密钥,然后在详细信息页面中的 Rotation configuration(轮换配置)下,选择 Lambda 轮换函数。Lambda 控制台将打开。

  2. 按照 Using resource-based policies for Lambda(将基于资源的策略用于 Lambda)中的说明添加 aws:sourceAccount 条件。

    "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" } },

如果密钥使用 AWS 托管式密钥 aws/secretsmanager 以外的 KMS 密钥进行加密,则 Secrets Manager 会向 Lambda 执行角色授予使用该密钥的权限。您可以使用 SecretARN 加密上下文 来限制解密函数的使用,从而确保轮换函数角色只能解密其负责轮换的密钥。

更新轮换函数执行角色
  1. 从 Lambda 轮换函数中选择配置,然后在执行角色下,选择角色名称

  2. 按照 修改角色权限策略 中的说明添加 kms:EncryptionContext:SecretARN 条件。

    "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "SecretARN" } },

步骤 4:为轮换函数设置网络访问

有关更多信息,请参阅 Lambda 轮换函数的网络访问

后续步骤

请参阅 AWS Secrets Manager 轮换问题排查