Omezení přístupu k registru kontejneru pomocí koncového bodu služby ve virtuální síti Azure

Azure Virtual Network poskytuje zabezpečené privátní sítě pro vaše prostředky Azure a místní prostředky. Koncový bod služby umožňuje zabezpečit veřejnou IP adresu registru kontejneru pouze pro vaši virtuální síť. Tento koncový bod poskytuje optimální trasu k prostředku přes páteřní síť Azure. Identity virtuální sítě a podsítě se také přenášejí s každou žádostí.

Tento článek ukazuje, jak nakonfigurovat koncový bod služby registru kontejneru (Preview) ve virtuální síti.

Každý registr podporuje maximálně 100 pravidel virtuální sítě.

Důležité

Azure Container Registry teď podporuje Službu Azure Private Link, která umožňuje umístění privátních koncových bodů z virtuální sítě do registru. Privátní koncové body jsou přístupné z virtuální sítě pomocí privátních IP adres. Ve většině síťových scénářů doporučujeme místo koncových bodů služby používat privátní koncové body. Registr kontejnerů nepodporuje povolení funkcí privátního propojení i koncového bodu služby nakonfigurovaných z virtuální sítě. Proto doporučujeme spustit seznam a podle potřeby odebrat pravidla sítě.

Konfigurace koncového bodu služby registru je k dispozici ve vrstvě služby Registru kontejneru Premium . Informace o úrovních a omezeních služby registru najdete v tématu Úrovně služby Azure Container Registry.

Omezení verze Preview

Důležité

Některé funkce můžou být nedostupné nebo vyžadovat více konfigurace v registru kontejneru, který omezuje přístup k privátním koncovým bodům, vybraným podsítím nebo IP adresám.

  • Pokud je přístup veřejné sítě k registru zakázaný, přístup k registru určitých důvěryhodných služeb , včetně služby Azure Security Center, vyžaduje povolení síťového nastavení pro obcházení pravidel sítě.
  • Jakmile je přístup k veřejné síti zakázaný, instance některých služeb Azure, včetně Azure DevOps Services, momentálně nemají přístup k registru kontejneru.
  • Privátní koncové body se v současné době nepodporují u spravovaných agentů Azure DevOps. K privátnímu koncovému bodu budete muset použít místního agenta se síťovým dohledem.
  • Pokud má registr schválený privátní koncový bod a přístup k veřejné síti je zakázaný, úložiště a značky se nedají vypisovat mimo virtuální síť pomocí webu Azure Portal, Azure CLI nebo jiných nástrojů.

Předpoklady

  • Pokud chcete použít kroky Azure CLI v tomto článku, vyžaduje se Azure CLI verze 2.0.58 nebo novější. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

  • Pokud ještě nemáte registr kontejneru, vytvořte jednu (požadovaná úroveň Premium) a nasdílejte ukázkovou image, jako hello-world je Docker Hub. Pomocí webu Azure Portal nebo Azure CLI můžete například vytvořit registr.

  • Pokud chcete omezit přístup k registru pomocí koncového bodu služby v jiném předplatném Azure, zaregistrujte poskytovatele prostředků pro Azure Container Registry v daném předplatném. Příklad:

    az account set --subscription <Name or ID of subscription of virtual network>
    
    az provider register --namespace Microsoft.ContainerRegistry
    

Vytvoření virtuálního počítače s podporou Dockeru

Pro účely testování použijte virtuální počítač s Ubuntu s podporou Dockeru pro přístup k registru kontejneru Azure. Pokud chcete pro registr použít ověřování Microsoft Entra, nainstalujte na virtuální počítač také Azure CLI . Pokud už máte virtuální počítač Azure, přeskočte tento krok vytvoření.

Pro virtuální počítač a registr kontejneru můžete použít stejnou skupinu prostředků. Toto nastavení zjednodušuje vyčištění na konci, ale nevyžaduje se. Pokud se rozhodnete vytvořit samostatnou skupinu prostředků pro virtuální počítač a virtuální síť, spusťte příkaz az group create. Následující příklad předpokládá, že jste nastavili proměnné prostředí pro název skupiny prostředků a umístění registru:

az group create --name $RESOURCE_GROUP --location $REGISTRY_LOCATION

Teď nasaďte výchozí virtuální počítač Ubuntu Azure pomocí příkazu az vm create. Následující příklad vytvoří virtuální počítač s názvem myDockerVM.

VM_NAME=myDockerVM

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

Vytvoření virtuálního počítače trvá několik minut. Po dokončení příkazu si poznamenejte publicIpAddress zobrazení v Azure CLI. Tuto adresu použijte k vytvoření připojení SSH k virtuálnímu počítači.

Instalace Dockeru na virtuální počítač

Po spuštění virtuálního počítače vytvořte připojení SSH k virtuálnímu počítači. Nahraďte publicIpAddress veřejnou IP adresou vašeho virtuálního počítače.

ssh azureuser@publicIpAddress

Spuštěním následujících příkazů nainstalujte Docker na virtuální počítač s Ubuntu:

sudo apt-get update
sudo apt install docker.io -y

Po instalaci spusťte následující příkaz a ověřte, že je na virtuálním počítači správně spuštěný Docker:

sudo docker run -it hello-world

Výstup:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Instalace Azure CLI

Postupujte podle kroků v tématu Instalace Azure CLI s apt pro instalaci Azure CLI na virtuální počítač s Ubuntu. Příklad:

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Ukončete připojení SSH.

Konfigurace síťového přístupu pro registr

V této části nakonfigurujte registr kontejneru tak, aby umožňoval přístup z podsítě ve virtuální síti Azure. Kroky jsou k dispozici pomocí Azure CLI.

Přidání koncového bodu služby do podsítě

Když vytvoříte virtuální počítač, Azure ve výchozím nastavení vytvoří virtuální síť ve stejné skupině prostředků. Název virtuální sítě je založený na názvu virtuálního počítače. Pokud například pojmenujete virtuální počítač myDockerVM, výchozí název virtuální sítě je myDockerVMVNET s podsítí s názvem myDockerVMSubnet. Ověřte to pomocí příkazu az network vnet list :

az network vnet list \
  --resource-group myResourceGroup \
  --query "[].{Name: name, Subnet: subnets[0].name}"

Výstup:

[
  {
    "Name": "myDockerVMVNET",
    "Subnet": "myDockerVMSubnet"
  }
]

Pomocí příkazu az network vnet subnet update přidejte do podsítě koncový bod služby Microsoft.ContainerRegistry. Názvy virtuální sítě a podsítě nahraďte následujícím příkazem:

az network vnet subnet update \
  --name myDockerVMSubnet \
  --vnet-name myDockerVMVNET \
  --resource-group myResourceGroup \
  --service-endpoints Microsoft.ContainerRegistry

Pomocí příkazu az network vnet subnet show načtěte ID prostředku podsítě. Budete ho potřebovat v pozdějším kroku ke konfiguraci pravidla síťového přístupu.

az network vnet subnet show \
  --name myDockerVMSubnet \
  --vnet-name myDockerVMVNET \
  --resource-group myResourceGroup \
  --query "id"
  --output tsv

Výstup:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet

Změna výchozího síťového přístupu k registru

Registr kontejnerů Azure ve výchozím nastavení umožňuje připojení z hostitelů v jakékoli síti. Pokud chcete omezit přístup k vybrané síti, změňte výchozí akci tak, aby odepřela přístup. Nahraďte název registru v následujícím příkazu az acr update :

az acr update --name myContainerRegistry --default-action Deny

Přidání pravidla sítě do registru

Pomocí příkazu az acr network-rule add přidejte do registru pravidlo sítě, které umožňuje přístup z podsítě virtuálního počítače. V následujícím příkazu nahraďte název registru kontejneru a ID prostředku podsítě:

az acr network-rule add \
  --name mycontainerregistry \
  --subnet <subnet-resource-id>

Ověření přístupu k registru

Po několika minutách, než se konfigurace aktualizuje, ověřte, že má virtuální počítač přístup k registru kontejneru. Vytvořte připojení SSH k virtuálnímu počítači a spuštěním příkazu az acr login se přihlaste k registru.

az acr login --name mycontainerregistry

Můžete provádět operace registru, jako je spuštění docker pull pro načtení ukázkové image z registru. Nahraďte image a hodnotu značky odpovídající vašemu registru s předponou názvu přihlašovacího serveru registru (všechna malá písmena):

docker pull mycontainerregistry.azurecr.io/hello-world:v1

Docker úspěšně načítá image do virtuálního počítače.

Tento příklad ukazuje, že k privátnímu registru kontejneru můžete přistupovat prostřednictvím pravidla síťového přístupu. Registr ale není přístupný z hostitele přihlášení, který nemá nakonfigurované pravidlo síťového přístupu. Pokud se pokusíte přihlásit z jiného hostitele pomocí az acr login příkazu nebo docker login příkazu, výstup je podobný následujícímu:

Error response from daemon: login attempt to https://xxxxxxx.azurecr.io/v2/ failed with status: 403 Forbidden

Obnovení výchozího přístupu k registru

Pokud chcete obnovit registr tak, aby povoloval přístup ve výchozím nastavení, odeberte všechna nakonfigurovaná pravidla sítě. Pak nastavte výchozí akci, která povolí přístup.

Odebrání pravidel sítě

Pokud chcete zobrazit seznam pravidel sítě nakonfigurovaných pro váš registr, spusťte následující příkaz az acr network-rule list :

az acr network-rule list --name mycontainerregistry 

Pro každé pravidlo, které je nakonfigurované, spusťte příkaz az acr network-rule remove a odeberte ho. Příklad:

# Remove a rule that allows access for a subnet. Substitute the subnet resource ID.

az acr network-rule remove \
  --name mycontainerregistry \
  --subnet /subscriptions/ \
  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet

Povolit přístup

Nahraďte název registru v následujícím příkazu az acr update :

az acr update --name myContainerRegistry --default-action Allow

Vyčištění prostředků

Pokud jste vytvořili všechny prostředky Azure ve stejné skupině prostředků a už je nepotřebujete, můžete je volitelně odstranit pomocí jediného příkazu az group delete :

az group delete --name myResourceGroup

Další kroky