Terraform-尝试使用服务主体在Azure中创建资源,并从keyvault中提取SPs密钥

Terraform-尝试使用服务主体在Azure中创建资源,并从keyvault中提取SPs密钥,azure,terraform,azure-keyvault,service-principal,Azure,Terraform,Azure Keyvault,Service Principal,在过去一周左右的时间里,我们一直在使用Terraform管理Azure中的资源。 很棒的工具。 我发现使用AZ用户帐户和服务主体之间有区别 目标是使用指定的服务主体在Azure中创建资源,并引用存储在AZ key vault中的其机密。远离本地存储的秘密(文件、环境变量等) 我可以使用经过身份验证的服务主体成功地创建资源,只要我有包含subid、clientid、clientsecret和tenantid的azurerm提供程序,它就工作得很好 当我将服务主体机密存储为variables.tf中

在过去一周左右的时间里,我们一直在使用Terraform管理Azure中的资源。
很棒的工具。
我发现使用AZ用户帐户和服务主体之间有区别

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

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

当我将服务主体机密存储为variables.tf中的var sp_secret(甚至可以作为env var)时,工作原理的示例:

我已经能够成功地从keyvault中提取服务主体机密并“输出”它,但我想做的是从kv中提取该机密并使用,比如说作为提供者客户机_secret值中的var。例如,“client_secret=“${link to secret siting in kv}”

以下是我从keyvault检索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\u 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密钥库中时,你需要运行代码,然后才能获得秘密。它会导致循环依赖。

此问题有任何更新吗?它能解决你的问题吗?如果它适合你,请接受它。
Error: Cycle: data.azurerm_key_vault.keyvault, provider["registry.terraform.io/hashicorp/azurerm"], data.azurerm_key_vault_secret.kv-sp