1

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

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

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"
  }
}

如果没有这样的事情,是否有合并单独创建的策略文档的选项?

4

1 回答 1

2

您应该能够使用动态块来做到这一点:

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"
    }
  }
}
于 2021-08-06T08:20:46.043 回答