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







