Может ли docker на Azure Linux службе приложений аутентифицироваться с помощью ACR без указания пароля в настройках приложения? - PullRequest
2 голосов
/ 27 мая 2020

Мы развертываем службу приложений Linux на Azure, используя terraform. Соответствующий код конфигурации:

resource "azurerm_app_service" "webapp" {
  app_settings = {
    DOCKER_REGISTRY_SERVER_URL              = "https://${local.ctx.AcrName}.azurecr.io"
    DOCKER_REGISTRY_SERVER_USERNAME         = data.azurerm_key_vault_secret.acr_admin_user.value
    DOCKER_REGISTRY_SERVER_PASSWORD         = data.azurerm_key_vault_secret.acr_admin_password.value
    ...
  }
  ...
}

Проблема в том, что terraform не считает app_settings секретом, поэтому он выводит в открытом виде значение DOCKER_REGISTRY_SERVER_PASSWORD на выходе Azure DevOps (я запутал фактические значения): enter image description here

Итак, мне интересно - может ли docker работать на Azure Linux хосте службы приложений аутентифицироваться с соответствующим ACR без передать пароль таким образом, чтобы он был настолько очевиден для каждого, кто может проверить вывод конвейера?

Следующая статья кажется актуальной в целом - https://docs.docker.com/engine/reference/commandline/login, но неясно как мы можем применить это в моем контексте, если это вообще возможно.

Кроме того, согласно https://feedback.azure.com/forums/169385-web-apps/suggestions/36145444-web-app-for-containers-acr-access-requires-admin#% 7Btoggle_previous_statuses% 7D Microsoft начала работать над чем-то важным, но похоже, что это все еще незавершенная работа (почти 5 месяцев).

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Боюсь, вы должны установить переменные окружения около DOCKER_REGISTRY_*, чтобы вытащить изображения из ACR, это единственный способ сделать это, разработанный Azure. Но что касается конфиденциальной информации о пароле, она также позволяет скрыть ее. Вы можете использовать Key Vault, чтобы сохранить пароль в секрете, а затем получить пароль из секрета. Взгляните на документ Использовать ссылки Key Vault для службы приложений . Таким образом, вы можете изменить app_setting для пароля следующим образом:

DOCKER_REGISTRY_SERVER_PASSWORD = "@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)"

или

DOCKER_REGISTRY_SERVER_PASSWORD = "@Microsoft.KeyVault(VaultName=myvault;SecretName=mysecret;SecretVersion=ec96f02080254f109c51a1f14cdb1931)"

Тогда будет отображаться только ссылка на Key Vault, а не точный пароль.

0 голосов
/ 27 мая 2020

К сожалению Azure Веб-приложения не поддерживают взаимодействие с ACR с использованием управляемого удостоверения, вы должны передать эти переменные среды в службу приложений.

Terraform в настоящее время не поддерживает применение «чувствительного» флага к произвольным ценности. Вы можете определить выходы как чувствительные, но это не поможет со значениями, которые вы хотите скрыть на этапе планирования.

Я бы посоветовал проверить https://github.com/cloudposse/tfmask, используя конфигурацию TFMASK_RESOURCES_REGEX чтобы заблокировать вывод, который вы хотите скрыть во время конвейера. Если вы не хотите добавлять зависимости, аналогичный эффект может быть достигнут путем соединения terraform apply через grep --invert-match "DOCKER_REGISTRY".

@ charles-xu имеет хороший ответ , если вы хотите чтобы настроить сопоставления между keyvault и вашим веб-приложением, затем превратите sh ваши токены в секреты kv.

...