

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 設定自動輪換 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，如果您要輪換資料庫秘密，您必須先選擇輪換策略。如果您選擇交替使用者策略，必須儲存具有資料庫超級使用者憑證的另外秘密。接下來，您會撰寫輪換函數程式碼。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 Proxy 不支援交替使用者策略。

## 步驟 1：撰寫輪換函數程式碼
<a name="rotate-secrets_turn-on-cli_write"></a>

若要輪換秘密，您需要輪換函數。輪換函數是 Lambda 函數，Secrets Manager 會呼叫以輪換秘密。如需詳細資訊，請參閱[由 Lambda 函式輪換](rotate-secrets_lambda.md)。在此步驟中，您會撰寫更新秘密的程式碼，以及秘密所要的服務或資料庫。

Secrets Manager 為 中的 Amazon RDS、Amazon Aurora、Amazon Redshift 和 Amazon DocumentDB 資料庫秘密提供範本[輪換函數範本](reference_available-rotation-templates.md)。

**撰寫輪換函數程式碼**

1. 執行以下任意一項：
   + 檢查[輪換函數範本](reference_available-rotation-templates.md)的清單。如果有符合您的服務和輪換策略，請複製程式碼。
   + 對於其他類型的秘密，您可以撰寫自己的輪換函數。如需說明，請參閱[Lambda 輪換函數](rotate-secrets_lambda-functions.md)。

1. 將檔案與所有必要的相依性一起儲存在 ZIP 檔案 {{my-function.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. 建立 Lambda 執行角色，並透過呼叫 來套用您在上一個步驟中建立的信任政策[https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html)。

   ```
   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)。