

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

# 通过 Lambda 函数进行轮换
<a name="rotate-secrets_lambda"></a>

对于许多类型的密钥，Secrets Manager 使用 Amazon Lambda 函数来更新密钥以及数据库或服务。有关使用 Lambda 函数的成本的信息，请参阅 [定价](intro.md#asm_pricing)。

对于某些 [由其他服务管理的密钥](service-linked-secrets.md)，可使用*托管轮换*。要使用 [托管轮换](rotate-secrets_managed.md)，请首先通过管理服务来创建密钥。

在轮换期间，Secrets Manager 会录入指示轮换状态的事件。有关更多信息，请参阅 [使用记录 Amazon Secrets Manager 事件 Amazon CloudTrail](monitoring-cloudtrail.md)。

为了轮换密钥，Secrets Manager 会根据您设置的轮换计划调用 [Lambda 函数](rotate-secrets_lambda-functions.md)。如果在设置自动轮换时也手动更新密钥值，则 Secrets Manager 在计算下一次轮换日期时会认为这是有效的轮换。

在轮换过程中，Secrets Manager 调用几次同一函数，每次使用不同的参数。Secrets Manager 调用具有以下 JSON 请求参数结构的函数：

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

**参数：**
+ **步骤** – 轮换步骤：`create_secret`、`set_secret`、`test_secret` 或 `finish_secret`。有关更多信息，请参阅 [轮换函数的四个步骤](rotate-secrets_lambda-functions.md#rotate-secrets_lambda-functions-code)。
+ **SecretId**— 轮换秘密的 ARN。
+ **ClientRequestToken**— 新版本密钥的唯一标识符。此值有助于确保幂等性。有关更多信息，请参阅 *Amazon Secrets Manager API 参考 ClientRequestToken*中的 [PutSecretValue：](https://docs.amazonaws.cn/secretsmanager/latest/apireference/API_PutSecretValue.html#SecretsManager-PutSecretValue-request-ClientRequestToken)。
+ **RotationToken**— 表示请求来源的唯一标识符。使用代入角色轮换密钥或跨账户轮换所必需的条件，即您使用另一个账户中的 Lambda 轮换函数来轮换一个账户中的密钥。在这两种情况下，轮换函数都担任 IAM 角色来调用 Secrets Manager，然后 Secrets Manager 使用轮换令牌来验证 IAM 角色身份。

如果任何轮换步骤失败，Secrets Manager 会多次重试整个轮换过程。

**Topics**
+ [自动轮换数据库密钥（控制台）](rotate-secrets_turn-on-for-db.md)
+ [自动轮换非数据库密钥（控制台）](rotate-secrets_turn-on-for-other.md)
+ [自动轮换（Amazon CLI）](rotate-secrets_turn-on-cli.md)
+ [Lambda 函数轮换策略](rotation-strategy.md)
+ [Lambda 轮换函数](rotate-secrets_lambda-functions.md)
+ [轮换函数模板](reference_available-rotation-templates.md)
+ [轮换权限](rotating-secrets-required-permissions-function.md)
+ [Amazon Lambda 轮换功能的网络接入](rotation-function-network-access.md)
+ [轮换问题排查](troubleshoot_rotation.md)