微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Terraform - 尝试使用服务主体在 Azure 中创建资源并从密钥库中提取该 SP 密钥

如何解决Terraform - 尝试使用服务主体在 Azure 中创建资源并从密钥库中提取该 SP 密钥

过去一周左右一直在使用 terraform 来管理 Azure 中的资源。
很棒的工具。
我发现使用 AZ 用户帐户与使用服务主体之间存在区别。

目标是使用指定的服务主体并引用存储在 AZ Key Vault 中的机密在 Azure 中创建资源。远离本地存储的机密(文件、环境变量等)。

只要我的 azurerm 提供程序包含 subid、clientid、clientsecret 和 tenantid,我就可以使用经过身份验证的服务主体成功创建资源,效果很好。

当我将服务主体秘密作为 var sp_secret 存储在 variables.tf(甚至作为 env var)时的工作示例:

provider "azurerm" {
 version = "=2.48.0"
 features { }
  subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  client_id       = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  client_secret   = "${var.sp_secret}"
  tenant_id       = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

我已经能够成功地从密钥库中提取服务主体的秘密并“输出”它,但我想要做的是从 kv 中提取该秘密并使用,比如作为提供者 client_secret 值中的 var。前任。 'client_secret = "${链接到秘密坐在 kv}"'

这是我从密钥库中检索 SP 机密并将其输出的操作:

data "azurerm_client_config" "current" {}

variable "keyvault_name" {
  default = "blah-kv"
}

variable "kvrg_name" {
  default = "blah-kv-rg"
}

data "azurerm_key_vault" "keyvault" {
  name                = "${var.keyvault_name}"
  resource_group_name = "${var.kvrg_name}"
}

data "azurerm_key_vault_secret" "kv-sp" {
  name         = "blah-tf-sp-secret"
  key_vault_id = "${data.azurerm_key_vault.keyvault.id}"
}

output "secret_value" {
  value = "${data.azurerm_key_vault_secret.kv-sp.value}"
}

如前所述,上面的代码片段成功检索并输出了秘密。我只想在 azurerm 提供程序引用中将该秘密设置为 client_secret 值,而不是输出秘密。

我尝试了 client_secret = "${data.azurerm_key_vault_secret.kv-sp.value}" 的许多变体,但出现以下错误

Error: Cycle: data.azurerm_key_vault.keyvault,provider["registry.terraform.io/hashicorp/azurerm"],data.azurerm_key_vault_secret.kv-sp

我将上述错误解释为循环引用。我尝试了一些我在寻找答案时发现的东西,但没有骰子。

感谢任何指导。
谢谢!

解决方法

据我所知。不可能达到你所期望的。当您使用 Terraform 管理 Azure 资源时,您需要拥有一个具有足够权限的 Azure 帐户或服务主体。如果使用服务原则,则意味着您需要在运行 Terraform 代码之前使用客户端 ID 和客户端密钥配置提供程序 azurerm。但是当你将机密存储在 Azure Key Vault 中时,则需要运行代码,然后才能获取机密。它会导致循环依赖。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。