【问题标题】:Using terraform variable in hcl extention ( vault )在 hcl 扩展 ( vault ) 中使用 terraform 变量
【发布时间】:2022-01-16 01:52:13
【问题描述】:

我正在尝试在 Vault 中自动创建路径和策略。 你知道我该怎么做吗? 在 terraform 中声明的变量不会在 .hcl 文件中重新整理。 我试图将我的文件 client-ro-policy.hcl 重命名为 client-ro-policy.tf 但我有同样的问题 在扩展名为 .tf 的文件中识别变量

谢谢

main.tf

# Use Vault provider
provider "vault" {



# It is strongly recommended to configure this provider through the
  # environment variables:
  #    - VAULT_ADDR
  #    - VAULT_TOKEN
  #    - VAULT_CACERT
  #    - VAULT_CAPATH
  #    - etc.  

}

acl-ro-policy.hcl

    path "${var.client[0]}/k8s/preprod/*" {
  capabilities = ["read"]
}

policies.tf

    #---------------------
# Create policies
#---------------------

# Create 'client' policy
resource "vault_policy" "ro-client" {
  name   = "${var.client[0]}_k8s_preprod_ro"
  policy = file("./hcl-ro-policy.tf")
}

变量.tf

    variable "client" {
      type    = list(string)

}

变量.tfvars

client = ["titi", "toto","itutu"]

保险库中的结果:

【问题讨论】:

  • 我会尝试使用 json 格式,但也许我应该考虑 Ansible ?

标签: terraform hcl vault


【解决方案1】:

尽管 Terraform 和 Vault 都使用 HCL 作为其各自配置语言的底层语法,但它们的语言解释器是完全独立的,因此 Vault 策略语言实现不能直接使用 Terraform 语言中定义的任何值。

相反,您需要使用 Terraform 语言构建适合 Vault 的配置。 Vault 支持其策略语言的 JSON 变体,以便更轻松地以编程方式生成它,因此您可以使用 Terraform's jsonencode function 从 Terraform 表达式的结果构建基于 JSON 的策略,该表达式本身可能包含对值的引用Terraform 的其他地方。

例如:

locals {
  vault_ro_policy = {
    path = {
      "${var.client[0]}/k8s/preprod/*" = {
        capabilities = ["read"]
      }
    }
  }
}

resource "vault_policy" "ro-client" {
  name   = "${var.client[0]}_k8s_preprod_ro"
  policy = jsonencode(local.var_ro_policy)
}

假设var.client[0] 的值为"example"local.vault_ro_policy 的值应编码为 JSON,如下所示:

{
  "path": {
    "example/k8s/preprod/*": {
      "capabilities": ["read"]
    }
  }
}

假设这是有效的 Vault JSON 策略语法(我尚未验证),这应该被 Vault 接受为有效策略。如果我没有完全正确地获得 JSON 策略语法,那么希望您能看到如何将其调整为有效;我的专长是 Terraform,所以我在这里专注于 Terraform 语言部分。

【讨论】:

  • 非常感谢,我会尝试的。我使用安装了 cli 并在 localhost 的 env 中配置了 VAULT* var 的 ansible(我的保险库是一个 pod)完成了它
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2021-01-04
相关资源
最近更新 更多