【问题标题】:Question about creating credential rotation Lambda function for Aurora MySQL RDS database关于为 Aurora MySQL RDS 数据库创建凭证轮换 Lambda 函数的问题
【发布时间】:2020-05-15 03:58:56
【问题描述】:

我找到了这个rotation function template,我将修改这个模板来创建我自己的轮换函数并告诉 Secrets Manager 使用它来执行轮换。

我的问题是我应该更改模板中的哪个部分,模板中不是很清楚,例如第 47-49 行,我应该将SecretId替换为我的 Secret ARN 吗?

arn = event['SecretId']
token = event['ClientRequestToken']
step = event['Step']

另一个例子:第 57 行

endpoint_url=os.environ['SECRETS_MANAGER_ENDPOINT']

我应该为'SECRETS_MANAGER_ENDPOINT' 使用什么值,也许是'https://secretsmanager.region.amazonaws.com'??

另外,205-206行

This is where the lambda will validate the user's permissions. 
Uncomment/modify the below lines to
# tailor these validations to your needs

我需要在这部分添加什么来授予 Secrets Manager 调用此函数的权限?

有点困惑,我几乎一整天都在搞乱整个凭证轮换,任何建议都将不胜感激。

【问题讨论】:

    标签: amazon-web-services aws-lambda rotation credentials aws-secrets-manager


    【解决方案1】:

    您不需要对加载事件的逻辑或环境变量进行任何更改。

    这样想。发生轮换时,秘密管理器将调用您的 lambda。该调用有一个与之关联的事件,其中包含轮换步骤、要轮换的密钥的 SecretId、ClientRequestToken 等

    你不需要修改那个逻辑。

    关于 lambda,您需要为 secrets manager 端点设置一个环境变量 - https://docs.aws.amazon.com/lambda/latest/dg//go-programming-model-env-variables.html

    【讨论】:

    • 您好,谢谢您的回答,您提到的“环境变量”,我可以在 Secret Manager 控制台的哪个位置进行设置?我找不到它...
    • 哦,我刚刚意识到,你的意思是在第 52 行,将其更改为 endpoint_url=os.environ['https://secretsmanager.us-east-1.amazonaws.com'] 吗? (我在 ARN 的一部分中找到了该区域)
    • @Cecilia 将其设置为用于 lambda 的环境变量
    • @Cecilia 在 lambda 控制台中设置环境变量 - docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
    • 谢谢,我已经对 env 变量进行了排序,现在它给了我关于我的 Lambda 执行角色的新错误,但是这个问题已经完成,谢谢。
    【解决方案2】:

    正如@committedandroider 所说,您不需要修改 47-49,因为它由 Secrets Manager 轮换引擎传递给 Lambda 调用,并且在您创建函数时第 57 行被设置为 Lambda 函数的环境变量(是的,您应该将其设置为 https://secretsmanager.REGION.amazonaws.com)。

    Secrets Manager 轮换引擎每次都会使用不同的步长值(createSecret、setSecret、testSecret 和 finishSecret)调用 lambda 四次。第 205-206 行是 testSecret 步骤的一部分,旨在通过建立与数据库的连接(使用新凭据)并运行简单查询来测试新的数据库凭据。该评论告诉您,如果您愿意,您可以在其中添加更多检查(例如,从您真正关心的表中进行选择)。

    要授予 Secrets Manager permissions to run the Lambda,您必须向 Lambda 函数添​​加权限,以授予服务主体 secretsmanager.amazonaws.com lambda:InvokeFunction 权限。例如:

    aws --region REGION lambda add-permission --function-name LAMBDANAME --statement-id "Rotation" --action "lambda:InvokeFunction" --principal secretsmanager.amazonaws.com
    

    其中 REGION 是您使用的 AWS 区域,LAMBDANAME 是您为 lambda 指定的名称。

    【讨论】:

    • 谢谢你的回答,你之前提到的命令是授予权限,但是你没有提到如何使用它,我对AWS很新,我应该在模板中添加它还是别的什么?
    • 对不起多个 cmets,我在 AWS 文档中注意到,对于不受支持的数据库,我们使用此命令添加权限(参考:docs.aws.amazon.com/secretsmanager/latest/userguide/…)我只是想知道我是否还需要将其用于mySQL 数据库,因为我使用 MySQL 的模板而不是不受支持的数据库的通用模板。
    • 我已经创建了函数并执行了命令,现在一切都很好,只是想知道是否有办法测试它?我尝试使用 Secrets Manager 中的现有功能启用轮换,但我找不到此功能,我是否遗漏了什么?
    • 如果您是 AWS 新手,我建议您通过 Secrets Manager 控制台设置轮换。这将创建 lambda、env 变量、策略,并设置您需要的所有权限。您唯一需要注意的是确保您的 lambda 可以连接到您的数据库。如果您有问题,可以转到 Lambda 控制台,单击轮换函数,然后查看 lambda 的日志。他们应该告诉你什么是失败的。
    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2020-05-14
    • 2020-05-17
    • 2020-01-23
    • 2020-09-24
    • 2020-06-16
    相关资源
    最近更新 更多