Lambda 轮换函数概述 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Lambda 轮换函数概述

AWS Secrets Manager 使用 AWS Lambda 函数来执行密钥的实际轮换。如果将密钥用于支持的 Amazon RDS 数据库之一,则 Secrets Manager 为您提供 Lambda 函数。Secrets Manager 自动自定义该函数,以满足指定数据库的要求。如果将密钥用于其他服务,您必须为 Lambda 函数提供代码。

在配置的轮换计划或手动过程触发轮换时,Secrets Manager 调用几次 Lambda 函数,每次使用不同的参数。在轮换密钥的整个过程中,Lambda 函数执行几个任务。请求中的 Step 参数指定为每个请求执行的任务。

Secrets Manager 调用具有以下 JSON 请求参数结构的 Lambda 函数:

{ "Step" : "request.type", "SecretId" : "string", "ClientRequestToken" : "string" }

下面介绍了请求的参数:

  • Step – 指定要调用的轮换函数行为部分。每个不同的值标识轮换过程的一个步骤。下一节 Lambda 轮换函数的步骤将详细介绍每个步骤。通过拆分为单独调用的步骤,AWS Secrets Manager 团队可以添加在步骤之间执行的额外功能。

  • secretId – 要轮换的密钥的 ID 或 Amazon 资源名称 (ARN)。在您最初创建密钥时,Secrets Manager 为每个密钥分配一个 ARN。轮换的版本自动成为标记为 AWSCURRENT默认版本。

  • clientRequestToken – Secrets Manager 向 Lambda 函数提供的字符串。您必须将字符串传递给从 Lambda 函数中调用的任何 Secrets Manager API。Secrets Manager 使用该令牌以确保在任何所需的重试(由各个调用失败引起)期间的请求幂等性。此值是 UUID 类型的值以确保在指定密钥中的唯一性。此值将成为密钥的新版本的 SecretVersionId

相同的 secretIdclientTokenRequest 调用每个步骤。在每个调用中只有 Step 参数会发生更改。这可防止您在步骤之间存储任何状态。这些参数提供所需的所有信息,或者作为通过 AWSPENDINGAWSCURRENT 标签访问的版本中的信息的一部分。

有关在每个步骤中为不同的轮换策略执行的特定任务的说明,请参阅以下主题:

Lambda 轮换函数的步骤

Lambda 轮换函数中内置的功能拆分为不同的步骤。Step 参数使用参数值之一调用函数以调用每个步骤。

在该版本的 Secrets Manager 中,Secrets Manager 自动依次调用 步骤。在一个步骤结束后,Secrets Manager 会立即调用 Lambda 函数以调用下一步骤。

指定支持的一个密码时 Amazon RDS 数据库, Secrets Manager 使用标准 Lambda 旋转秘密的功能。 Secrets Manager 提供 Lambda 功能,但您可以修改LambDA功能,以满足组织特定的旋转要求。

createSecret 步骤

在此步骤中,Lambda 函数生成新版本的密钥。根据您的方案,此步骤可能非常简单,只需生成一个新密码。或者,您可以为一组全新凭证生成值,包括适合受保护资源的用户名和密码。Secrets Manager 将这些值存储为密钥的新版本。Secrets Manager 从密钥的现有版本中克隆密钥中不需要更改的其他值,例如连接详细信息。然后,Secrets Manager 使用 AWSPENDING 暂存标签标记密钥的新版本,以将其标记为正在处理的密钥版本。

setSecret 步骤

在该步骤中,轮换函数从 Secrets Manager 中检索标记为 AWSPENDING 的密钥版本,即,在上一步中刚创建的版本。然后,轮换函数调用数据库或服务身份服务以更改现有的密码,或者创建新凭证以与密钥中的新凭证匹配。如果创建新用户,该函数必须从以前的用户中克隆权限。然后,新用户可以根据需要继续在自定义应用程序中执行操作。

要在数据库或服务身份验证系统中更改密码或创建新的凭证,您必须允许 Lambda 函数执行这些任务。这些任务被视为管理任务,它们需要使用您通常没有为用户授予的权限。我们建议您使用第二 组凭证,这些凭证有权为主密钥更改密码或创建新用户,如轮换策略所指定的一样。我们将这些凭证称为控制密钥,Secrets Manager 将它们作为与主密钥不同的密钥进行存储。轮换函数将此控制密钥的 ARN 存储在主密钥中,仅供轮换函数使用。主密钥绝对不应由最终用户自定义应用程序访问。仅 Lambda 轮换函数可以在进行轮换时访问主要密钥,以便在数据库中更新或创建新凭证。

testSecret 步骤

Lambda 函数的该步骤使用密钥访问受保护资源以验证密钥的 AWSPENDING 版本,所使用的方式与自定义应用程序访问受保护资源的方式相同。如果应用程序需要数据库的只读访问权限,该函数应验证测试读取是否成功。如果应用程序必须写入到数据库,该函数应执行一些测试写入以验证该访问级别。

finishSecret 步骤

此步骤对此密钥版本执行任何特定于资源的最终确定。在完成时,最后一步要求 Lambda 函数将 AWSCURRENT 标签从当前版本移到密钥的该新版本,以便客户端开始使用它。您也可以删除 AWSPENDING 标签,但在技术上不是必需的。此时,基本轮换完成。所有客户端将使用密钥的新版本。旧版本收到 AWSPREVIOUS 暂存标签,可以将其作为密钥的“上次已知良好的”版本进行恢复(如果需要)。具有 AWSPREVIOUS 暂存标签的旧版本不再附加任何暂存标签,因此,Secrets Manager 将旧版本视为已弃用,并且可能会将其删除。