使用设置自动旋转 Amazon CLI - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用设置自动旋转 Amazon CLI

本教程介绍如何使用通过 Lambda 函数进行轮换进行设置 Amazon CLI。轮换密钥时,会同时更新密钥以及拥有密钥的数据库或服务中的凭证。

您也可以使用控制台设置轮换。有关数据库密钥的信息,请参阅 自动轮换数据库密钥(控制台)。有关所有其他类型的密钥,请参阅 自动轮换非数据库密钥(控制台)

要使用设置轮换 Amazon CLI,如果您要轮换数据库密钥,则首先需要选择轮换策略。如果选择 alternating users strategy(交替用户策略),您必须存储一个单独密钥,其中包含数据库超级用户凭证。接下来,编写轮换函数代码。Secrets Manager 会提供模板,您可以基于该模板创建函数。然后,使用代码创建 Lambda 函数,并为 Lambda 函数和 Lambda 执行角色设置权限。下一步是确保 Lambda 函数可以通过网络访问 Secrets Manager 和数据库或服务。最后,配置密钥以进行轮换。

数据库密钥的先决条件:选择轮换策略

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

选项 1:单用户策略

如果选择单用户策略,则可以继续执行步骤 1。

选项 2:交替用户策略

如果选择交替用户策略,则必须:

  • 创建一个密钥并在其中存储数据库超级用户凭证。您需要一个包含超级用户凭证的密钥,因为交替用户轮换会克隆第一个用户,而大多数用户没有该权限。

  • 将ARN超级用户密钥添加到原始密钥中。有关更多信息,请参阅 Amazon Secrets Manager 密钥的 JSON 结构

请注意,Amazon RDS Proxy 不支持交替用户策略。

步骤 1:编写轮换函数代码

要轮换密钥,您需要轮换函数。轮换函数是 Secrets Manager 为轮换密钥而调用的 Lambda 函数。有关更多信息,请参阅 通过 Lambda 函数进行轮换。在此步骤中,您将编写用于更新密钥以及该密钥所针对的服务或数据库的代码。

Secrets Manager 为亚马逊RDS、亚马逊 Aurora、亚马逊 Redshift 和亚马逊 DocumentDB 数据库密钥提供了模板。轮换函数模板

编写轮换函数代码
  1. 请执行以下操作之一:

    • 查看轮换函数模板列表。如果有与您的服务和轮换策略匹配的模板,请复制代码。

    • 对于其他类型的密钥,请编写您自己的轮换函数。有关说明,请参阅 Lambda 轮换函数

  2. 将ZIP文件my-function.zip连同所有必需的依赖项一起保存在文件中。

第 2 步:创建 Lambda 函数

在此步骤中,您将使用在步骤 1 中创建ZIP的文件创建 Lambda 函数。您还将设置 Lambda 执行角色,即调用函数时 Lambda 代入的角色。

创建 Lambda 轮换函数和执行角色
  1. 为 Lambda 执行角色创建信任策略并将其另存为文件。JSON有关示例和更多信息,请参阅 适用于 Amazon Secrets Manager 的 Lambda 轮换函数执行角色权限。该策略必须:

    • 允许角色对密钥调用 Secrets Manager 操作。

    • 允许角色调用密钥所针对的服务,例如创建新密码。

  2. 通过调用 iam create-role 来创建 Lambda 执行角色并应用在上一步中创建的信任策略。

    aws iam create-role \ --role-name rotation-lambda-role \ --assume-role-policy-document file://trust-policy.json
  3. 通过调用从ZIP文件创建 Lambda 函数。lambda create-function

    aws lambda create-function \ --function-name my-rotation-function \ --runtime python3.7 \ --zip-file fileb://my-function.zip \ --handler .handler \ --role arn:aws:iam::123456789012:role/service-role/rotation-lambda-role
  4. 在 Lambda 函数上设置资源策略,以允许 Secrets Manager 通过调用 lambda add-permission 来调用该资源策略。

    aws lambda add-permission \ --function-name my-rotation-function \ --action lambda:InvokeFunction \ --statement-id SecretsManager \ --principal secretsmanager.amazonaws.com \ --source-account 123456789012

步骤 3:设置网络访问

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

步骤 4:配置要轮换的密钥

要为密钥开启自动轮换功能,请调用 rotate-secret。您可以使用 cron()rate() 计划表达式设置轮换计划,也可以设置轮换时段持续时间。有关更多信息,请参阅 轮换计划

aws secretsmanager rotate-secret \ --secret-id MySecret \ --rotation-lambda-arn arn:aws:lambda:Region:123456789012:function:my-rotation-function \ --rotation-rules "{\"ScheduleExpression\": \"cron(0 16 1,15 * ? *)\", \"Duration\": \"2h\"}"

后续步骤

请参阅 排除 Amazon Secrets Manager 轮换故障