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
- Budoucí vývoj koncových bodů služby pro Azure Container Registry se v současné době neplánuje. Místo toho doporučujeme používat privátní koncové body .
- Ke konfiguraci koncových bodů služby v registru nemůžete použít Azure Portal.
- Jako hostitele pro přístup k registru kontejneru pomocí koncového bodu služby je možné použít pouze cluster Azure Kubernetes Service nebo virtuální počítač Azure. Jiné služby Azure, včetně služby Azure Container Instances, se nepodporují.
- Koncové body služeb pro Azure Container Registry se nepodporují v cloudu Azure US Government ani v Microsoft Azure provozovaném cloudem 21Vianet.
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ů.
Požadavky
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
- Pokud chcete omezit přístup k registru pomocí privátního koncového bodu ve virtuální síti, přečtěte si téma Konfigurace služby Azure Private Link pro registr kontejnerů Azure.
- Pokud potřebujete nastavit pravidla přístupu registru za bránou firewall klienta, přečtěte si téma Konfigurace pravidel pro přístup k registru kontejneru Azure za bránou firewall.