Toegang tot een containerregister beperken met behulp van een service-eindpunt in een virtueel Azure-netwerk

Azure Virtual Network biedt beveiligde, privénetwerken voor uw Azure- en on-premises resources. Met een service-eindpunt kunt u het openbare IP-adres van uw containerregister alleen naar uw virtuele netwerk beveiligen. Dit eindpunt geeft verkeer een optimale route naar de resource via het Azure backbone-netwerk. De identiteiten van het virtuele netwerk en het subnet worden ook met elke aanvraag verzonden.

In dit artikel wordt beschreven hoe u een service-eindpunt voor het containerregister (preview) configureert in een virtueel netwerk.

Elk register ondersteunt maximaal 100 regels voor virtuele netwerken.

Belangrijk

Azure Container Registry biedt nu ondersteuning voor Azure Private Link, waardoor privé-eindpunten van een virtueel netwerk in een register kunnen worden geplaatst. Privé-eindpunten zijn toegankelijk vanuit het virtuele netwerk met behulp van privé-IP-adressen. U wordt aangeraden privé-eindpunten te gebruiken in plaats van service-eindpunten in de meeste netwerkscenario's. Het containerregister biedt geen ondersteuning voor het inschakelen van functies voor privékoppelingen en service-eindpunten die zijn geconfigureerd vanuit een virtueel netwerk. Daarom raden we u aan de lijst uit te voeren en zo nodig de netwerkregels te verwijderen.

Het configureren van een registerservice-eindpunt is beschikbaar in de servicelaag Premium-containerregister . Zie Azure Container Registry-servicelagen voor informatie over registerservicelagen en -limieten.

Preview-beperkingen

  • Toekomstige ontwikkeling van service-eindpunten voor Azure Container Registry is momenteel niet gepland. U wordt aangeraden in plaats daarvan privé-eindpunten te gebruiken.
  • U kunt Azure Portal niet gebruiken om service-eindpunten in een register te configureren.
  • Alleen een Azure Kubernetes Service-cluster of virtuele Azure-machine kan worden gebruikt als host voor toegang tot een containerregister met behulp van een service-eindpunt. Andere Azure-services, waaronder Azure Container Instances, worden niet ondersteund.
  • Service-eindpunten voor Azure Container Registry worden niet ondersteund in de Azure US Government-cloud of Microsoft Azure beheerd door de 21Vianet-cloud.

Belangrijk

Sommige functionaliteit is mogelijk niet beschikbaar of vereist meer configuratie in een containerregister waarmee de toegang tot privé-eindpunten, geselecteerde subnetten of IP-adressen wordt beperkt.

  • Wanneer openbare netwerktoegang tot een register is uitgeschakeld, moet voor registertoegang door bepaalde vertrouwde services , waaronder Azure Security Center, een netwerkinstelling worden ingeschakeld om de netwerkregels te omzeilen.
  • Zodra de openbare netwerktoegang is uitgeschakeld, hebben exemplaren van bepaalde Azure-services, waaronder Azure DevOps Services, momenteel geen toegang tot het containerregister.
  • Privé-eindpunten worden momenteel niet ondersteund met door Azure DevOps beheerde agents. U moet een zelf-hostende agent gebruiken met een netwerklijn van zicht op het privé-eindpunt.
  • Als het register een goedgekeurd privé-eindpunt heeft en openbare netwerktoegang is uitgeschakeld, kunnen opslagplaatsen en tags niet buiten het virtuele netwerk worden weergegeven met behulp van Azure Portal, Azure CLI of andere hulpprogramma's.

Vereisten

  • Als u de Azure CLI-stappen in dit artikel wilt gebruiken, is Azure CLI versie 2.0.58 of hoger vereist. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

  • Als u nog geen containerregister hebt, maakt u er een (Premium-laag vereist) en pusht u een voorbeeldinstallatiekopieën, zoals hello-world vanuit Docker Hub. Gebruik bijvoorbeeld Azure Portal of de Azure CLI om een register te maken.

  • Als u de toegang tot het register wilt beperken met behulp van een service-eindpunt in een ander Azure-abonnement, registreert u de resourceprovider voor Azure Container Registry in dat abonnement. Bijvoorbeeld:

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

Een virtuele machine met Docker maken

Gebruik voor testdoeleinden een Ubuntu-VM met Docker-functionaliteit voor toegang tot een Azure-containerregister. Als u Microsoft Entra-verificatie voor het register wilt gebruiken, installeert u ook de Azure CLI op de VIRTUELE machine. Als u al een virtuele Azure-machine hebt, kunt u deze aanmaakstap overslaan.

U kunt dezelfde resourcegroep gebruiken voor uw virtuele machine en het containerregister. Deze instelling vereenvoudigt het opschonen aan het einde, maar is niet vereist. Als u ervoor kiest om een afzonderlijke resourcegroep te maken voor de virtuele machine en het virtuele netwerk, voert u az group create uit. In het volgende voorbeeld wordt ervan uitgegaan dat u omgevingsvariabelen hebt ingesteld voor de naam en registerlocatie van de resourcegroep:

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

Implementeer nu een standaard virtuele Ubuntu Azure-machine met az vm create. In het volgende voorbeeld wordt een VIRTUELE machine met de naam myDockerVM gemaakt.

VM_NAME=myDockerVM

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

Het duurt enkele minuten voordat de virtuele machine wordt gemaakt. Wanneer de opdracht is voltooid, noteert u de publicIpAddress weergave van de Azure CLI. Gebruik dit adres om SSH-verbindingen met de virtuele machine te maken.

Docker installeren op de VIRTUELE machine

Nadat de VM is uitgevoerd, maakt u een SSH-verbinding met de virtuele machine. Vervang publicIpAddress door het openbare IP-adres van uw VIRTUELE machine.

ssh azureuser@publicIpAddress

Voer de volgende opdrachten uit om Docker te installeren op de Ubuntu-VM:

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

Voer na de installatie de volgende opdracht uit om te controleren of Docker correct wordt uitgevoerd op de VM:

sudo docker run -it hello-world

Uitvoer:

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

De Azure CLI installeren

Volg de stappen in Azure CLI installeren met apt om de Azure CLI op uw virtuele Ubuntu-machine te installeren. Bijvoorbeeld:

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

Sluit de SSH-verbinding af.

Netwerktoegang voor register configureren

In deze sectie configureert u uw containerregister om toegang vanuit een subnet in een virtueel Azure-netwerk toe te staan. Er worden stappen gegeven met behulp van de Azure CLI.

Een service-eindpunt toevoegen aan een subnet

Wanneer u een virtuele machine maakt, maakt Azure standaard een virtueel netwerk in dezelfde resourcegroep. De naam van het virtuele netwerk is gebaseerd op de naam van de virtuele machine. Als u bijvoorbeeld de naam van uw virtuele machine myDockerVM noemt, is de standaardnaam van het virtuele netwerk myDockerVMVNET, met een subnet met de naam myDockerVMSubnet. Controleer dit met behulp van de opdracht az network vnet list :

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

Uitvoer:

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

Gebruik de opdracht az network vnet subnet update om een Microsoft.ContainerRegistry-service-eindpunt toe te voegen aan uw subnet. Vervang de namen van uw virtuele netwerk en subnet in de volgende opdracht:

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

Gebruik de opdracht az network vnet show show om de resource-id van het subnet op te halen. U hebt dit in een latere stap nodig om een netwerktoegangsregel te configureren.

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

Uitvoer:

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

Standaardnetwerktoegang tot register wijzigen

Standaard staat een Azure-containerregister verbindingen van hosts op elk netwerk toe. Als u de toegang tot een geselecteerd netwerk wilt beperken, wijzigt u de standaardactie om de toegang te weigeren. Vervang de naam van het register in de volgende az acr update-opdracht :

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

Netwerkregel toevoegen aan register

Gebruik de opdracht az acr network-rule add om een netwerkregel toe te voegen aan uw register die toegang toestaat vanuit het subnet van de VIRTUELE machine. Vervang de naam van het containerregister en de resource-id van het subnet in de volgende opdracht:

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

Toegang tot het register controleren

Nadat u enkele minuten hebt gewacht totdat de configuratie is bijgewerkt, controleert u of de VM toegang heeft tot het containerregister. Maak een SSH-verbinding met uw virtuele machine en voer de opdracht az acr login uit om u aan te melden bij uw register.

az acr login --name mycontainerregistry

U kunt registerbewerkingen uitvoeren, zoals uitvoeren docker pull om een voorbeeldinstallatiekopie op te halen uit het register. Vervang een installatiekopieën en tagwaarde die geschikt is voor uw register, voorafgegaan door de naam van de aanmeldingsserver van het register (allemaal kleine letters):

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

Docker haalt de installatiekopie naar de VIRTUELE machine.

In dit voorbeeld ziet u dat u toegang hebt tot het privécontainerregister via de netwerktoegangsregel. Het register kan echter niet worden geopend vanaf een aanmeldingshost waarvoor geen netwerktoegangsregel is geconfigureerd. Als u zich probeert aan te melden bij een andere host met behulp van de az acr login opdracht of docker login opdracht, ziet de uitvoer er ongeveer als volgt uit:

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

Standaardtoegang tot register herstellen

Als u het register wilt herstellen om standaard toegang toe te staan, verwijdert u alle netwerkregels die zijn geconfigureerd. Stel vervolgens de standaardactie in om toegang toe te staan.

Netwerkregels verwijderen

Voer de volgende opdracht az acr network-rule list uit om een lijst met netwerkregels te zien die zijn geconfigureerd voor uw register:

az acr network-rule list --name mycontainerregistry 

Voer voor elke regel die is geconfigureerd de opdracht az acr network-rule remove uit om deze te verwijderen. Bijvoorbeeld:

# 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

Toegang toestaan

Vervang de naam van het register in de volgende az acr update-opdracht :

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

Resources opschonen

Als u alle Azure-resources in dezelfde resourcegroep hebt gemaakt en deze niet meer nodig hebt, kunt u de resources desgewenst verwijderen met één az group delete-opdracht :

az group delete --name myResourceGroup

Volgende stappen