Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ограничьте доступ к реестру, назначив частные IP-адреса виртуальной сети конечным точкам реестра и воспользовавшись Приватным каналом Azure. Сетевой трафик между клиентом в виртуальной сети и частными конечными точками реестра проходит через виртуальную сеть и приватный канал в магистральной сети Майкрософт, что позволяет избежать рисков общедоступного Интернета. Приватный канал также обеспечивает доступ к частному реестру из локальной среды через Azure ExpressRoute, частный пиринг или VPN-шлюз.
Вы можете настроить параметры DNS для частных конечных точек реестра так, чтобы они определялись как выделенный частный IP-адрес реестра. При такой конфигурации DNS клиенты и службы в сети смогут по-прежнему обращаться к реестру по полному доменному имени реестра, например myregistry.azurecr.io.
В этой статье показано, как настроить частную конечную точку для реестра с помощью портала Azure (рекомендуется) или Azure CLI. Эта функция доступна на уровне службы реестра контейнеров уровня Premium(SKU) с максимально 200 частными конечными точками.
Внимание
Если реестр контейнеров ограничивает доступ к частным конечным точкам, выбранным подсетям или IP-адресам, некоторые функции могут быть недоступными или требуют дополнительной настройки.
- При отключении доступа к общедоступной сети к реестру некоторые доверенные службы, включая Microsoft Defender для Облака, могут получить доступ к реестру только в том случае, если вы включите параметр сети для обхода правил сети.
- После отключения доступа к общедоступной сети экземпляры определенных служб Azure, включая Azure DevOps Services, не могут получить доступ к реестру контейнеров.
- Частные конечные точки в настоящее время не поддерживаются агентами, управляемыми Azure DevOps. Необходимо использовать автономный агент с сетевой линией видимости к частной конечной точке.
- Если у реестра есть утвержденная частная конечная точка и вы отключите доступ к общедоступной сети, вы не сможете просматривать репозитории и теги за пределами виртуальной сети с помощью портала Azure, Azure CLI или других средств.
Предварительные условия
- Виртуальная сеть и подсеть, в которой настраивается частная конечная точка. При необходимости создайте новую виртуальную сеть и подсеть.
- Для тестирования настройте виртуальную машину в виртуальной сети. Действия по созданию тестовой виртуальной машины для доступа к реестру см. в статье Создание виртуальной машины с поддержкой Docker.
- Для выполнения действий с Azure CLI, описанных в этой статье, рекомендуется использовать Azure CLI версии 2.6.0 или более поздней. Чтобы выполнить установку или обновление, см. сведения в статье Установка Azure CLI.
- Если у вас еще нет реестра контейнеров Premium, создайте его и импортируйте образ, например
mcr.microsoft.com/hello-worldиз реестра контейнеров Майкрософт. Создать реестр можно на портале Azure или с помощью Azure CLI.
Регистрация поставщика ресурсов реестра контейнеров
Чтобы настроить доступ к реестру с помощью приватного канала в другой подписке или клиенте Azure, необходимо зарегистрировать поставщика ресурсов для реестра контейнеров Azure в этой подписке. Используйте портал Azure, Azure CLI или другие инструменты.
Пример:
az account set --subscription <Name or ID of subscription of private link>
az provider register --namespace Microsoft.ContainerRegistry
Настройка частной конечной точки на портале Azure
Настройте частную конечную точку при создании реестра или добавьте ее в имеющийся реестр.
Создание частной конечной точки в новом реестре
При создании реестра на портале на вкладке "Основные сведения" выберите "Премиум " для ценового плана.
На вкладке "Сеть" для настройки подключения выберите частный доступ (рекомендуется).
Выберите "Создать подключение к частной конечной точке".
Введите или выберите следующие сведения.
Настройка Значение Подписка Выберите свою подписку. Группа ресурсов Введите имя имеющейся группы или создайте новую. Имя. Введите уникальное имя. Подресурс реестра Убедитесь, что реестр выбран. Виртуальная сеть Выберите виртуальную сеть для этой частной конечной точки. Например: myDockerVMVNET. Подсеть Выберите подсеть для частной конечной точки. Например: myDockerVMSubnet. Интегрировать с частной зоной DNS Выберите Да. Частная зона DNS Выберите (Создать) privatelink.azurecr.io.
Нажмите ОК.
Настройте остальные параметры реестра, а затем нажмите кнопку Проверить и создать. Ваш реестр создается с частной конечной точкой.
Создание частной конечной точки для существующего реестра
- Перейдите в реестр контейнеров на портале Azure.
- В меню службы в разделе "Параметры" выберите "Сеть".
- На вкладке "Закрытый доступ" выберите "Создать подключение к частной конечной точке".
- На вкладке "Основные сведения " выберите подписку, группу ресурсов и регион и введите имя частной конечной точки. Имя сетевого интерфейса создается с помощью имени конечной точки.
- По завершении выберите Далее: Ресурс. Частная конечная точка предназначена для ресурса реестра, поэтому предварительно выбран тип ресурса и подресурс. Затем выберите Далее: Виртуальная сеть.
- Выберите виртуальную сеть и подсеть для частной конечной точки. Не изменяйте другие параметры, а затем нажмите кнопку "Далее: DNS".
- Убедитесь, что для интеграции с частной зоной DNS задано значение "Да", и для частной зоны DNS задано значение (New) privatelink.azurecr.io. Нажмите кнопку "Далее": теги и добавьте все нужные теги, а затем нажмите кнопку "Далее: проверка и создание".
- При появлении сообщения Проверка пройдена нажмите кнопку Создать.
Подтвердите конфигурацию конечной точки
После создания частной конечной точки параметры частных конечных точек на портале отображают параметры DNS. Для подтверждения выполните следующие действия.
- В меню службы реестра контейнеров в разделе "Параметры" выберите "Сеть".
- На вкладке "Закрытый доступ" выберите имя созданной частной конечной точки.
- В меню службы в разделе "Параметры" выберите конфигурацию DNS.
- Просмотрите сведения о конфигурации DNS частной ссылки.
Настройка частной конечной точки с помощью Azure CLI
Примеры Azure CLI в этой статье форматируются для оболочки Bash и используют следующие переменные среды. Замените примеры значений именами существующего реестра контейнеров, виртуальной сети и подсети для настройки частной конечной точки.
REGISTRY_NAME=<container-registry-name>
REGISTRY_LOCATION=<container-registry-location> # Azure region such as westeurope where registry created
RESOURCE_GROUP=<resource-group-name> # Resource group for your existing virtual network and subnet
NETWORK_NAME=<virtual-network-name>
SUBNET_NAME=<subnet-name>
Отключение сетевых политик в подсети
Отключите сетевые политики, например группы безопасности сети в подсети для частной конечной точки. Обновите конфигурацию подсети с помощью az network vnet subnet update:
az network vnet subnet update \
--name $SUBNET_NAME \
--vnet-name $NETWORK_NAME \
--resource-group $RESOURCE_GROUP \
--disable-private-endpoint-network-policies
Настройка частной зоны DNS
Создайте частную зону Azure DNS для домена частного реестра контейнеров Azure. На следующих шагах вы создадите записи DNS для вашего домена реестра в этой зоне DNS. Дополнительные сведения см. в разделе Параметры конфигурации DNS далее в этой статье.
Чтобы использовать частную зону для переопределения разрешения DNS по умолчанию для реестра контейнеров Azure, назовите зону privatelink.azurecr.io. Чтобы создать частную зону, выполните следующую команду az network private-dns zone create.
az network private-dns zone create \
--resource-group $RESOURCE_GROUP \
--name "privatelink.azurecr.io"
Создать ассоциативную ссылку
Воспользуйтесь командой az network private-dns link vnet create, чтобы связать частную зону с виртуальной сетью. В этом примере создается ссылка с именем myDNSLink.
az network private-dns link vnet create \
--resource-group $RESOURCE_GROUP \
--zone-name "privatelink.azurecr.io" \
--name MyDNSLink \
--virtual-network $NETWORK_NAME \
--registration-enabled false
Создание частной конечной точки реестра
В этом разделе рассказывается о том, как создать частную конечную точку реестра в виртуальной сети. Сначала получите идентификатор ресурса вашего реестра.
REGISTRY_ID=$(az acr show --name $REGISTRY_NAME \
--query 'id' --output tsv)
Чтобы создать частную конечную точку реестра, воспользуйтесь командой az network private-endpoint create.
В следующем примере создается конечная точка myPrivateEndpoint и подключение к службе myConnection. Чтобы указать ресурс реестра контейнеров для конечной точки, передайте параметр --group-ids registry.
az network private-endpoint create \
--name myPrivateEndpoint \
--resource-group $RESOURCE_GROUP \
--vnet-name $NETWORK_NAME \
--subnet $SUBNET_NAME \
--private-connection-resource-id $REGISTRY_ID \
--group-ids registry \
--connection-name myConnection
Получение конфигурации IP конечной точки
Чтобы настроить записи DNS, получите конфигурацию IP частной конечной точки. В этом примере сетевой интерфейс частной конечной точки подключается к двум частным IP-адресам для реестра контейнеров: один для самого реестра и один для конечной точки данных реестра. Если реестр геореплицирован, каждая реплика имеет дополнительный IP-адрес.
Сначала выполните команду az network private-endpoint show для запроса частной конечной точки по идентификатору сетевого интерфейса:
NETWORK_INTERFACE_ID=$(az network private-endpoint show \
--name myPrivateEndpoint \
--resource-group $RESOURCE_GROUP \
--query 'networkInterfaces[0].id' \
--output tsv)
Следующие команды az network nic show получают частные IP-адреса и полные доменные имена для реестра контейнеров и конечной точки данных реестра:
REGISTRY_PRIVATE_IP=$(az network nic show \
--ids $NETWORK_INTERFACE_ID \
--query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" \
--output tsv)
DATA_ENDPOINT_PRIVATE_IP=$(az network nic show \
--ids $NETWORK_INTERFACE_ID \
--query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REGISTRY_LOCATION'].privateIPAddress" \
--output tsv)
# An FQDN is associated with each IP address in the IP configurations
REGISTRY_FQDN=$(az network nic show \
--ids $NETWORK_INTERFACE_ID \
--query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateLinkConnectionProperties.fqdns" \
--output tsv)
DATA_ENDPOINT_FQDN=$(az network nic show \
--ids $NETWORK_INTERFACE_ID \
--query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REGISTRY_LOCATION'].privateLinkConnectionProperties.fqdns" \
--output tsv)
Дополнительные конечные точки для геореплик
Если реестр геореплицирован, запросите дополнительные конечные точки данных для каждой его реплики. Например, в регионе eastus:
REPLICA_LOCATION=eastus
GEO_REPLICA_DATA_ENDPOINT_PRIVATE_IP=$(az network nic show \
--ids $NETWORK_INTERFACE_ID \
--query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REPLICA_LOCATION'].privateIPAddress" \
--output tsv)
GEO_REPLICA_DATA_ENDPOINT_FQDN=$(az network nic show \
--ids $NETWORK_INTERFACE_ID \
--query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REPLICA_LOCATION'].privateLinkConnectionProperties.fqdns" \
--output tsv)
При добавлении новой георепликации ожидается подключение к частной конечной точке. Чтобы утвердить подключение к частной конечной точке, настроенное вручную, выполните команду az acr private-endpoint-connection.
Создание записей DNS в частной зоне
Следующие команды создают записи DNS в частной зоне для конечной точки реестра и ее конечной точки данных. Например, если у вас есть реестр с именем myregistry в регионе westeurope, именами конечных точек будут: myregistry.azurecr.io и myregistry.westeurope.data.azurecr.io.
Сначала запустите az network private-dns record-set a create , чтобы создать пустые наборы записей A для конечной точки реестра и конечной точки данных:
az network private-dns record-set a create \
--name $REGISTRY_NAME \
--zone-name privatelink.azurecr.io \
--resource-group $RESOURCE_GROUP
# Specify registry region in data endpoint name
az network private-dns record-set a create \
--name ${REGISTRY_NAME}.${REGISTRY_LOCATION}.data \
--zone-name privatelink.azurecr.io \
--resource-group $RESOURCE_GROUP
Создайте записи A для конечной точки реестра и конечной точки данных, выполнив команду az network private-dns record-set a add-record.
az network private-dns record-set a add-record \
--record-set-name $REGISTRY_NAME \
--zone-name privatelink.azurecr.io \
--resource-group $RESOURCE_GROUP \
--ipv4-address $REGISTRY_PRIVATE_IP
# Specify registry region in data endpoint name
az network private-dns record-set a add-record \
--record-set-name ${REGISTRY_NAME}.${REGISTRY_LOCATION}.data \
--zone-name privatelink.azurecr.io \
--resource-group $RESOURCE_GROUP \
--ipv4-address $DATA_ENDPOINT_PRIVATE_IP
Дополнительные записи для геореплик
Если реестр является геореплицируемым, создайте дополнительные параметры DNS для каждой реплики. Например, в регионе eastus (продолжение):
az network private-dns record-set a create \
--name ${REGISTRY_NAME}.${REPLICA_LOCATION}.data \
--zone-name privatelink.azurecr.io \
--resource-group $RESOURCE_GROUP
az network private-dns record-set a add-record \
--record-set-name ${REGISTRY_NAME}.${REPLICA_LOCATION}.data \
--zone-name privatelink.azurecr.io \
--resource-group $RESOURCE_GROUP \
--ipv4-address $GEO_REPLICA_DATA_ENDPOINT_PRIVATE_IP
Приватный канал настроен и готов к использованию.
Отключение общедоступного доступа к реестру
Во многих сценариях следует отключить доступ к реестру из общедоступных сетей. Эта конфигурация предотвращает доступ всех клиентов за пределами виртуальной сети к конечным точкам реестра.
Чтобы отключить общедоступный доступ к реестру контейнеров на портале Azure, выполните следующие действия.
- В меню службы реестра контейнеров в разделе "Параметры" выберите "Сеть".
- На вкладке "Общедоступный доступ" в общедоступной сети выберите "Отключено". Затем выберите Сохранить.
Вы также можете отключить общедоступный доступ, используя Azure CLI, выполнив az acr update и задав --public-network-enabled значение false.
Примечание.
Если вы отключите общедоступный доступ к реестру, az acr build команды больше не работают.
az acr update --name $REGISTRY_NAME --public-network-enabled false
Использование az acr build с частной конечной точкой и частным реестром
Примечание.
Если отключить доступ к общедоступной сети, команды az acr build не будут работать.
Если вы не используете выделенные пулы агентов, общедоступные IP-адреса обычно требуются. Задачи резервируют набор публичных IP-адресов в каждом регионе для исходящих запросов. При необходимости вы можете добавить эти IP-адреса в список разрешённых вашего брандмауэра для беспрепятственного общения.
az acr build команда использует тот же набор IP-адресов, что и задачи.
Для успешного выполнения az acr build учтите следующие варианты.
- Назначьте выделенный пул агентов.
- Если пул агентов недоступен в вашем регионе, добавьте региональный тег службы реестра контейнеров Azure IPv4 в правила доступа к брандмауэру. Задачи резервируют набор общедоступных IP-адресов в каждом регионе в теге службы (
AzureContainerRegistry) для исходящих запросов. Данные IP-адреса можно добавить в список разрешённых брандмауэром.
Отключение доступа к реестру контейнеров с помощью конечной точки службы
Внимание
Вы не можете использовать функции приватного канала и конечной точки службы, настроенные из виртуальной сети в реестре контейнеров.
После отключения общедоступного доступа и настройки приватного канала для реестра отключите доступ к конечной точке службы из виртуальной сети, удалив правила виртуальной сети.
- Выполните команду
az acr network-rule list, чтобы получить список существующих сетевых правил. - Выполните команду
az acr network-rule remove, чтобы удалить сетевое правило.
Проверка приватного соединения
Убедитесь, что ресурсы в подсети частной конечной точки подключаются к реестру через частный IP-адрес и имеют правильную интеграцию частной зоны DNS.
Чтобы проверить подключение приватного канала, подключитесь к виртуальной машине, которую вы настроили в виртуальной сети. Затем запустите служебную программу, такую как nslookup или dig, чтобы по приватной ссылке найти IP-адрес реестра. Например:
dig $REGISTRY_NAME.azurecr.io
В примере выходных данных показан IP-адрес реестра в адресном пространстве подсети.
[...]
; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> myregistry.azurecr.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52155
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;myregistry.azurecr.io. IN A
;; ANSWER SECTION:
myregistry.azurecr.io. 1783 IN CNAME myregistry.privatelink.azurecr.io.
myregistry.privatelink.azurecr.io. 10 IN A 10.0.0.7
[...]
Сравните этот результат с общедоступным IP-адресом в выходных данных dig для того же реестра через публичную конечную точку.
[...]
;; ANSWER SECTION:
myregistry.azurecr.io. 2881 IN CNAME myregistry.privatelink.azurecr.io.
myregistry.privatelink.azurecr.io. 2881 IN CNAME xxxx.xx.azcr.io.
xxxx.xx.azcr.io. 300 IN CNAME xxxx-xxx-reg.trafficmanager.net.
xxxx-xxx-reg.trafficmanager.net. 300 IN CNAME xxxx.westeurope.cloudapp.azure.com.
xxxx.westeurope.cloudapp.azure.com. 10 IN A 20.45.122.144
[...]
Подтверждение операций реестра по приватной ссылке
Убедитесь, что вы можете выполнять операции с реестром из виртуальной машины в сети. Создайте подключение SSH к виртуальной машине и запустите az acr login , чтобы пройти проверку подлинности в реестре. В зависимости от конфигурации виртуальной машины, возможно, к следующим командам потребуется добавить префикс sudo.
az acr login --name $REGISTRY_NAME
Выполните операции с реестром, например, используйте docker pull, чтобы выгрузить образ-образец из реестра. Замените hello-world:v1 изображением и тегом, подходящими для вашего реестра, добавив в качестве префикса имя сервера для входа в реестр (в нижнем регистре):
docker pull myregistry.azurecr.io/hello-world:v1
Убедитесь, что Docker успешно извлекает образ на виртуальную машину.
Управление подключениями к частным конечным точкам
Вы можете управлять подключениями частной конечной точки реестра, используя портал Azure или команды из группы команд az acr private-endpoint-connection. Вы можете утвердить, удалить, перечислить, отклонить или отобразить сведения о подключениях частных конечных точек реестра.
Чтобы получить список подключений к частной конечной точке реестра, выполните команду az acr private-endpoint-connection list :
az acr private-endpoint-connection list \
--registry-name $REGISTRY_NAME
При настройке подключения к частной конечной точке с помощью действий, описанных в этой статье, реестр автоматически принимает подключения от клиентов и служб с разрешениями Azure RBAC в реестре. Вы можете настроить для конечной точки обязательное утверждение подключений вручную. Сведения о том, как утверждать и отклонять подключения к частным конечным точкам, см. в статье Управление подключением к частной конечной точке.
Внимание
В настоящее время при удалении частной конечной точки из реестра может также потребоваться удалить ссылку виртуальной сети на частную зону. Если ссылка не удалена, может появиться сообщение об ошибке unresolvable host .
Параметры конфигурации DNS
Частная конечная точка в этом примере интегрируется с частной зоной DNS, связанной с базовой виртуальной сетью. Эта конфигурация использует службу DNS, предоставляемую Azure, чтобы непосредственно преобразовать публичное полное доменное имя реестра в частные IP-адреса в виртуальной сети.
Приватный канал поддерживает дополнительные сценарии конфигурации DNS, использующие частную зону, включая пользовательские решения DNS. Например, у вас может быть пользовательское решение DNS, развернутое в виртуальной сети или локально в сети, которое подключается к виртуальной сети с помощью VPN-шлюза или Azure ExpressRoute.
Чтобы разрешить общедоступное полное доменное имя реестра (FQDN) в частный IP-адрес в таких сценариях, необходимо настроить пересылатель на уровне сервера в службу Azure DNS (168.63.129.16). Точные параметры конфигурации и действия зависят от имеющихся сетей и DNS. Примеры см. в следующих примерах: значения частной зоны DNS частной конечной точки Azure.
Внимание
Если вы создаете частные конечные точки в нескольких регионах для обеспечения высокой доступности, используйте отдельную группу ресурсов в каждом регионе и поместите виртуальную сеть и связанную частную зону DNS в ней. Такая конфигурация также предотвращает непредсказуемое разрешение DNS из-за использования одной частной зоны DNS.
Настройка записей DNS вручную
Для некоторых сценариев может потребоваться вручную настроить записи DNS в частной зоне вместо использования частной зоны, предоставленной Azure. Обязательно создайте записи для конечной точки реестра, конечной точки данных реестра и конечной точки данных для любой дополнительной региональной реплики. Если вы не настроите все записи, реестр может быть недоступен.
Внимание
Если позднее будет добавлена новая реплика, потребуется вручную добавить новую запись DNS для конечной точки данных в этом регионе. Например, если вы создаете реплику myregistry в регионе Северная Европа, добавьте запись для myregistry.northeurope.data.azurecr.io.
Полные доменные имена и частные IP-адреса, необходимые для создания записей DNS, связаны с сетевым интерфейсом частной конечной точки. Эти сведения можно получить с помощью портала Azure или Azure CLI.
- На портале перейдите к частной конечной точке и выберите конфигурацию DNS.
- С помощью Azure CLI запустите az network nic show. Примеры команд см. в разделе "Получение IP-конфигурации конечной точки".
После создания записей DNS убедитесь, что полные доменные имена реестра правильно преобразуются в соответствующие частные IP-адреса.
Извлечение из регистратора с включенной частной ссылкой
Чтобы извлечь содержимое из реестра с включенным приватным каналом, клиенты должны разрешить доступ к конечной точке REST реестра и всем региональным конечным точкам данных. Прокси-сервер клиента или брандмауэр должен разрешить доступ к:
- Конечная точка REST:
{REGISTRY_NAME}.azurecr.io - Конечные точки данных:
{REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.io
Для геореплицированного реестра необходимо настроить доступ к конечной точке данных для каждой региональной реплики.
Обновите конфигурацию маршрутизации клиентского прокси-сервера и брандмауэра с конечными точками данных для успешной обработки запросов на извлечение. Прокси-сервер клиента обеспечивает централизованное управление трафиком для исходящих запросов. Для обработки локального трафика не требуется прокси-сервер клиента. Вы можете добавить конечные точки в раздел noProxy для обхода прокси-сервера. Дополнительные сведения см. в статье о поддержке прокси-сервера HTTP в AKS.
Запросы к серверу токенов через подключение к частной конечной точке не требуют конфигурации конечной точки данных.
Очистка ресурсов
Если вы создали все ресурсы Azure в одной группе ресурсов и больше не хотите их, можно удалить группу ресурсов на портале Azure или с помощью одной команды az group delete :
az group delete --name $RESOURCE_GROUP
Связанный контент
- Дополнительные сведения о Приватных каналах см. в документации по Приватным каналам Azure.
- Выполните команду az acr check-health с параметром
--vnet, чтобы подтвердить параметры DNS в виртуальной сети, которые обеспечивают маршрутизацию до частной конечной точки. Дополнительные сведения см. в статье "Проверка работоспособности реестра контейнеров Azure". - Если вам нужно настроить правила для доступа к реестру, расположенному за клиентским брандмауэром, воспользуйтесь руководством Настройка правил для доступа к реестру контейнеров Azure за брандмауэром.
- Устранение неполадок с подключением к частной конечной точке Azure.
- Если необходимо развернуть экземпляры контейнеров Azure, которые могут загружать контейнерные образы из ACR через частную конечную точку, см. статью "Развертывание экземпляров контейнеров Azure из реестра контейнеров Azure с помощью управляемого удостоверения".