如何使用 AWS Secrets Manager 機密為不受支援的資料庫建立輪換函數?

2 分的閱讀內容
0

如何建立 AWS Lambda 函數以輪換其他資料庫或第三方服務的 AWS Secrets Manager 機密?

簡短描述

使用 Amazon Relational Database Service (Amazon RDS) 支援的資料庫和其他 AWS Support 服務建立的 Secrets Manager 機密會自動建立 Lambda 輪換。對於不受支援的 AWS 資料庫和服務,您可以手動建立 Lambda 函數。

解決方法

使用一般輪換函數範本來輪換機密。在為其他資料庫或服務的機密開啟輪換之前,您必須先建立 Lambda 輪換函數的程式碼。

重要事項:

根據一般輪換函數範本建立 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 命令會傳回 ApplicationIdChangeSetIdSemanticVersionStackId。若要更新堆疊狀態,您必須將 ChangeSetId 提供給 change-set-namechange-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-rulesAutomaticallyAfterDays 指定輪換之間的天數:

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 機密


相關資訊

AWS Secrets Manager 輪換函數範本

如何在虛擬私有雲端中連接至 AWS Secrets Manager 服務

AWS 官方
AWS 官方已更新 1 年前