如何使用Terraform将AWS Secrets Manager凭证关联到现有RDS数据库
解决方法
你当前的代码只创建了通用类型的Secret,要实现AWS识别的「RDS数据库凭证」类型并和现有RDS关联,需要补充Secret的标准结构、关联标签,可选配置自动轮转规则,完整配置如下:
# 先引用你现有RDS实例的信息,替换为你自己的RDS实例名 data "aws_db_instance" "existing_rds" { db_instance_identifier = "你的现有RDS实例标识符" } resource "aws_secretsmanager_secret" "my_secret" { name = "mydbsecret" # 关联RDS的核心标签,AWS通过这个标签识别绑定的RDS实例 tags = { "aws:rds:primary-db-instance-arn" = data.aws_db_instance.existing_rds.arn } } locals { # 必须符合AWS RDS凭证的标准JSON结构,控制台才能识别为RDS凭证类型 my_data = { username = "username" password = "userpassword" engine = data.aws_db_instance.existing_rds.engine host = data.aws_db_instance.existing_rds.address port = data.aws_db_instance.existing_rds.port dbname = data.aws_db_instance.existing_rds.db_name dbInstanceIdentifier = data.aws_db_instance.existing_rds.db_instance_identifier } } resource "aws_secretsmanager_secret_version" "my_secret_version" { # 修正你原代码的参数错误,原代码引用了不存在的demo_secret资源 secret_id = aws_secretsmanager_secret.my_secret.id secret_string = jsonencode(local.my_data) } # 可选配置:开启RDS凭证自动轮转,会自动同步修改RDS密码和Secret内容 resource "aws_secretsmanager_secret_rotation" "my_secret_rotation" { secret_id = aws_secretsmanager_secret.my_secret.id rotation_lambda_arn = "arn:aws:lambda:${data.aws_db_instance.existing_rds.region}:${data.aws_db_instance.existing_rds.owner_account_id}:function:aws-secrets-manager-rotation-lambdas/SecretsManagerRDSMySQLRotationSingleUser" rotation_rules { automatically_after_days = 30 } }
核心配置说明
- Secret的JSON内容必须包含
dbInstanceIdentifier、engine、host、port等RDS专属字段,这是AWS控制台将Secret归类为「RDS数据库凭证」的必要条件 - 给Secret添加
aws:rds:primary-db-instance-arn标签绑定RDS实例ARN后,RDS控制台的托管凭证列表也会自动展示该Secret - 若不需要自动轮转可以删除
aws_secretsmanager_secret_rotation资源段,不影响Secret和RDS的关联关系
部署完成后可直接在AWS控制台验证类型和关联关系是否符合预期。
内容的提问来源于stack exchange,提问作者Cloud Delhi
相关产品推荐
相关产品推荐

