因此,我使用 CloudFormation 生成 RDS 数据库实例和 AWS Secrets Manager Secret,并将它们绑定在一起,如下面的 CloudFormation 配置所示:
"MyDBInstance": {
"Type": "AWS::RDS::DBInstance",
"Properties": {
"AllocatedStorage": 20,
"DBInstanceClass": "db.t2.micro",
"Engine": "mysql",
"DBSubnetGroupName": {
"Ref": "MyDBSubnetGroup"
},
"MasterUsername": rdsadmin,
"MasterUserPassword": {
"Fn::Sub": "{{resolve:secretsmanager:${MYRDSPASSWORD}:SecretString}}"
}
}
}
我希望能够手动在一个位置(最好是 AWS Secrets Manager)设置新密码,然后将其自动同步到另一个位置(最好使用新密码修改 RDS 实例)。如果您想设置轮换计划,下面的文档非常有用,但这不是我们想要实现的目标。如果这不能“同步”,那么也许我可以编写一个 CLI 调用脚本来模仿该行为?
https://docs.aws.amazon.com/secretsmanager/latest/userguide/cfn-example_RDSsecret.html
您将设置 AWS EventBridge 规则来捕获 SecretsManager 秘密更改事件。然后,您可以配置 EventBridge 以在发生这种情况时调用 AWS Lambda 函数。您可以将代码放入读取事件的 Lambda 函数中,从 SecretsManager 中提取密码值,最后使用新密码和/或您想要更新的任何其他服务更新 RDS 服务器。
请注意,这与此处记录的相同流程非常相似,不同之处在于该流程按计划自动运行,而不是响应手动更改秘密值。
AWS CloudFormation 并非旨在执行此操作,所以不能。
如果您正在寻找旨在管理基础设施的 AWS 服务,请查看 AWS Systems Manager。
话虽这么说。在我多年来的旅行中,尽管在 AWS 的任何地方,我都没有看到任何专门执行此操作的东西。但我也从未寻找过这个具体要求。
IMO,听起来您正在尝试寻找技术解决方案来解决根本上的流程挑战。也许实施过于复杂。如果您确实想为此考虑某种自动化,您可能可以使用 Lambda 和 AWS SDK 拼凑出一些复杂的设置,但这不是我的处理方式。大锤可以敲碎坚果等等。