Terraform azure - генерация ключа keyvault - доступ запрещен - PullRequest
0 голосов
/ 27 февраля 2020

Я хотел бы сгенерировать ключ keyvault с помощью:

resource "azurerm_key_vault" "xxx-keyvault" {
  name                        = "xxx-keyvault"
  location             = var.location
  resource_group_name  = azurerm_resource_group.xxx-rg.name
  enabled_for_disk_encryption = true
  tenant_id                   = var.tenant_id
  sku_name = "standard"
  enabled_for_template_deployment = true
  enabled_for_deployment          = true

  access_policy {
    tenant_id = var.tenant_id
    object_id = var.service_principal_object_id

    key_permissions = [
      "backup","create","decrypt","delete","encrypt","get","import","list","purge","recover","restore","sign","unwrapKey","update","verify","wrapKey"
    ]

    secret_permissions = [
      "backup","get","list","purge","recover","restore","set"
    ]
  }

  network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"
  }

}

resource "azurerm_key_vault_key" "xxx-keyvault-key" {
  name         = "xxx-keyvault-key"
  key_vault_id = azurerm_key_vault.xxx-keyvault.id
  key_type     = "RSA"
  key_size     = 2048

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

, но я получаю следующую ошибку:

Ошибка: Ошибка создания ключа: keyvault.BaseClient # CreateKey: Ошибка при ответе на запрос: StatusCode = 403 - Исходная ошибка: авторест / azure: служба вернула ошибку. Status = 403 Code = "Forbidden" Message = "Доступ запрещен. Вызывающий не найден ни в одной политике доступа. \ R \ nCaller: appid = <...>; oid = <...>; numgroups = 0; iss = <...> / \ r \ nVault: <...>; location = <...> "InnerError = {" code ":" AccessDenied "}

Что не так?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Для вашей проблемы причина в том, что вы задали свойство network_acls для хранилища ключей. Когда хранилище ключей создано, брандмауэр также включается, и вы не разрешаете publi c IP-адрес компьютера, на котором вы выполняете код Terraform. Таким образом, действие, которое создает ключ в хранилище ключей, - «Запрещено».

Самое простое решение для вас заключается в том, что не устанавливается свойство network_acls для хранилища ключей.

Или добавьте свою публикацию. c IP-адрес компьютера, на котором вы выполняете код Terraform в network_acls, например:

network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"
    ip_rules       = ["your_machine_publicIp"]
  }

Вы можете найти publi c IP в ошибке, которую вы получили с клиентом адрес .

И вам также необходимо убедиться, что object_id в политике доступа хранилища ключей является идентификатором объекта участника службы, а не реестра приложения. Это может быть еще одной причиной, вызвавшей проблему.

0 голосов
/ 28 февраля 2020

Для этой проблемы, не могли бы вы добавить политику доступа (с разрешениями) вручную через пользовательский интерфейс и затем использовать Terraform для генерации ключа. Вот запись , которая имеет аналогичную проблему с вашей. enter image description here

...