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. Voorbeeld:
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. Voorbeeld:
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. Voorbeeld:
# 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
- Zie Azure Private Link configureren voor een Azure-containerregister om de toegang tot een register te beperken met behulp van een privé-eindpunt in een virtueel netwerk.
- Als u registertoegangsregels wilt instellen achter een clientfirewall, raadpleegt u Regels configureren voor toegang tot een Azure-containerregister achter een firewall.