

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

# 設定 Amazon RDS、Amazon Aurora、Amazon Redshift 或 Amazon DocumentDB 秘密的自動輪換
<a name="rotate-secrets_turn-on-for-db"></a>

本教學課程說明如何設定[由 Lambda 函式輪換](rotate-secrets_lambda.md)資料庫秘密。輪換是定期更新機密的過程。當您輪換機密時，會更新機密和資料庫中的憑證。在 Secrets Manager 中，您可以為資料庫秘密設定自動輪換。

若要使用主控台設定輪換，您必須先選擇輪換策略。接著設定秘密進行輪換，如果您還沒有 Lambda 輪換函數，這會建立一個。主控台也會為 Lambda 函數執行角色設定許可。最後一步是確保 Lambda 輪換函數可以透過網路，存取 Secrets Manager 和您的資料庫。

**警告**  
若要開啟自動輪換，您必須擁有為 Lambda 輪換函數建立 IAM 執行角色並將其連接許可政策的許可。您同時需要 `iam:CreateRole` 和 `iam:AttachRolePolicy` 許可。授予這些許可可讓身分授予自己任何許可。

**Topics**
+ [步驟 1：選擇輪換策略並 (選擇性) 建立超級使用者秘密](#rotate-secrets_turn-on-for-db_step1)
+ [步驟 2：設定輪換並建立輪換函數](#rotate-secrets_turn-on-for-db_step2)
+ [步驟 3：(選用) 對輪換函數設定其他許可條件](#rotate-secrets_turn-on-for-db_step3)
+ [步驟 4：為輪換函數設定網路存取](#rotate-secrets_turn-on-for-db_step4)
+ [後續步驟](#rotate-secrets_turn-on-for-db_stepnext)

## 步驟 1：選擇輪換策略並 (選擇性) 建立超級使用者秘密
<a name="rotate-secrets_turn-on-for-db_step1"></a>

如需 Secrets Manager 所提供策略的相關資訊，請參閱 [Lambda 函數輪換策略](rotation-strategy.md)。

如果您選擇*交替使用者策略*，必須[建立秘密](create_secret.md)，並在其中儲存資料庫超級使用者憑證。您需要具有超級使用者憑證的秘密，因為輪換會複製第一個使用者，而大多數使用者沒有該許可。請注意，Amazon RDS Proxy 不支援交替使用者策略。

## 步驟 2：設定輪換並建立輪換函數
<a name="rotate-secrets_turn-on-for-db_step2"></a>

**若要為 Amazon RDS、Amazon DocumentDB 或 Amazon Redshift 秘密開啟輪換**

1. 前往以下位置開啟機密管理員控制台：[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 在 **Secrets** (機密) 頁面中，選擇機密。

1. 在 **Secret details (機密詳細資訊)** 頁面的 **Rotation configuration (輪換組態)** 區段中，選擇 **Edit rotation (編輯輪換)**。

1. 在 **Edit rotation configuration** (編輯輪換組態) 對話方塊中，執行以下動作：

   1. 開啟 **Automatic rotation** (自動輪換)。

   1. 在 **Rotation schedule** (輪換排程) 中，在 **Schedule expression builder** (排程表達式建置器)，或以 **Schedule expression** (排程表達式) 形式，輸入 UTC 時區的排程。Secrets Manager 會將您的排程儲存為 `rate()` 或 `cron()` 表達式。輪換時段會自動在午夜時開始，除非您指定 **Start time** (開始時間)。您可以每四小時輪換一次秘密。如需詳細資訊，請參閱[輪換排程](rotate-secrets_schedule.md)。

   1. (選用) 對於 **Window duration** (時段持續時間)，選擇您想要 Secrets Manager 輪換秘密的時段長度，例如，三個小時時段 **3h**。時段不得延伸到下一個輪換時段。如果您未指定 **Window duration** (時段持續時間)，則對於以小時為單位的輪換排程，時段會在一小時後自動關閉。對於以天為單位的輪換排程，時段會在一天結束時自動關閉。

   1. (選用) 選擇 **Rotate immediately when the secret is stored** (存放秘密時立即輪換) 以在儲存變更時輪換您的秘密。如果清除核取方塊，則第一次輪換將按照您設定的排程開始。

      如果輪換失敗，例如因為步驟 3 和 4 尚未完成，Secrets Manager 會多次重試輪換流程。

   1. 在 **Rotation function** (輪換函數) 下，請執行下列其中一項：
      + 選擇 **Create a new Lambda function** (新建 Lambda 函數)，然後輸入新函數的名稱。Secrets Manager 會將 `SecretsManager` 新增到函數名稱的開頭。Secrets Manager 會根據適當的[範本](reference_available-rotation-templates.md)建立函數，並為 Lambda 執行角色設定必要的[許可](rotating-secrets-required-permissions-function.md)。
      + 選擇 **Use an existing Lambda function** (使用現有的 Lambda 函數)，重複使用您用於其他秘密的輪換函數。**Recommended VPC configurations** (建議的 VPC 組態) 下列出的輪換函數，與資料庫具有相同的 VPC 和安全群組，有助於函數存取資料庫。

   1. 對於**輪換策略**，選擇**單一使用者**或**交替使用者**策略。如需詳細資訊，請參閱[步驟 1：選擇輪換策略並 (選擇性) 建立超級使用者秘密](#rotate-secrets_turn-on-for-db_step1)。

1. 選擇 **Save** (儲存)。

## 步驟 3：(選用) 對輪換函數設定其他許可條件
<a name="rotate-secrets_turn-on-for-db_step3"></a>

在輪換函數的資源政策中，我們建議您包含內容金鑰 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)，協助防止 Lambda 被當作[混淆代理人](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。對於某些 AWS 服務，為避免混淆代理人案例， AWS 建議您同時使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件金鑰。但是，如果在您的輪換函數政策中包含 `aws:SourceArn` 條件，則輪換函數只能用於輪換該 ARN 指定的秘密。建議您僅包含內容金鑰 `aws:SourceAccount`，以便可以將輪換函數用於多個秘密。

**若要更新輪換函數資源政策**

1. 在 Secrets Manager 主控台中，選擇您的秘密，然後在詳細資訊頁面的 **Rotation configuration** (輪換組態) 之下，選擇 Lambda 輪換函數。Lambda 主控台開啟。

1. 遵循[將資源型政策用於 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) 中的指示，新增 `aws:sourceAccount` 條件。

   ```
   "Condition": {
       "StringEquals": {
           "AWS:SourceAccount": "123456789012"
       }
   },
   ```

如果使用 KMS 金鑰而不是 AWS 受管金鑰 `aws/secretsmanager` 為秘密加密，Secrets Manager 便會授予 Lambda 執行角色使用該金鑰的許可。您可以透過 [SecretARN 加密內容](security-encryption.md#security-encryption-encryption-context)來限制使用解密函數，從而使輪換函數角色僅有權解密其負責輪換的秘密。

**更新輪換函數執行角色**

1. 在 Lambda 輪換函數中選擇**組態**，然後在**執行角色**下選擇**角色名稱**。

1. 按照[修改角色許可政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)中的指示新增 `kms:EncryptionContext:SecretARN` 條件。

   ```
   "Condition": {
       "StringEquals": {
           "kms:EncryptionContext:SecretARN": "SecretARN"
       }
   },
   ```

## 步驟 4：為輪換函數設定網路存取
<a name="rotate-secrets_turn-on-for-db_step4"></a>

如需詳細資訊，請參閱[AWS Lambda 輪換函數的網路存取](rotation-function-network-access.md)。

## 後續步驟
<a name="rotate-secrets_turn-on-for-db_stepnext"></a>

請參閱[對 AWS Secrets Manager 輪換進行故障診斷](troubleshoot_rotation.md)。