本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为亚马逊 RDS、亚马逊 Aurora、Amazon Redshift 或亚马逊 DocumentDB 机密设置自动轮换
本教程介绍如何设置通过 Lambda 函数进行旋转数据库密钥。Rotation 是定期更新密钥的过程。轮换密钥时,您会同时更新密钥和数据库中的凭证。在 Secrets Manager 中,您可以为数据库密钥设置自动轮换。
要使用控制台设置轮换,您需要先选择轮换策略。然后配置密钥以进行轮换,如果您还没有 Lambda 轮换函数,这将创建一个 Lambda 轮换函数。控制台还会为 Lambda 函数执行角色设置权限。最后一步是确保 Lambda 轮换函数可以通过网络访问 Secrets Manager 和数据库。
警告
要启用自动轮换,您必须有权为 Lambda 轮换函数创建 IAM 执行角色并向其附加权限策略。您需要拥有 iam:CreateRole
和 iam:AttachRolePolicy
两个权限。授予这些权限允许身份向自己授予任何权限。
步骤 1:选择轮换策略并(可选)创建超级用户密钥
有关 Secrets Manager 提供的策略的信息,请参阅Lambda 函数轮换策略。
如果选择 alternating users strategy(交替用户策略),您必须 创建数据库密钥 并在其中存储数据库超级用户凭证。您需要一个包含超级用户凭证的密钥,因为轮换会克隆第一个用户,而大多数用户没有该权限。请注意,Amazon RDS 代理不支持交替用户策略。
步骤 2:配置轮换并创建轮换函数
为 Amazon RDS、Amazon DocumentDB 或 Amazon Redshift 密钥启用轮换
打开 Secrets Manager 控制台:https://console.aws.amazon.com/secretsmanager/
。 -
在密钥列表页上,选择您的密钥。
-
在 Secret details (密钥详细信息) 页上的 Rotation configuration (轮换配置) 部分中,选择 Edit rotation (编辑轮换)。
-
在编辑轮换配置对话框中,执行以下操作:
-
启用 Automatic rotation(自动轮换)。
-
在 Rotation schedule(轮换计划)下,在 Schedule expression builder(计划表达式生成器)或 Schedule expression(计划表达式)中,以 UTC 时区格式输入您的计划。Secrets Manager 会将您的计划存储为
rate()
或cron()
表达式。轮换时段将自动从午夜开始,除非您指定 Start time(开始时间)。您可以每四小时轮换一次密钥。有关更多信息,请参阅 轮换时间表。 -
(可选)对于 Window duration(时段持续时间),选择您希望 Secrets Manager 在其间轮换密钥的时段长度,例如
3h
表示三个小时的时段。该时段不得延伸到下一个轮换时段。如果未指定 Window duration(时段持续时间),则对于以小时为单位的轮换计划,时段将在一小时后自动关闭。对于以天为单位的轮换计划,时段将在一天结束时自动关闭。 -
(可选)请选择 Rotate immediately when the secret is stored(在存储密钥时立即轮换),以在保存更改时轮换密钥。如果您清除该复选框,则第一次轮换将按照您设置的计划开始。
如果轮换失败,例如因为步骤 3 和 4 尚未完成,Secrets Manager 会多次重试轮换过程。
-
在 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 和安全组,有助于函数访问数据库。
-
-
对于轮换策略,选择单用户或交替用户策略。有关更多信息,请参阅 步骤 1:选择轮换策略并(可选)创建超级用户密钥。
-
选择 Save(保存)。
第 3 步:(可选)为轮换函数设置额外的权限条件
我们建议您在轮换函数的资源策略中包括上下文密钥 aws:SourceAccount
,以防止 Lambda 被用作混淆代理。对于某些 AWS 服务,为了避免混淆副手的情况, AWS 建议您同时使用aws:SourceArn
和aws:SourceAccount
全局条件键。但如果轮换函数策略中包括 aws:SourceArn
条件,则轮换函数只能用于轮换该 ARN 指定的密钥。我们建议您仅在其中包括上下文键 aws:SourceAccount
,以便对多个密钥使用轮换函数。
更新轮换函数资源策略
在 Secrets Manager 控制台中选择您的密钥,然后在详细信息页面中的 Rotation configuration(轮换配置)下,选择 Lambda 轮换函数。Lambda 控制台将打开。
按照 Using resource-based policies for Lambda(将基于资源的策略用于 Lambda)中的说明添加
aws:sourceAccount
条件。"Condition": { "StringEquals": { "AWS:SourceAccount": "
123456789012
" } },
如果密钥使用 AWS 托管式密钥
aws/secretsmanager
以外的 KMS 密钥进行加密,则 Secrets Manager 会向 Lambda 执行角色授予使用该密钥的权限。您可以使用 SecretARN 加密上下文 来限制解密函数的使用,从而确保轮换函数角色只能解密其负责轮换的密钥。
更新轮换函数执行角色
从 Lambda 轮换函数中选择配置,然后在执行角色下,选择角色名称。
按照 修改角色权限策略 中的说明添加
kms:EncryptionContext:SecretARN
条件。"Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "
SecretARN
" } },
步骤 4:为轮换函数设置网络访问
有关更多信息,请参阅 Lambda 轮换函数的网络访问权限。
后续步骤
请参阅 排除 AWS Secrets Manager 轮换故障。