跳至内容

如何使用 Secrets Manager 密钥为不受支持的数据库创建轮换函数?

2 分钟阅读
0

我想为 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 更改集

  1. 运行 create-cloud-formation-change-set AWS CLI 命令
  2. --stack-name 替换为 CloudFormation 堆栈的名称。
  3. --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 命令将返回 ApplicationIdChangeSetIdSemanticVersionStackId 值。

完成以下步骤:

  1. 运行 execute-change-set 命令时,将 change-set-name 替换为 ChangeSetId 值。
  2. 运行 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 中,请跳过此步骤。

针对您的用例自定义轮换函数

轮换模板可为您实现 createSecretfinishSecret 步骤。您必须修改 Lambda 函数,才能为您的用例和数据库实现 setSecrettestSecret 步骤。有关详细信息,请参阅 Four steps in a rotation function

为您的密钥启用轮换

使用 --rotation-rulesAutomaticallyAfterDays 参数指定轮换之间的天数。

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

AWS services that use AWS Secrets Manager secrets

AWS 官方已更新 10 个月前