Terraform azure keyVault SetSecret - Запрещенный доступ запрещен

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

 resource "azurerm_key_vault" "keyvault1" {
   name                        = "${local.key_vault_one_name}"
   location                    = "${local.location_name}"
   resource_group_name         = "${azurerm_resource_group.keyvault.name}"
   enabled_for_disk_encryption = false
   enabled_for_template_deployment = true
   tenant_id                  = "${data.azurerm_client_config.current.tenant_id}"

   sku {
     name = "standard"
   }

   access_policy {
     tenant_id = "${data.azurerm_client_config.current.tenant_id}"
     object_id = "${data.azurerm_client_config.current.service_principal_object_id}"
     application_id = "${data.azurerm_client_config.current.client_id}"

     key_permissions = [
"get","list","update","create","import","delete","recover","backup","restore"
     ]

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

certificate_permissions = [
  "get","list","update","create","import","delete","recover","backup","restore", "deleteissuers", "getissuers", "listissuers", "managecontacts", "manageissuers", "setissuers"
]
  }
}

   # Create Key Vault Secrets
   resource "azurerm_key_vault_secret" "test1" {
   name                    = "db-username"
   value                   = "bmipimadmin"
   //vault_uri = "${azurerm_key_vault.keyvault1.vault_uri}"
   key_vault_id            = "${azurerm_key_vault.keyvault1.id}"
   }

Я получаю указанную ниже ошибку при попытке применить терраформирование, даже если у субъекта-службы есть все права доступа, необходимые для игры с Key Vault.

Произошла 1 ошибка: * azurerm_key_vault_secret.test1: Произошла 1 ошибка: * azurerm_key_vault_secret.test1: keyvault.BaseClient # SetSecret: Ошибка ответа на запрос: StatusCode = 403 - Исходная ошибка: autorest / azure: Служба вернула ошибку. Status = 403 Code = "Forbidden" Message = "Доступ запрещен" InnerError = {"code": "AccessDenied"}


person Avi    schedule 19.07.2019    source источник


Ответы (1)


Я могу воспроизвести вашу проблему, и вам не хватает запятой , в конце разрешений. В этом случае вам просто нужно указать tenant_id и object_id при применении терраформирования через субъект-службу. При этом субъекту-службе должна быть предоставлена ​​роль RBAC (например, роль участника) в отношении вашего ресурса хранилища ключей Azure. Подробнее см. здесь.

Например, у меня это работает,

  access_policy {
     tenant_id = "${data.azurerm_client_config.current.tenant_id}"
     object_id = "${data.azurerm_client_config.current.service_principal_object_id}"


     key_permissions = [
"get","list","update","create","import","delete","recover","backup","restore",
     ]

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

certificate_permissions = [
  "get","list","update","create","import","delete","recover","backup","restore", "deleteissuers", "getissuers", "listissuers", "managecontacts", "manageissuers", "setissuers",
]
  }

Ссылка: https://www.terraform.io/docs/providers/azurerm/r/key_vault.html#access_policy

person Nancy Xiong    schedule 22.07.2019