如何在将keyvault导入terraform后添加keyvault访问策略

如何在将keyvault导入terraform后添加keyvault访问策略,terraform,azure-keyvault,azure-appservice,azure-rm,Terraform,Azure Keyvault,Azure Appservice,Azure Rm,我的地形设计依赖于一个预设置的密钥库,其中包含应用程序服务使用的秘密。我已将此密钥库导入远程状态。我看它是进口的。现在,当我运行terraform plan时,它的行为就像它不知道导入的资源一样 这就是我的地形的样子 provider "azurerm" { version="=2.20.0" skip_provider_registration="true" features{} } terraform

我的地形设计依赖于一个预设置的密钥库,其中包含应用程序服务使用的秘密。我已将此密钥库导入远程状态。我看它是进口的。现在,当我运行terraform plan时,它的行为就像它不知道导入的资源一样

这就是我的地形的样子

provider "azurerm" {
    version="=2.20.0"
    skip_provider_registration="true"  
    features{}
}

terraform {
  backend "azurerm" {}
}

resource "azurerm_key_vault" "kv" {
  name                  = "${var.env}ActicoDQM-kv"
}

module "app_service_plan"{
  source                    = "./modules/app-service-plan"
 ...redacted for brevity
  tags                      = var.tags
}

module "app-service"{
  source                = "./modules/app-service"
...redacted for brevity
  tags                  = var.tags
  key_vault_id          = azurerm_key_vault.kv.key_vault_id
}
为模块内的应用程序服务添加访问策略

resource "azurerm_app_service" "app" {
... redacted for brevity 
  }

  identity {
      type = "SystemAssigned"
  }
}

resource "azurerm_key_vault_access_policy" "app" {
  key_vault_id       = var.key_vault_id
  tenant_id          = azurerm_app_service.app.identity[0].tenant_id
  object_id          = azurerm_app_service.app.identity[0].principal_id
  secret_permissions = ["get", "list"]
}
在我的理解中似乎有一些缺失的环节,因为现在当我这样做的时候

terraform plan 
它的行为就像它不知道导入的keyvault一样

Error: Missing required argument

  on main.tf line 19, in resource "azurerm_key_vault" "kv":
  19: resource "azurerm_key_vault" "kv" {

The argument "tenant_id" is required, but no definition was found.

即使要将现有的keyvault导入terraform状态,也需要根据定义完全定义所有必需的参数

keyvault资源至少应指定以下参数:

resource "azurerm_key_vault" "kv" {
  name                  = "${var.env}ActicoDQM-kv"
  location              = ..
  resource_group_name   = ..
  sku_name              = "standard" or "premium"
  tenant_id             = data.azurerm_client_config.current.tenant_id
}
您可以使用数据资源公开租户id:

data "azurerm_client_config" "current" {
}

尽管导入,文档并没有说明需要任何最小字段。但它奏效了。非常感谢。我现在明白了,资源块必须具有创建资源所需的所有字段,这样即使没有导入,脚本也是完整的。花了一点销毁和应用的经验来获得完整的图片。