在 hcl 扩展 ( vault ) 中使用 terraform 变量

Posted

技术标签:

【中文标题】在 hcl 扩展 ( vault ) 中使用 terraform 变量【英文标题】:Using terraform variable in hcl extention ( vault ) 【发布时间】: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 ? 【参考方案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)完成了它

以上是关于在 hcl 扩展 ( vault ) 中使用 terraform 变量的主要内容,如果未能解决你的问题,请参考以下文章

已有数据库(单机)部署Database Vault

HCL安装和使用模拟器中遇到的问题

扩展MARA 加入Z字段BAPI_TE_MARA

资产监测设备中HCL190FLAS擦写问题分析——HCL190

HCL

HCL模拟器安装