為非資料庫 AWS Secrets Manager 密碼設定自動輪換 - AWS Secrets Manager

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

為非資料庫 AWS Secrets Manager 密碼設定自動輪換

本教學課程說明如何設定非由 Lambda 函數旋轉資料庫密碼。輪換是定期更新機密的過程。當您輪換秘密時,會更新秘密以及該秘密所針對資料庫或服務中的憑證。

如需資料庫秘密,請參閱資料庫秘密的自動輪換 (主控台)

警告

若要開啟自動輪換,您必須擁有建立 Lambda 輪換函數IAM執行角色的權限,並將權限原則附加至該函數。您同時需要 iam:CreateRoleiam:AttachRolePolicy 許可。授與這些權限可讓身分授與自己任何權限。

第 1 步:創建一個通用的旋轉函數

首先,請創建一個 Lambda 旋轉函數。它不會有代碼來旋轉您的秘密,因此您將在稍後的步驟中編寫。如需旋轉函數如何運作的資訊,請參閱Lambda 旋轉函數

在支援的區域中,您可 AWS Serverless Application Repository 以使用從範本建立函數。如需支援的區域清單,請參閱AWS Serverless Application Repository FAQs。在其他區域中,您可以從頭開始建立函數,並將範本程式碼複製到函數中。

建立一般旋轉函數
  1. 若要判斷您的地區 AWS Serverless Application Repository 是否受支援,請參閱AWS 一般參考中的AWS Serverless Application Repository 端點和配額

  2. 執行以下任意一項:

    • 如果 AWS Serverless Application Repository 您所在地區支援:

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

      2. 建立應用程式頁面上,選擇無伺服器應用程式索引標籤。

      3. 在 [公用應用程式] 下的搜尋方塊中,輸入SecretsManagerRotationTemplate

      4. 選取 [顯示建立自訂IAM角色或資源原則的應用程式]。

      5. 選擇SecretsManagerRotationTemplate瓷磚。

      6. 在 [檢閱、設定和部署] 頁面的 [應用程式設定] 動態磚中,填寫必要欄位。

        • 對於端點,請輸入您區域的端點,包括https://。如需端點清單,請參閱 AWS Secrets Manager 端點

        • 若要將 Lambda 函數放入中VPC,請包含vpcSecurityGroup識別碼vpcSubnetIds.

      7. 選擇部署

    • 如 AWS Serverless Application Repository 果您所在地區不支援:

      1. 在 Lambda 主控台中,選擇「數」,然後選擇「建立函數」。

      2. Create function (建立函數) 頁面上,執行下列動作:

        1. 選擇從頭開始撰寫

        2. 針對 Function name (函數名稱),輸入您輪換函數的名稱。

        3. 針對 Runtime (執行階段),選擇 Python 3.9

        4. 選擇建立函數

步驟 2:撰寫輪換函數程式碼

在此步驟中,您會撰寫更新密碼的程式碼,以及密碼所用的服務或資料庫。如需有關旋轉函數功能的資訊,包括撰寫自己旋轉函數的秘訣,請參閱Lambda 旋轉函數。您也可以使用作輪換函數範本為參考。

步驟 3:設定輪換的密碼

在此步驟中,您可以為密碼設定輪換排程,並將旋轉功能連接至密碼。

若要設定輪換並建立空白輪換函數
  1. 開啟 Secrets Manager 主控台,位於https://console.aws.amazon.com/secretsmanager/

  2. Secrets (機密) 頁面中,選擇機密。

  3. Secret details (機密詳細資訊) 頁面的 Rotation configuration (輪換組態) 區段中,選擇 Edit rotation (編輯輪換)。在 Edit rotation configuration (編輯輪換組態) 對話方塊中,執行以下動作:

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

    2. 在「輪換排程」下,在「排程運算式建立器」中以UTC時區輸入您的排程,或作為「排程」運算式。Secrets Manager 會將您的排程儲存為 rate()cron() 表達式。輪換時段會自動在午夜時開始,除非您指定 Start time (開始時間)。您可以每四小時輪換一次秘密。如需詳細資訊,請參閱 旋轉明細表

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

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

    5. 旋轉函數下,選擇您在步驟 1 中建立的 Lambda 函數。

    6. 選擇儲存

步驟 4:允許輪換功能訪問 Secrets Manager 和您的數據庫或服務

Lambda 輪換函數需要許可以存取 Secrets Manager 中的秘密,且需要許可以存取您的資料庫或服務。在此步驟中,您會將這些許可授予 Lambda 執行角色。如果使用非KMS金鑰加密密碼 AWS 受管金鑰 aws/secretsmanager,則您需要授與 Lambda 執行角色權限才能使用金鑰。您可以使用 Secret ARN 加密內容來限制解密函數的使用,因此循環函數角色只能存取解密它負責旋轉的密碼。如需政策範例,請參閱輪換的許可

如需指示,請參閱《AWS Lambda 開發人員指南》中的 Lambda 執行角色

步驟 5:允許 Secrets Manager 叫用輪換功能

若要允許 Secrets Manager 在您設定的輪替排程上叫用循環函數,您需要在 Lambda 函數的資源原則中授與 Secrets Manager 服務主體的lambda:InvokeFunction權限。

在輪換函數的資源政策中,我們建議您包含內容金鑰 aws:SourceAccount,協助防止 Lambda 被當作混淆代理人。對於某些 AWS 服務,若要避免混淆的副案例, AWS 建議您同時使用aws:SourceArnaws:SourceAccount全域條件金鑰。但是,如果您在循環函數策略中包含aws:SourceArn條件,則循環函數只能用於旋轉該函數指定的密碼ARN。建議您僅包含內容金鑰 aws:SourceAccount,以便可以將輪換函數用於多個秘密。

若要將資源政策連接到 Lambda 函數,請參閱將資源型政策用於 Lambda

下列原則允許 Secrets Manager 叫用 Lambda 函數。

{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" } }, "Resource": "LambdaRotationFunctionARN" } ] }

步驟 6:設定旋轉功能的網路存取

在此步驟中,您可以允許輪換功能連接到 Secrets Manager 和密碼所在的服務或資料庫。旋轉功能必須具有兩者的訪問權限才能旋轉密碼。請參閱Lambda 旋轉函數的網路存取

後續步驟

在步驟 3 中設定輪換時,您可以設定旋轉密碼的排程。如果循環在排程時失敗,Secrets Manager 將嘗試輪換多次。您也可以按照中的說明立即開始旋轉立即輪換秘密

如果旋轉失敗,請參閱 輪換疑難排解