本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為非資料庫 AWS Secrets Manager 密碼設定自動輪換
本教學課程說明如何設定非依 Lambda 函數輪換資料庫密碼。輪換是定期更新機密的過程。當您輪換秘密時,會更新秘密以及該秘密所針對資料庫或服務中的憑證。
如需資料庫秘密,請參閱資料庫秘密的自動輪換 (主控台)。
警告
若要開啟自動輪換,您必須擁有建立 Lambda 輪換函數IAM執行角色的權限,並將權限原則附加至該函數。您同時需要 iam:CreateRole
和 iam:AttachRolePolicy
許可。授與這些權限可讓身分授與自己任何權限。
步驟:
第 1 步:創建一個通用的旋轉函數
首先,請創建一個 Lambda 旋轉函數。它不會有代碼來旋轉您的秘密,因此您將在稍後的步驟中編寫。如需旋轉函數如何運作的資訊,請參閱Lambda 輪換函數。
在支援的區域中,您可 AWS Serverless Application Repository 以使用從範本建立函數。如需支援的區域清單,請參閱AWS Serverless Application Repository FAQs
建立一般旋轉函數
-
若要判斷您的地區 AWS Serverless Application Repository 是否受支援,請參閱AWS 一般參考中的AWS Serverless Application Repository 端點和配額。
-
執行以下任意一項:
如果 AWS Serverless Application Repository 您所在地區支援:
在 Lambda 主控台中,選擇應用程式,然後選擇建立應用程式。
在建立應用程式頁面上,選擇無伺服器應用程式索引標籤。
在 [公用應用程式] 下的搜尋方塊中,輸入
SecretsManagerRotationTemplate
。選取 [顯示建立自訂IAM角色或資源原則的應用程式]。
選擇SecretsManagerRotationTemplate瓷磚。
-
在 [檢閱、設定和部署] 頁面的 [應用程式設定] 動態磚中,填寫必要欄位。
對於端點,請輸入您區域的端點,包括
https://
。如需端點清單,請參閱 AWS Secrets Manager 端點。若要將 Lambda 函數放入中VPC,請包含vpcSecurityGroup識別碼和 vpcSubnetIds.
選擇部署。
如 AWS Serverless Application Repository 果您所在地區不支援:
在 Lambda 主控台中,選擇「函數」,然後選擇「建立函數」。
在 Create function (建立函數) 頁面上,執行下列動作:
選擇從頭開始撰寫。
針對 Function name (函數名稱),輸入您輪換函數的名稱。
針對 Runtime (執行階段),選擇 Python 3.9。
選擇建立函數。
步驟 2:撰寫輪換函數程式碼
在此步驟中,您會撰寫更新密碼的程式碼,以及密碼所用的服務或資料庫。如需有關旋轉函數功能的資訊,包括撰寫自己旋轉函數的秘訣,請參閱Lambda 輪換函數。您也可以使用作輪換函數範本為參考。
步驟 3:設定輪換的密碼
在此步驟中,您可以為密碼設定輪換排程,並將旋轉功能連接至密碼。
若要設定輪換並建立空白輪換函數
開啟 Secrets Manager 主控台,位於https://console.aws.amazon.com/secretsmanager/
。 -
在 Secrets (機密) 頁面中,選擇機密。
-
在 Secret details (機密詳細資訊) 頁面的 Rotation configuration (輪換組態) 區段中,選擇 Edit rotation (編輯輪換)。在 Edit rotation configuration (編輯輪換組態) 對話方塊中,執行以下動作:
開啟 Automatic rotation (自動輪換)。
-
在「輪換排程」下,在「排程運算式建立器」中以UTC時區輸入您的排程,或作為「排程」運算式。Secrets Manager 會將您的排程儲存為
rate()
或cron()
表達式。輪換時段會自動在午夜時開始,除非您指定 Start time (開始時間)。您可以每四小時輪換一次秘密。如需詳細資訊,請參閱 旋轉明細表。 -
(選用) 對於 Window duration (時段持續時間),選擇您想要 Secrets Manager 輪換秘密的時段長度,例如,三個小時時段
3h
。時段不得延伸到下一個輪換時段。如果您未指定 Window duration (時段持續時間),則對於以小時為單位的輪換排程,時段會在一小時後自動關閉。對於以天為單位的輪換排程,時段會在一天結束時自動關閉。 (選用) 選擇 Rotate immediately when the secret is stored (存放秘密時立即輪換) 以在儲存變更時輪換您的秘密。如果清除核取方塊,則第一次輪換將按照您設定的排程開始。
在旋轉函數下,選擇您在步驟 1 中建立的 Lambda 函數。
選擇儲存。
步驟 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:SourceArn
和aws: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 將嘗試輪換多次。您也可以按照中的說明立即開始旋轉立即輪換秘密。
如果旋轉失敗,請參閱輪換疑難排解。