Создание фабрики данных Terraform Azure

#azure #terraform #azure-data-factory #azure-data-factory-2 #terraform-provider-azure

Вопрос:

Я пытаюсь развернуть фабрику данных Azure вместе с управляемым клиентом ключом и удостоверением, но после применения terraform управляемый клиентом ключ не отображается в фабрике данных. Когда я пытаюсь добавить ключ, управляемый клиентом, вручную в фабрику данных, он выдает ошибку ниже. Операция не удалась. Управляемая идентификация, используемая в CMK, не найдена.

     data "azurerm_client_config" "main" {}

resource "azurerm_resource_group" "main" {
    name = "rgsupports01"
    location = "East US 2"
}

resource "azurerm_user_assigned_identity" "main" {
    depends_on = [azurerm_resource_group.main]
    name = "supports01-mid"
    resource_group_name = azurerm_resource_group.main.name
    location = azurerm_resource_group.main.location
}

resource "azurerm_key_vault" "main" {
  name                        = "supportskv01"
  location                    = azurerm_resource_group.main.location
  resource_group_name         = azurerm_resource_group.main.name
  enabled_for_disk_encryption = true
  tenant_id                   = data.azurerm_client_config.main.tenant_id
  soft_delete_retention_days  = 7
  purge_protection_enabled    = false

  sku_name = "standard"

  access_policy {
    tenant_id = data.azurerm_client_config.main.tenant_id
    object_id = data.azurerm_client_config.main.object_id

    key_permissions = [
      "Get",
      "Unwrapkey",
      "Wrapkey",
      "Create",
      "Delete",
    ]

    secret_permissions = [
      "Get",
    ]

    storage_permissions = [
      "Get",
    ]
  }
}

    resource "azurerm_key_vault_access_policy" "main" {
  key_vault_id = azurerm_key_vault.main.id
  tenant_id    = data.azurerm_client_config.main.tenant_id
  object_id    = azurerm_user_assigned_identity.main.client_id

  key_permissions = [
    "Get","List","Unwrapkey","Wrapkey"
  ]

  secret_permissions = [
    "Get","List",
  ]
}

resource "azurerm_key_vault_key" "main" {
  depends_on = [azurerm_key_vault_access_policy.main]
  name         = "supportrsakeys01"
  key_vault_id = azurerm_key_vault.main.id
  key_type     = "RSA"
  key_size     = 2048

  key_opts = [
    "decrypt",
    "encrypt",
    "sign",
    "unwrapKey",
    "verify",
    "wrapKey",
  ]
}

resource "azurerm_data_factory" "adf" {
    #depends_on = [azurerm_key_vault_key.main]
    name       = "supportdfs01"
    resource_group_name = azurerm_resource_group.main.name
    location = azurerm_resource_group.main.location
    public_network_enabled = false
    customer_managed_key_id = resource.azurerm_key_vault_key.main.id
    identity {
        type = "UserAssigned"
        identity_ids = [resource.azurerm_user_assigned_identity.main.id]
    }

}

resource "azurerm_key_vault_access_policy" "new" {
  depends_on = [azurerm_data_factory.adf]
  key_vault_id = azurerm_key_vault.main.id
  tenant_id    = data.azurerm_client_config.main.tenant_id
  object_id    = azurerm_user_assigned_identity.main.principal_id

  key_permissions = [
    "Get","List","Unwrapkey","Wrapkey"
  ]

  secret_permissions = [
    "Get","List",
  ]
}
 

Комментарии:

1. как насчет того, чтобы показать нам свой код терраформирования?!

2. обновите свой вопрос и поместите туда свой код

3. Я только что обновил вопрос. Спасибо

Ответ №1:

Не указывайте конкретные access_policy ресурсы хранилища ключей, используйте только azurerm_key_vault_access_policy ресурсы. То, как вы это указали, приведет к конфликтам и, вероятно, испортит политику доступа. Смотри здесь.

Комментарии:

1. Я удалил access_policy из хранилища ключей и развернул фабрику данных. Ключ, управляемый клиентом, пуст. Ничего особенного. Попробовал прикрепить ключ вручную. Все та же ошибка 🙁

2. действительно ли ключ присутствует в хранилище ключей, и вы проверили на портале, правильно ли настроена политика доступа?

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

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

5. почему у тебя это depends_on = [azurerm_data_factory.adf] есть ? это предоставит доступ к ключу только после развертывания adf