Как добавить политики доступа к хранилищу ключей после импорта хранилища ключей в terraform

Мой дизайн терраформы зависит от предварительно подготовленного хранилища ключей, содержащего секреты, которые будут использоваться службами приложений. Я импортировал это хранилище ключей в свое удаленное состояние. Я вижу, он был импортирован. Теперь, когда я запускаю план terraform, он действует так, как будто он не знает об импортированном ресурсе.

Так выглядит моя терраформа

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 

Он действует так, как будто он не знает об импортированном хранилище ключей

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.

person Tauqir    schedule 19.08.2020    source источник


Ответы (1)


Даже если вы импортируете существующее хранилище ключей в свое состояние терраформирования, вам необходимо полностью определить все необходимые аргументы в соответствии с документы ресурсов keyvault.

Как минимум ваш ресурс 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
}

Вы можете раскрыть tenant_id, используя ресурс данных:

data "azurerm_client_config" "current" {
}
person pijemcolu    schedule 19.08.2020
comment
В документации ничего не говорится о необходимости каких-либо минимальных полей, несмотря на импорт. Но это сработало. Благодарю вас! - person Tauqir; 19.08.2020
comment
Теперь я понимаю, что в блоке ресурсов должны быть все поля, необходимые для создания ресурса, чтобы сценарий был завершен даже без импорта. Получил небольшой опыт разрушения и нанесения, чтобы получить полную картину. - person Tauqir; 21.08.2020