关于为 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
- ''https://secretsmanager.region.amazonaws.com' but insert the region you're work with - https://secretsmanager.us-west-2.amazonaws.com 例如
正如@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 指定的名称。
我找到了这个 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
- ''https://secretsmanager.region.amazonaws.com' but insert the region you're work with - https://secretsmanager.us-west-2.amazonaws.com 例如
正如@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 指定的名称。