仅在条件为真时创建策略文档规则 - Terraform Vault

Only create policy document rule on condition true - Terraform Vault

我有一个 Vault 实例,我使用 Terraform 管理其中的策略和机密。在为新入职的团队创建 approle 身份验证、策略和策略文档时,有几个重复的步骤,因为每个团队都有他们处理的多个应用程序。我想模块化重复的部分(团队应用程序的策略文档、策略创建和批准),尽管每个应用程序的规则集略有不同。 有没有一种方法可以创建仅在 bool 设置为 true 时才包含某些规则的策略文档?

例如: 我有一个创建政策和政策文件的模块,如下所示: 我会传递一个名为 enable_metadata_rule 的 bool 变量,并根据它的值创建第二条规则:

resource "vault_policy" "example_policy" {
  for_each = var.environments
  provider = vault
  name     = "${var.team}-${var.application}-${each.key}"
  policy   = data.vault_policy_document.policy_document["${each.key}"].hcl
}

data "vault_policy_document" "policy_document" {
  for_each = var.environments
  rule {
    path         = "engines/${var.team}-kv/data/${each.key}/services/${var.application}/*"
    capabilities = ["read", "list"]
    description  = "Read secrets for ${var.application}"
  }
  rule {
    # IF  enable_metadata_rule == true
    path         = "engines/${var.team}-kv/metadata/*"
    capabilities = ["list"]
    description  = "List metadata for kv store"
  }
}

如果没有这样的东西,是否有合并单独创建的保单文件的选项?

你应该可以使用 dynamic blocks:

data "vault_policy_document" "policy_document" {
  for_each = var.environments
  rule {
    path         = "engines/${var.team}-kv/data/${each.key}/services/${var.application}/*"
    capabilities = ["read", "list"]
    description  = "Read secrets for ${var.application}"
  }  
  
  dynamic "rule" {
  
    for_each = var.enable_metadata_rule == true ? [1]: []
    
    content {
        path         = "engines/${var.team}-kv/metadata/*"
        capabilities = ["list"]
        description  = "List metadata for kv store"
    }
  }
}