在HCL扩展中使用Terraform变量(VAULT)

问题描述 投票:0回答:1
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")
}

variables.tf
    variable "client" {
      type    = list(string)

}

variables.tfvars
client = ["titi", "toto","itutu"]

在保险库中的回归:


vault acl policies

即使Terraform和Vault都使用HCl作为其各自配置语言的基础语法,但其语言解释器是完全分开的,因此保险库策略语言实现无法直接使用Terraform语言中定义的任何值。 Instead,您需要使用Terraform语言来构建合适的金库配置。保险库支持其策略语言的JSON变体,以使其更易于编程生成它,因此您可以使用Terraform表达式的结果使用terraform的vault pathjsonencode函数

来构建基于JSON的策略,该策略本身可能本身可能包括对Terraform中其他位置的值的引用。
terraform hcl vault
1个回答
1
投票

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

假设local.vault_ro_policy具有值var.client[0]

"example"

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

我也无法在包含的HCl文件中使用变量。但是,如果您要在.tf语法中执行所有操作,则此解决方案似乎比其他答案要简单一些:您需要定义策略内联,而不是包括外部文件

{
  "path": {
    "example/k8s/preprod/*": {
      "capabilities": ["read"]
    }
  }
}
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.