部署期间 Azure Terraform 无法在 KeyVault 中设置机密

Azure Terraform Unable to Set secret in KeyVault during deployment

我遇到了一个障碍,我似乎没有找到切实可行的解决方案。

我正在使用 azure terraform 创建一个存储帐户,我希望在发布管道期间能够将此存储帐户的连接字符串设置为现有 KeyVault 中的机密。

到目前为止,我可以从这个 KeyVault 中检索秘密,因为我使用的 managed identity 对 KeyVault 具有以下权限:

key = get, list
secret = get, list and set
cert = get , list

我的terraform中的工作流程如下:

检索 KeyVault 数据:

data "azurerm_key_vault" "test" {
  name                = "test"
  resource_group_name = "KeyVault-test"
}

检索用户分配的身份数据:

data "azurerm_user_assigned_identity" "example" {
  name                = "mng-identity-example"
  resource_group_name = "managed-identity-example"
}

获得这 2 个数据后,我尝试按如下方式创建秘密:

resource "azurerm_key_vault_secret" "secretTest" {

  key_vault_id = data.azurerm_key_vault.test.id
  name         = "secretTest"
  value        = azurerm_storage_account.storageaccount.primary_connection_string


}

一旦我将发布管道设置为 运行 这个地形,它就会失败并显示错误 Access Denied

这是完全可以理解的,因为此 terraform 没有设置或检索秘密的权限。

这是我被屏蔽的部分。

如果有人可以帮助理解我如何使用我的托管身份来设置此机密?

我查看了 terraform 文档,但找不到任何步骤或解释。

非常感谢您的帮助和时间,如果您需要更多信息,请问我。

请确保您用于使用 Terraform 登录 Azure 的 服务主体具有 您分配给托管身份的相同权限 .

provider "azurerm" {
  features {}

  subscription_id = "00000000-0000-0000-0000-000000000000"
  client_id       = "00000000-0000-0000-0000-000000000000" ## This Client ID needs to have the permissions in Keyvault access policy which you have provided to the managed identity.
  client_secret   = var.client_secret
  tenant_id       = "00000000-0000-0000-0000-000000000000"
}

如果您使用 服务连接 将 Devops 管道连接到 Azure 并在 Terrafarom 中使用它,那么您需要提供开发服务连接(服务主体)访问策略权限.