Ошибка службы приложений Azure при извлечении изображения из ACR с помощью KeyVault (Terraform)

Я пытаюсь вытащить изображение из ACR в службу приложений Azure. Я сохранил учетные данные ACR в Key Vault. Я использую конечную точку, созданную Key Vault, в своей конфигурации Terraform службы приложений. Мой сценарий TF выглядит так

  module "my-ui-service-temp" {
  source                   = "app-service-noconn"
  location                 = "${local.location}"
  name                     = "webapp-temp"
  resource_group_name      = "${module.create-resource-group.name}"
  app_service_plan_id      = "${module.create-app-service-plan.id}"
  app_service_plan_name    = "${module.create-app-service-plan.name}"
  namespace                = "${local.namespace}-temp"
  dotnetframework_version  = "v4.0"
  java_version = "1.8"
  process_32bitworker      = "true"
  websockets_enabled       = "true"
  remote_debugging_enabled = "true"
  local_mysql_enabled      = "true"
  php_version              = "5.5"
  remote_debugging_version = "VS2017"
  tls_version              = "1.2"
  linuxfx_version          = "DOCKER|myregistry.azurecr.io/my-webapp:latest"
  //cors_allowed_origins = "*"

  //ip_address_restriction = "10.198.54.79"

  #ip_address_restriction = "198.203.177.177"
  default_documents      = [ "Default.htm", "Default.html", "Default.asp", "index.htm", "index.html", "iisstart.htm", "default.aspx", "index.php", "hostingstart.html"]

  http2_enabled = "false"
  scm_type      = "none"
  subnet_mask   = "255.255.255.255"

  app_settings {
    "DOCKER_REGISTRY_SERVER_URL" = "myregistry.azurecr.io"
    "DOCKER_REGISTRY_SERVER_USERNAME" = "https://myapp-kv-az.vault.azure.net/secrets/my-secret-kv-az/redacted"
    "DOCKER_REGISTRY_SERVER_PASSWORD" = "https://myapp-kv-az.vault.azure.net/secrets/my-pass-az-pass/redacted"
  }

}

Это ошибка, которую я получаю

2019-06-17 16: 06: 20.651 ОШИБКА - Получение образа docker registry.azurecr.io/myApp-webapp:latest не удалось: 2019-06-17 16: 06: 20.651 ИНФОРМАЦИЯ - Получение образа из концентратора Docker: registry.azurecr. io / myApp-webapp: последняя версия 2019-06-17 16:06: 20.676 ОШИБКА - DockerApiException: API Docker ответил кодом состояния = InternalServerError, response = {"message": "Get https://registry.azurecr.io/v2/myApp-webapp/manifests/latest: unauthorized: требуется аутентификация" }

2019-06-17 16: 06: 20.687 ОШИБКА - Ошибка при извлечении образа: проверьте конфигурацию образа докера и учетные данные (при использовании частного репозитория)

Если я передаю свои учетные данные ACR напрямую без KeyVault, я могу извлечь образ и построить его без каких-либо проблем. Я предполагаю, что это как-то связано с политиками доступа к Key Vault.

Но в сообщении об ошибке говорится: Docker API ответил кодом состояния = InternalServerError, response = {"message": "Get https://registry.azurecr.io/v2/myApp-webapp/manifests/latest: unauthorized: требуется аутентификация "}, что меня беспокоит!

Я передаю данные аутентификации через keyvault, но служба приложений не может пройти аутентификацию.


person Siddhartha Thota    schedule 17.06.2019    source источник


Ответы (2)


починил это. Вместо передачи @ Microsoft.keyvault (SecretUri = "").

Я использовал

data "azurerm_key_vault_secret" "myacrServer" { 
name = "myApp-acr-server-az" 
vault_uri = "myApp-kv-az-acr.vault.azure.net" 
} 

А затем в app_settings службы веб-приложений я передаю это секретное значение данных.

app_settings { 
"DOCKER_REGISTRY_SERVER_USERNAME" = "${data.azurerm_key_vault_secret.myacrusname.value}" 
} 
person Siddhartha Thota    schedule 18.06.2019

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

app_settings {
    "DOCKER_REGISTRY_SERVER_URL" = "myregistry.azurecr.io"
    "DOCKER_REGISTRY_SERVER_USERNAME" = "@Microsoft.KeyVault(SecretUri="https://myapp-kv-az.vault.azure.net/secrets/my-secret-kv-az/redacted)"
    "DOCKER_REGISTRY_SERVER_PASSWORD" = "@Microsoft.KeyVault(SecretUri=https://myapp-kv-az.vault.azure.net/secrets/my-pass-az-pass/redacted)"
}
person 4c74356b41    schedule 18.06.2019
comment
все еще получаю ту же ошибку. ОШИБКА - DockerApiException: Docker API ответил кодом состояния = InternalServerError, response = {message: Get registry.azurecr.io/v2/myApp-webapp/manifests/latest: unauthorized: требуется аутентификация} - person Siddhartha Thota; 18.06.2019
comment
починил это. Вместо передачи @ Microsoft.keyvault (SecretUri =). Я использовал данные azurerm_key_vault_secret myacrServer {name = myApp-acr-server-az vault_uri = myApp-kv-az-acr.vault.azure.net} app_settings {DOCKER_REGISTRY_SERVER_USERNAME = $ {data.azurerm_key_vault_secret.myacrusname.value}} - person Siddhartha Thota; 18.06.2019
comment
это означает, что вы получаете данные от kv в терраформе, а не в веб-приложении. - person 4c74356b41; 18.06.2019
comment
да, теперь я могу получить значение от KV. Мое веб-приложение запущено :) - person Siddhartha Thota; 18.06.2019