如何使用 AWS Secrets Manager 機密為不受支援的資料庫建立輪換函數?
如何建立 AWS Lambda 函數以輪換其他資料庫或第三方服務的 AWS Secrets Manager 機密?
簡短描述
使用 Amazon Relational Database Service (Amazon RDS) 支援的資料庫和其他 AWS Support 服務建立的 Secrets Manager 機密會自動建立 Lambda 輪換。對於不受支援的 AWS 資料庫和服務,您可以手動建立 Lambda 函數。
解決方法
使用一般輪換函數範本來輪換機密。在為其他資料庫或服務的機密開啟輪換之前,您必須先建立 Lambda 輪換函數的程式碼。
重要事項:
- 在開始之前,確保已安裝並設定 AWS Command Line Interface (AWS CLI)。
- 如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版本的 AWS CLI。
根據一般輪換函數範本建立 AWS CloudFormation 變更集
針對下列值執行 AWS CLI 命令 create-cloud-formation-change-set:
**--stack-name:**您為其建立變更集的 AWS CloudFormation 堆疊的名稱。
**--parameter-override:**適用於您區域的 AWS Secrets Manager 區域端點,以及範本所建立的 Lambda 輪換函數名稱。
aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate --stack-name MyLambdaCreationStack --parameter-overrides Name=endpoint,Value=https://secretsmanager.REGION.amazonaws.com Name=functionName,Value=MySecretsManagerRotationFunction --capabilities CAPABILITY_IAM CAPABILITY_RESOURCE_POLICY
**注意:**請確保完全按照所示使用 arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate 的 Amazon Resource Name (ARN)。
系統會為範本建立 AWS CloudFormation 變更集。AWS CloudFormation 堆疊名稱以 aws-serverless-repository- 開頭,而堆疊狀態碼設定為 REVIEW_IN_PROGRESS。
使用變更集更新堆疊
create-cloud-formation-change-set 命令會傳回 ApplicationId、ChangeSetId、SemanticVersion 和 StackId。若要更新堆疊狀態,您必須將 ChangeSetId 提供給 change-set-name。change-set-name 不會產生輸出,並將堆疊狀態碼變更為 CREATE_COMPLETE。AWS CloudFormation 堆疊會建立 Lambda 函數和 IAM 角色,該函數連接至具有所需許可的 Lambda 函數。
執行類似下列內容的下列 AWS CLI 命令 execute-change-set:
aws cloudformation execute-change-set --change-set-name arn:aws:cloudformation:region:123456789012:changeSet/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE
確認已建立 Lambda 函數
執行下列 AWS CLI 命令:
aws lambda list-functions Output { ... "FunctionName": "MySecretsManagerRotationFunction", ... "FunctionArn": "arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction", ... }
**注意:**Lambda 函數的名稱是在 --parameter-overrides 中指定的函數名稱的值。
為 Amazon Virtual Private Cloud (Amazon VPC) 存取設定 Lambda 函數
如果您的資料庫或服務位於 Amazon VPC 中,請執行類似下列內容的 update-function-configuration 命令。update-function-configuration 命令可設定 Lambda 輪換函數,以在 VPC 中執行。請務必提供 VPC 子網路 ID 和安全群組 ID。如需詳細資訊,請參閱設定 Lambda 函數以存取 Amazon VPC 中的資源。
**注意:**如果您的資料庫或服務不在 Amazon VPC 中,請略過此步驟。
$ aws lambda update-function-configuration --function-name your-lambda-function \ --vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037
為 Secrets Manager 服務建立 VPC 端點
如果具有資料庫或服務和 Lambda 輪換函數的 VPC 無法存取網際網路,請建立 VPC 端點。使用私有服務端點設定 VPC 以存取 Secret Manager,並在 VPC 內的端點開啟輪換函數。執行類似下列內容的 create-vpc-endpoint 命令:
**注意:**如果您的資料庫或服務不在 Amazon VPC 中,請略過此步驟。
$ aws ec2 create-vpc-endpoint --vpc-id vpc-0abb11f5a28a8abe7 --vpc-endpoint-type Interface \ --service-name com.amazonaws.your-region.secretsmanager --subnet-ids subnet-076c28105d486f3bd subnet-0af00c796ccdc725f \ --security-group-ids sg-0bacf4bbed67e4df5
設定 Lambda 函數與資料庫或服務之間的網路連線
請確保 Lambda 函數可以透過所需的網路連接埠路由至您的資料庫或服務。這取決於資料庫或服務及其關聯的 VPC 組態。
**注意:**如果您的資料庫或服務不在 Amazon VPC 中,請略過此步驟。
為您的使用案例自訂輪換函數
輪換範本會為您實作 createSecret 和 finishSecret 步驟。setSecret 和 testSecret 步驟需要針對您的使用案例和資料庫進行手動實作。如需詳細資訊,請參閱輪換的運作方式。
為您的機密開啟輪換
使用參數 --rotation-rules 和 AutomaticallyAfterDays 指定輪換之間的天數:
aws secretsmanager rotate-secret --secret-id production/MyAwesomeAppSecret --rotation-lambda-arn arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction --rotation-rules AutomaticallyAfterDays=7
如需詳細資訊,請參閱輪換 AWS Secrets Manager 機密。
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 2 個月前lg...
- 已提問 2 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前