Настройка Azure Container Registry: ACR с managed identity и RBAC

Когда команда запускает десятки микросервисов, без приватного реестра образов возникают риски утечки кода и медленные pull-запросы. Мы настраиваем Azure Container Registry с managed identity, RBAC и retention policy, реализуя проект под ключ — от аудита до сопровождения. Наша команда обеспечивает стабильную работу и последующую поддержку, чтобы реестр масштабировался вместе с вашим бизнесом.
Часто задаваемые вопросы

Настройка Azure Container Registry: ACR с managed identity и RBAC

Отметим: когда команда разработки запускает десятки микросервисов в AKS, без приватного реестра образов возникают проблемы: зависимость от публичных registry, риски утечки проприетарного кода, медленные pull-запросы. Azure Container Registry (ACR) решает эти задачи, но стандартная конфигурация без retention policy и RBAC приводит к переполнению хранилища и уязвимостям. Мы настраиваем ACR с managed identity, автоматической чисткой образов и geo-replication для мультирегиональных деплоев. За 5 лет мы реализовали более 30 проектов с ACR, включая интеграцию с AKS и CI/CD. Стоимость хранения в Standard — около $0.04 за GB в месяц, в Premium — $0.10, но за счёт geo-replication экономия на трафике может превышать $200 в месяц.

Почему стоит выбрать ACR для хранения образов?

ACR выигрывает у Docker Hub по производительности: pull-образов из AKS в среднем на 40% быстрее. ACR поддерживает managed identity, RBAC и интеграцию с Azure DevOps. По рекомендации Microsoft (документация ACR), следует использовать managed identity и отключать admin account.

resource "azurerm_container_registry" "acr" {
  name = "myappacr" # глобально уникальное
  resource_group_name = azurerm_resource_group.main.name
  location = azurerm_resource_group.main.location
  sku = "Standard"
  admin_enabled = false # используем managed identity, не admin

  network_rule_set {
    default_action = "Allow"
  }

  retention_policy {
    days = 30
    enabled = true
  }

  trust_policy {
    enabled = false # включить если нужен content trust
  }
}

admin_enabled = false — обязательное условие. Admin account даёт полный доступ к реестру одной парой логин/пароль. Managed identity + RBAC значительно безопаснее.

Ключевые возможности и SKU

ACR предлагает три SKU: Basic, Standard и Premium. Для продакшена нужен как минимум Standard: 100 GB хранилища, webhooks, content trust. Premium добавляет geo-replication, private endpoints и dedicated data endpoints — необходим, если ACR используется из нескольких регионов или требуется изоляция сети.

Сравнение SKU ACR

SKU Хранилище Webhooks Content Trust Geo-replication Private Endpoint
Basic 10 GB Нет Нет Нет Нет
Standard 100 GB Да Да Нет Нет
Premium 1 TB Да Да Да (до 30 регионов) Да

Как работает geo-replication в ACR?

Geo-replication доступна только в Premium SKU. Она реплицирует образы в до 30 регионов. Pull-запросы направляются к ближайшей реплике, сокращая задержки на 30-50% для удалённых кластеров. Репликация асинхронная (eventual consistency). Мы настраиваем replication для каждого региона, где работают кластеры AKS. Это ускоряет деплои и повышает отказоустойчивость.

Настройка безопасности и аутентификации

Отказ от admin account

Admin account создаёт единую точку компрометации. При его включении пароль статичен и может быть перехвачен. Managed identity привязывается к конкретной Azure-сущности (например, kubelet в AKS) и сертификат ротируется автоматически. RBAC позволяет выдать минимальные права — только AcrPull для чтения образов. С admin account такого контроля нет.

Сравнение методов аутентификации

Метод Безопасность Управление Ротация ключей
Admin account Низкая Вручную Нет
Managed identity Высокая Автоматически (Azure) Автоматическая
Service principal Средняя Ручное обновление секретов Вручную

Как настроить private endpoint для изоляции сети?

Для изоляции ACR от публичного интернета создайте private endpoint в виртуальной сети. После этого ACR становится доступным только изнутри сети. Настройка включает создание Private Link, DNS записей и network rules. Это снижает поверхность атаки и необходимо в regulated средах.

Аутентификация AKS через managed identity

# Привязываем ACR к AKS через az aks attach — это создаёт role assignment
az aks update \
    --name my-aks-cluster \
    --resource-group my-rg \
    --attach-acr myappacr

# Эквивалент вручную:
ACR_ID=$(az acr show --name myappacr --query id --output tsv)
KUBELET_ID=$(az aks show --name my-aks-cluster --resource-group my-rg \
    --query identityProfile.kubeletidentity.objectId --output tsv)
az role assignment create \
    --assignee $KUBELET_ID \
    --role AcrPull \
    --scope $ACR_ID

После этого поды в AKS тянут образы из ACR без imagePullSecrets — kubelet использует managed identity. Это ускоряет деплой и повышает безопасность.

Управление жизненным циклом образов

Как настроить автоматическую очистку образов?

Без retention policy реестр растёт бесконечно. Настраиваем автоматическую чистку через az acr task:

# Удалять untagged манифесты старше 7 дней
az acr task create \
  --registry myappacr \
  --name cleanup-untagged \
  --cmd "acr purge --filter 'myapp:.*' --untagged --ago 7d" \
  --schedule "0 1 * * *" \
  --context /dev/null

# Удалять tagged образы (кроме latest) старше 30 дней
az acr task create \
  --registry myappacr \
  --name cleanup-old-tags \
  --cmd "acr purge --filter 'myapp:[0-9a-f]{7}' --ago 30d" \
  --schedule "0 2 * * 0" \
  --context /dev/null

Мы также настраиваем алерты по использованию хранилища через Azure Monitor. Оптимальная политика — хранить не более 20 тегов на приложение.

Интеграция с CI/CD и AKS

Пошаговая настройка ACR

  1. Определите SKU и location для реестра.
  2. Создайте resource group и ACR через Terraform или Azure CLI.
  3. Настройте network rules: разрешите доступ только из нужных IP или VNet.
  4. Включите retention policy и задайте срок хранения (например, 30 дней).
  5. Отключите admin account (admin_enabled = false).
  6. Настройте managed identity для AKS: az aks update --attach-acr <acr>.
  7. (Опционально) Настройте geo-replication.
  8. (Опционально) Настройте private endpoint.

Что входит в работу

  • Анализ текущей инфраструктуры и требований к хранению образов
  • Развёртывание ACR с нужным SKU, network rules, private endpoints (если нужно)
  • Настройка RBAC: AcrPull, AcrPush, AcrDelete для разных служб
  • Интеграция с AKS через managed identity (без imagePullSecrets)
  • Настройка retention policy с автозадачей purge
  • Интеграция с Azure DevOps CI/CD (пример: задача Docker push с managed identity)
  • Документация по процессу и runbook для инцидентов
  • Обучение команды работе с ACR

Сколько времени занимает настройка?

Базовый ACR с retention policy — от 4 часов до 1 дня. Если нужны geo-replication, private endpoints, интеграция с AKS и CI/CD — до 2 дней. Сроки зависят от количества интеграций и согласования политик.

Типичные ошибки при настройке ACR

  • Использование admin account — забывают отключить. Мы всегда выставляем admin_enabled = false.
  • Отсутствие retention policy — реестр переполняется. Ставим чистку по расписанию.
  • Неправильные RBAC — дают AcrPush вместо AcrPull. Принцип минимума прав.
  • Отсутствие network rules — ACR доступен из интернета. Если нужна изоляция, настраиваем private endpoint.

Свяжитесь с нами для консультации — наши инженеры развернут ACR под ключ, интегрируют с CI/CD и AKS, научат работать с registry. Получите надёжное хранение образов без головной боли. Закажите настройку ACR сегодня.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142