首页 > 解决方案 > 如何从多个密钥库中获取密钥?地形

问题描述

我正在努力解决这个问题并努力让它正确。所以我有 3 个密钥库,每个地区 1 个,美国、欧洲、亚洲,所以我通过数据块传递它

data "azurerm_key_vault" "existing" {
  name                = "mykeyvault"
  resource_group_name = "myrg"
}

data "azurerm_key_vault_secret" "userlist1" {
  name = "secret1" 
  key_vault_id = "${data.azurerm_key_vault.existing.id}" 
}

data "azurerm_key_vault_secret" "userlist2"{
  name = "secret2" 
  key_vault_id = "${data.azurerm_key_vault.existing.id}" 
}


output "secret_value1" {
  value = "${data.azurerm_key_vault_secret.userlist1.value}"
}

output "secret_value2" {
  value = "${data.azurerm_key_vault_secret.userlist2.value}"
}

现在正在努力拼凑的是,如果我的管道设置为在 region = europe 上运行,我该如何传递下面的秘密值?

module "testmod" {
  source                    = "./test
  password                  = "${data.azurerm_key_vault_secret.**IFREGIONISEUROPETHENPASSTHISSECRET**.value}"
}

标签: azureterraformdevops

解决方案


首先,您计划使用的方法将您的秘密放在您的状态文件中,因此请确保您的状态文件已加密且安全。

因为你想动态引用值,你想要的可能是一个像对象这样的数据结构,而不是一个变量序列。

使用 locals 在对象中收集您的值:

locals {
  secret_by_region = {
    "asia" = data.azurerm_key_vault_secret.userlist1.value,
    "europe" = data.azurerm_key_vault_secret.userlist2.value
  }
}

然后从局部变量中引用值:

module "testmod" {
  source                    = "./test
  password                  = local.secret_by_region[var.region]
}

推荐阅读