Sdílet prostřednictvím


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. Pomocí koncového bodu služby můžete omezit veřejnou IP adresu registru kontejneru na 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.

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. Ve většině síťových scénářů doporučujeme místo koncových bodů služby používat privátní koncové body. Privátní koncové body jsou přístupné z virtuální sítě pomocí privátních IP adres. Registr kontejnerů nepodporuje povolení funkcí privátního propojení i koncového bodu služby nakonfigurovaných z virtuální sítě. Spusťte seznam a podle potřeby odeberte 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 Funkce a omezení skladové položky kontejneru Azure. Každý registr Premium podporuje maximálně 100 pravidel virtuální sítě.

Omezení verze Preview

Při používání koncových bodů služby za účelem omezení přístupu k registru kontejneru mějte na paměti následující aktuální omezení:

  • 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é

Pokud registr kontejneru omezuje přístup k privátním koncovým bodům, vybraným podsítím nebo IP adresám, nemusí být některé funkce dostupné nebo vyžadují více konfigurace.

  • Když zakážete přístup k registru veřejné sítě, budou mít určité důvěryhodné služby, včetně programu Microsoft Defender for Cloud, přístup k registru pouze v případě, že povolíte nastavení sítě, aby se pravidla sítě obešla.
  • Jakmile zakážete přístup k veřejné síti, instance některých služeb Azure, včetně Azure DevOps Services, nemají přístup k registru kontejneru.
  • Privátní koncové body se v současné době nepodporují u agentů spravovaných Azure DevOps. K privátnímu koncovému bodu potřebujete použít agenta v místním prostředí s dohledem sítě.
  • Pokud má registr schválený privátní koncový bod a zakážete přístup k veřejné síti, nemůžete vypsat úložiště a značky 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, potřebujete 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 jeden (vyžaduje se úroveň Premium) a nahrajte ukázkový obraz, například hello-world, z Docker Hubu. 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í.

Stejnou skupinu prostředků můžete použít pro virtuální počítač a registr kontejneru. Toto nastavení zjednodušuje vyčištění na konci, ale nevyžaduje se. Pokud pro virtuální počítač a virtuální síť vytvoříte samostatnou skupinu prostředků, 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č 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 výstup zobrazený 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

Měl by se zobrazit výstup potvrzující, že instalace vypadá správně.

Nainstalujte 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

Pomocí těchto kroků nakonfigurujte registr kontejneru tak, aby umožňoval přístup z podsítě ve virtuální síti Azure 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. Pomocí příkazu az network vnet list ověřte tuto konfiguraci:

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 získáte ID prostředku podsítě. Toto ID potřebujete 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 ověřte ho ve vašem 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 obraz a hodnotu tagu, které odpovídají vašemu registru, před názvem 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 ověřit z jiného hostitele pomocí az acr login příkazu nebo docker login příkazu, zobrazí se výstup 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, odeberte všechna pravidla sítě, která jste nakonfigurovali. 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é jste nakonfigurovali, 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 celou skupinu prostředků odstranit pomocí příkazu az group delete :

az group delete --name myResourceGroup