

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

# 設定非資料庫 AWS Secrets Manager 秘密的自動輪換
<a name="rotate-secrets_turn-on-for-other"></a>

本教學課程說明如何[由 Lambda 函式輪換](rotate-secrets_lambda.md)設定非資料庫秘密。輪換是定期更新機密的過程。當您輪換秘密時，會更新秘密以及該秘密所針對資料庫或服務中的憑證。

如需資料庫秘密，請參閱[資料庫秘密的自動輪換 (主控台)](rotate-secrets_turn-on-for-db.md)。

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

**Topics**
+ [步驟 1：建立一般輪換函數](#rotate-secrets_turn-on-for-other_create)
+ [步驟 2：撰寫輪換函數程式碼](#rotate-secrets_turn-on-for-other_write)
+ [步驟 3：設定輪換的秘密](#rotate-secrets_turn-on-for-other_configure)
+ [步驟 4：允許輪換函數存取 Secrets Manager 和您的資料庫或服務](#rotate-secrets_turn-on-for-other_perms)
+ [步驟 5：允許 Secrets Manager 叫用輪換函數](#rotate-secrets_turn-on-for-other_perms2)
+ [步驟 6：設定輪換函數的網路存取](#rotate-secrets_turn-on-for-other_network)
+ [後續步驟](#rotate-secrets_turn-on-for-other_stepnext)

## 步驟 1：建立一般輪換函數
<a name="rotate-secrets_turn-on-for-other_create"></a>

若要開始，請建立 Lambda 輪換函數。其中不會包含用來輪換秘密的程式碼，因此您將在後續步驟中寫入該程式碼。如需輪換函數如何運作的詳細資訊，請參閱 [Lambda 輪換函數](rotate-secrets_lambda-functions.md)。

在支援的區域中，您可以使用 從範本 AWS Serverless Application Repository 建立函數。如需支援的區域清單，請參閱[AWS Serverless Application Repository FAQs](https://aws.amazon.com/serverless/serverlessrepo/faqs/)。在其他區域中，您會從頭開始建立函數，並將範本程式碼複製到函數中。

**建立一般輪換函數**

1. 若要判斷您的區域是否 AWS Serverless Application Repository 支援 ，請參閱[AWS Serverless Application Repository 《 一般參考》中的端點和配額](https://docs.aws.amazon.com/general/latest/gr/serverlessrepo.html)。 *AWS *

1. 執行以下任意一項：
   + 如果您的 區域支援 AWS Serverless Application Repository ：

     1. 在 Lambda 主控台中，選擇**應用程式**，然後選擇**建立應用程式**。

     1. 在**建立應用程式**頁面上，選擇**無伺服器應用程式**索引標籤。

     1. 在**公有應用程式**下的搜尋方塊中，輸入 **SecretsManagerRotationTemplate**。

     1. 選取**顯示建立自訂 IAM 角色或資源政策的應用程式**。

     1. 選擇 **SecretsManagerRotationTemplate** 圖磚。

     1. 在**檢閱、設定和部署**頁面上，於**應用程式設定**圖磚中填入必要欄位。
        + 針對**端點**，輸入您區域的端點，包括 **https://**。如需端點清單，請參閱 [AWS Secrets Manager 端點](asm_access.md#endpoints)。
        + 若要將 Lambda 函數放入 VPC，請包含 **vpcSecurityGroupIds** 和 **vpcSubnetIds**。

     1. 選擇**部署**。
   + 如果您的區域 AWS Serverless Application Repository 不支援 ：

     1. 在 Lambda 主控台中，選擇**函數**，然後選擇**建立函數**。

     1. 在 **Create function** (建立函數) 頁面上，執行下列動作：

        1. 選擇**從頭開始撰寫**。

        1. 針對 **Function name** (函數名稱)，輸入您輪換函數的名稱。

        1. 針對**執行時期**，選擇 **Python 3.12**。

        1. 選擇**建立函數**。

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

在此步驟中，您會撰寫更新秘密的程式碼，以及秘密所要的服務或資料庫。如需輪換函數功能的相關資訊，包括撰寫自有輪換函數的秘訣，請參閱 [Lambda 輪換函數](rotate-secrets_lambda-functions.md)。您也可以使用 [輪換函數範本](reference_available-rotation-templates.md)做為參考。

## 步驟 3：設定輪換的秘密
<a name="rotate-secrets_turn-on-for-other_configure"></a>

在此步驟中，您會為秘密設定輪換排程，並將輪換函數連接至秘密。

**若要設定輪換並建立空白輪換函數**

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

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

1. 在 **Secret details (機密詳細資訊)** 頁面的 **Rotation configuration (輪換組態)** 區段中，選擇 **Edit rotation (編輯輪換)**。在 **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** (存放秘密時立即輪換) 以在儲存變更時輪換您的秘密。如果清除核取方塊，則第一次輪換將按照您設定的排程開始。

   1. 在**輪換函數**下，選擇您在步驟 1 中建立的 Lambda 函數。

   1. 選擇**儲存**。

## 步驟 4：允許輪換函數存取 Secrets Manager 和您的資料庫或服務
<a name="rotate-secrets_turn-on-for-other_perms"></a>

Lambda 輪換函數需要許可以存取 Secrets Manager 中的秘密，且需要許可以存取您的資料庫或服務。在此步驟中，您會將這些許可授予 Lambda 執行角色。如果使用 KMS 金鑰為秘密加密，而不是 AWS 受管金鑰 `aws/secretsmanager`，那麼您需要將使用該金鑰的許可授予 Lambda 執行角色。您可以透過 [SecretARN 加密內容](security-encryption.md#security-encryption-encryption-context)來限制使用解密函數，從而使輪換函數角色僅有權解密其負責輪換的秘密。如需政策範例，請參閱[輪換的許可](rotating-secrets-required-permissions-function.md)。

如需指示，請參閱《AWS Lambda 開發人員指南》中的 [Lambda 執行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。

## 步驟 5：允許 Secrets Manager 叫用輪換函數
<a name="rotate-secrets_turn-on-for-other_perms2"></a>

若要允許 Secrets Manager 根據您設定的輪換排程叫用輪換函數，您需要在 Lambda 函數的資源政策中授予`lambda:InvokeFunction`許可給 Secrets Manager 服務主體。

在輪換函數的資源政策中，我們建議您包含內容金鑰 [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`，以便可以將輪換函數用於多個秘密。

若要將資源政策連接到 Lambda 函數，請參閱[將資源型政策用於 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)。

下列政策允許 Secrets Manager 叫用 Lambda 函數。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "default",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Service": "secretsmanager.amazonaws.com"
            },
        "Action": "lambda:InvokeFunction",
        "Condition": {
            "StringEquals": {
                "AWS:SourceAccount": "{{123456789012}}"
            }
        },
        "Resource": "arn:aws:lambda:{{us-east-1}}:{{123456789012}}:function:{{function-name}}"
    }
    ]
}
```

------

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

在此步驟中，您可以允許 輪換函數同時連線到 Secrets Manager 和秘密所在的服務或資料庫。輪換函數必須能夠存取兩者，才能輪換秘密。請參閱 [AWS Lambda 輪換函數的網路存取](rotation-function-network-access.md)。

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

當您在步驟 3 中設定輪換時，您可以設定輪換秘密的排程。如果輪換在排程時失敗，Secrets Manager 會多次嘗試輪換。您也可以依照 中的指示，立即開始輪換[立即輪換秘密](rotate-secrets_now.md)。

如果輪換失敗，請參閱 [輪換疑難排解](troubleshoot_rotation.md)。