从AWS Secrets Manager获取用户名时,即使未进行任何更改,RDS也会触发替换操作

时间:2019-09-16 11:44:43

标签: terraform terraform-provider-aws

尝试从AWS Secret Manager的数据源获取用户名和密码时遇到问题:

username = data.external.secret_map.result["rds_user"]
password = data.external.secret_map.result["rds_pass"]

其他部分位于单独的模板中,例如:

data "aws_secretsmanager_secret_version" "rds" {
  secret_id = "SOME-SECRET-ID"
  depends_on = [aws_secretsmanager_secret_version.rds]
}
data "external" "secret_map" {
  program = ["echo", data.aws_secretsmanager_secret_version.rds.secret_string]
}

我可以确认秘密放置和检索可用于所有其他段,并且只有模块中的用户名部分触发替换,而不触发密码,但是密码也存在问题,因为即使触发密码就位更改没有变化。

这是在第一次成功申请后发生的,第二次建议更换

~ username = "root" -> (known after apply) # forces replacement

但是如果我继续错误消息说数据库已经存在,则失败

Error: Error creating DB Instance: DBInstanceAlreadyExists: DB 
Instance already exists
status code: 400, request id:

使用aws_secretsmanager_secret_version,因为aws_secretsmanager_secret不提供秘密放置,而仅提供检索。 Terraform版本0.12

回复:ydaetskcor 抱歉,我确实无法从我的代码中提供更多信息,但是您可以通过以下方式重现上述行为:

在{@ {3}}可用的rds使用示例上方添加以下代码行

locals {
  secrets = {
    rds_user    = "root"
    rds_pass    = random_password.rds_pass.result
  }
}
data "aws_secretsmanager_secret_version" "rds_read" {
  secret_id = "SOME-SECRET-ID"
  depends_on = [aws_secretsmanager_secret_version.rds_write]
}
data "external" "secret_map" {
  program = ["echo", data.aws_secretsmanager_secret_version.rds_read.secret_string]
}
resource "random_password" "rds_pass" {
  length = 64
  special = false
}
resource "aws_secretsmanager_secret_version" "rds_write" {
  secret_id = "SOME-SECRET-ID"
  secret_string = "${jsonencode(local.secrets)}"
}

并从用法示例中更改以下几行 来自:

username = "user"
password = "YourPwdShouldBeLongAndSecure!"

收件人:

username = data.external.secret_map.result["rds_user"]
password = data.external.secret_map.result["rds_pass"]

0 个答案:

没有答案