Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何使用 Secrets Manager 密钥为不受支持的数据库创建轮换函数?
我想为 AWS Secrets Manager 密钥创建一个 AWS Lambda 函数。我的数据库或服务不支持自动轮换函数。
解决方案
先决条件:安装并配置 AWS 命令行界面 (AWS CLI)。
**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
为 Lambda 轮换函数创建代码
有关说明,请参阅 Set up automatic rotation for non-database AWS Secrets Manager secrets。
根据通用轮换函数模板创建 AWS CloudFormation 更改集
- 运行 create-cloud-formation-change-set AWS CLI 命令
- 将 --stack-name 替换为 CloudFormation 堆栈的名称。
- 将 --parameter-overrides 替换为您的 AWS 区域的 Secrets Manager 区域端点以及模板创建的 Lambda 轮换函数的名称。
create-cloud-formation-change-set AWS CLI 命令示例:
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 的 ARN。
使用 CloudFormation 更改集更新堆栈
create-cloud-formation-change-set 命令将返回 ApplicationId、ChangeSetId、SemanticVersion 和 StackId 值。
完成以下步骤:
- 运行 execute-change-set 命令时,将 change-set-name 替换为 ChangeSetId 值。
- 运行 execute-change-set AWS CLI 命令:
aws cloudformation execute-change-set --change-set-name arn:aws:cloudformation:region:123456789012:changeSet/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE
CloudFormation 堆栈将创建 Lambda 函数和 AWS Identity and Access Management (IAM) 角色。IAM 角色具有 Lambda 函数所需的权限。
验证 Lambda 函数的创建
运行 list-functions AWS CLI 命令:
aws lambda list-functions Output { ... "FunctionName": "MySecretsManagerRotationFunction", ... "FunctionArn": "arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction", ... }
**注意:**FunctionName 值与您在 --parameter-overrides 选项中指定的函数名称相匹配。
配置 Lambda 函数对 Amazon Virtual Private Cloud 的访问权限
如果您的数据库或服务位于 Amazon Virtual Private Cloud (Amazon VPC) 中,请运行 update-function-configuration 命令,将 Lambda 轮换函数配置为在 Amazon VPC 中运行。请务必提供 VPC 子网 ID 和安全组 ID。有关详细信息,请参阅 Giving Lambda functions access to resources in an Amazon VPC。
**注意:**如果您的数据库或服务不在 Amazon VPC 中,请跳过此步骤。
update-function-configuration AWS CLI 命令示例:
$ aws lambda update-function-configuration --function-name your-lambda-function \ --vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037
为 Secrets Manager 创建 Amazon VPC 端点
如果包含您的数据库或服务以及 Lambda 轮换函数的 Amazon VPC 无法访问互联网,请创建 Amazon VPC 端点。在您的 Amazon VPC 中配置私有服务端点以访问 Secrets Manager,并在 VPC 内的端点上启用轮换功能。运行 create-vpc-endpoint AWS CLI 命令。
**注意:**如果您的数据库或服务不在 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 步骤。您必须修改 Lambda 函数,才能为您的用例和数据库实现 setSecret 和 testSecret 步骤。有关详细信息,请参阅 Four steps in a rotation function。
为您的密钥启用轮换
使用 --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
有关详细信息,请参阅 Rotate AWS Secrets Manager secrets。
相关信息
AWS Secrets Manager rotation function templates
How to connect to AWS Secrets Manager service within a Virtual Private Cloud
- 语言
- 中文 (简体)
