【问题标题】:terraform jsoncode secret managerterraform jsoncode 秘密管理器
【发布时间】:2021-10-07 15:12:23
【问题描述】:

我在AWS secret manager 上有secrets,我必须在terraform 上检索这些secrets
我正在使用data 来检索secrets,我收到JSON 以及在AWS secret manager 上配置的所有secrets

data "aws_secretsmanager_secret_version" "secrets_manager_rds" {
  secret_id = "rds-sm"
}

为了解析这个JSON,我在locals上使用jsondecode

locals {
rds = jsondecode(data.aws_secretsmanager_secret_version.secrets_manager_rds.secret_string)
}

现在我可以通过在rds-sm 秘密中指定secret key (password_rds) 来获取秘密:

local.rds.password_rds

我希望能够在不指定特定secret key 的情况下循环遍历JSON,例如,将for_eachjsoncode 输出一起使用。

我需要循环使用for_each 的资源。例如:

resource "postgresql_role" "test" {
  for_each = [for k in local.rds : k]
  name     = each.key
  password = each.value
  login    = true
  skip_reassign_owned = true
  roles = ["readonlyrole"]
}

我收到:

local.users_creds has a sensitive value 
Sensitive values, or values derived from sensitive values, cannot be used as for_each arguments. If used, the sensitive
value could be exposed as a resource instance key.

有可能吗?

【问题讨论】:

  • 你的密码串是什么样子的?
  • 我收到了包含所有秘密的 json。例如:{"secret_string": {"secretname1": "secretvalue1","secretname2": "secretvalue2"}}
  • jsondecode 生成 tf 映射。您可以像任何其他地图一样循环它。我不确定那是什么问题?你有没有特别尝试过什么?有什么错误吗?
  • @Marcin 我已经更新了问题

标签: postgresql terraform terraform-provider-aws aws-secrets-manager


【解决方案1】:

根据您在 cmets 中的 JSON 字符串,您可以这样做:

locals {
  secrets = jsondecode(data.aws_secretsmanager_secret_version.secrets_manager_rds.secret_string)
}

output "secrets" {
  value = [
    for secret_name, secret_value in local.secrets.secret_string:
     "${secret_name}: ${secret_value}"
  ]
}

输出:

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

secrets = [
  "secretname1: secretvalue1",
  "secretname2: secretvalue2",
]

【讨论】:

  • 这个错误是不言自明的。 Terraform 似乎不允许您在for_each 中使用sensitive 值,而且显然它认为机密数据源的输出是敏感的。您可以尝试改用 SSM 参数。
  • 是的,我知道这是一个 terraform 安全功能。有解决方法吗?还是实现此目标的替代方法?
  • 尝试使用nonsensitive函数(for secret_name, secret_value in nonsensitive(local.secrets.secret_string))。
猜你喜欢
  • 2020-12-04
  • 2020-10-01
  • 2020-10-13
  • 2022-11-02
  • 2021-03-15
  • 2022-08-18
  • 2021-10-26
  • 2021-02-19
  • 2022-08-16
相关资源
最近更新 更多