关于为 Aurora MySQL RDS 数据库创建凭证轮换 Lambda 函数的问题

Question about creating credential rotation Lambda function for Aurora MySQL RDS database

我找到了这个 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 调用此函数的权限?

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

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

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

您不需要修改该逻辑。

关于 lambda,您需要为机密管理器端点设置环境变量 - https://docs.aws.amazon.com/lambda/latest/dg//go-programming-model-env-variables.html

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

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

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

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

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