

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

# 使用设置自动旋转 AWS CLI
<a name="rotate-secrets_turn-on-cli"></a>

本教程介绍如何使用[通过 Lambda 函数进行轮换](rotate-secrets_lambda.md)进行设置 AWS CLI。轮换密钥时，会同时更新密钥以及拥有密钥的数据库或服务中的凭证。

您也可以使用控制台设置轮换。有关数据库密钥的信息，请参阅 [自动轮换数据库密钥（控制台）](rotate-secrets_turn-on-for-db.md)。有关所有其他类型的密钥，请参阅 [自动轮换非数据库密钥（控制台）](rotate-secrets_turn-on-for-other.md)。

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

**Topics**
+ [数据库密钥的先决条件：选择轮换策略](#rotate-secrets_turn-on-cli_step1)
+ [步骤 1：编写轮换函数代码](#rotate-secrets_turn-on-cli_write)
+ [第 2 步：创建 Lambda 函数](#w2aac21c11c25c15)
+ [步骤 3：设置网络访问](#w2aac21c11c25c17)
+ [步骤 4：配置要轮换的密钥](#w2aac21c11c25c19)
+ [后续步骤](#w2aac21c11c25c21)

## 数据库密钥的先决条件：选择轮换策略
<a name="rotate-secrets_turn-on-cli_step1"></a>

有关 Secrets Manager 提供的策略的信息，请参阅 [Lambda 函数轮换策略](rotation-strategy.md)。

### 选项 1：单用户策略
<a name="w2aac21c11c25c11b5"></a>

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

### 选项 2：交替用户策略
<a name="w2aac21c11c25c11b7"></a>

如果选择*交替用户策略*，则必须：
+ [创建一个密钥](create_secret.md#create_secret_cli)并在其中存储数据库超级用户凭证。您需要一个包含超级用户凭证的密钥，因为交替用户轮换会克隆第一个用户，而大多数用户没有该权限。
+ 将超级用户密钥的 ARN 添加到原始密钥。有关更多信息，请参阅 [AWS Secrets Manager 密钥的 JSON 结构](reference_secret_json_structure.md)。

请注意，Amazon RDS 代理不支持交替用户策略。

## 步骤 1：编写轮换函数代码
<a name="rotate-secrets_turn-on-cli_write"></a>

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

Secrets Manager 在 [轮换函数模板](reference_available-rotation-templates.md) 中提供了 Amazon RDS、Amazon Aurora、Amazon Redshift 和 Amazon DocumentDB 数据库密钥的模板。

**编写轮换函数代码**

1. 请执行以下操作之一：
   + 查看[轮换函数模板](reference_available-rotation-templates.md)列表。如果有与您的服务和轮换策略匹配的模板，请复制代码。
   + 对于其他类型的密钥，请编写您自己的轮换函数。有关说明，请参阅[Lambda 轮换函数](rotate-secrets_lambda-functions.md)。

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

## 第 2 步：创建 Lambda 函数
<a name="w2aac21c11c25c15"></a>

在此步骤中，您将使用在步骤 1 中创建的 ZIP 文件创建 Lambda 函数。您还将设置 [Lambda 执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)，即调用函数时 Lambda 代入的角色。

**创建 Lambda 轮换函数和执行角色**

1. 为 Lambda 执行角色创建信任策略并将其另存为 JSON 文件。有关示例和更多信息，请参阅 [Lambda 轮换函数的执行角色权限 AWS Secrets Manager](rotating-secrets-required-permissions-function.md)。该策略必须：
   + 允许角色对密钥调用 Secrets Manager 操作。
   + 允许角色调用密钥所针对的服务，例如创建新密码。

1. 通过调用 [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 来创建 Lambda 执行角色并应用在上一步中创建的信任策略。

   ```
   aws iam create-role \
       --role-name {{rotation-lambda-role}} \
       --assume-role-policy-document file://{{trust-policy.json}}
   ```

1. 通过调用 [https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) 从 ZIP 文件创建 Lambda 函数。

   ```
   aws lambda create-function \
     --function-name {{my-rotation-function}} \
     --runtime python3.12 \
     --zip-file fileb://{{my-function.zip}} \
     --handler lambda_function.lambda_handler \
     --role arn:aws:iam::{{123456789012}}:role/service-role/{{rotation-lambda-role}}
   ```

1. 在 Lambda 函数上设置资源策略，以允许 Secrets Manager 通过调用 [https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) 来调用该资源策略。

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

## 步骤 3：设置网络访问
<a name="w2aac21c11c25c17"></a>

有关更多信息，请参阅 [AWS Lambda 轮换功能的网络接入](rotation-function-network-access.md)。

## 步骤 4：配置要轮换的密钥
<a name="w2aac21c11c25c19"></a>

要为密钥开启自动轮换功能，请调用 [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/rotate-secret.html)。您可以使用 `cron()` 或 `rate()` 计划表达式设置轮换计划，也可以设置轮换时段持续时间。有关更多信息，请参阅 [轮换计划](rotate-secrets_schedule.md)。

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

## 后续步骤
<a name="w2aac21c11c25c21"></a>

请参阅[排除 AWS Secrets Manager 轮换故障](troubleshoot_rotation.md)。