Beschränken des Zugriffs auf eine Containerregistrierung mithilfe eines Dienstendpunkts in einem virtuellen Azure-Netzwerk
Das virtuelle Azure-Netzwerk (Azure Virtual Network) stellt ein sicheres, privates Netzwerk für Ihre Azure- und lokalen Ressourcen bereit. Mit einem Dienstendpunkt können Sie die öffentliche IP-Adresse Ihrer Containerregistrierung auf Ihr virtuelles Netzwerk beschränken. Dieser Endpunkt sorgt für eine optimale Datenverkehrsroute zu der Ressource über das Azure-Backbonenetzwerk. Mit jeder Anforderung wird zudem die Identität des virtuellen Netzwerks und des Subnetzes übertragen.
In diesem Artikel erfahren Sie, wie Sie einen Dienstendpunkt für die Containerregistrierung (Vorschauversion) in einem virtuellen Netzwerk konfigurieren.
Jede Registrierung unterstützt bis zu 100 Regeln für virtuelle Netzwerke.
Wichtig
Von Azure Container Registry wird jetzt Azure Private Link unterstützt. Dadurch können private Endpunkte aus einem virtuellen Netzwerk in einer Registrierung platziert werden. Auf private Endpunkte kann innerhalb des virtuellen Netzwerks über private IP-Adressen zugegriffen werden. In den meisten Netzwerkszenarien empfiehlt es sich, anstelle von Dienstendpunkten private Endpunkte zu verwenden. Die Containerregistrierung unterstützt nicht die Aktivierung von Funktionen für private Verknüpfungen und Dienstendpunkt, die von einem virtuellen Netzwerk konfiguriert sind. Daher empfehlen wir, die Liste auszuführen und die Netzwerkregeln nach Bedarf zu entfernen.
Ein Endpunkt für den Registrierungsdienst kann im Tarif Premium des Containerregistrierungsdiensts konfiguriert werden. Informationen zu den Tarifen und Einschränkungen des Registrierungsdiensts finden Sie unter Azure Container Registry-Tarife.
Einschränkungen der Vorschau
- Momentan ist für Azure Container Registry keine Weiterentwicklung von Dienstendpunkten geplant. Es wird empfohlen, stattdessen private Endpunkte zu verwenden.
- Dienstendpunkte für eine Registrierung können nicht über das Azure-Portal konfiguriert werden.
- Als Host für den Zugriff auf eine Containerregistrierung mit einem Dienstendpunkt kann nur ein Azure Kubernetes Service-Cluster oder ein virtueller Azure-Computer verwendet werden. Andere Azure-Dienste (einschließlich Azure Container Instances) werden nicht unterstützt.
- Dienstendpunkte für Azure Container Registry werden in der Azure US Government-Cloud oder in der Microsoft Azure operated by 21Vianet-Cloud nicht unterstützt.
Wichtig
In einer Containerregistrierung, die den Zugriff auf private Endpunkte, ausgewählte Subnetze oder IP-Adressen einschränkt, sind einige Funktionen möglicherweise nicht verfügbar oder erfordern eine umfangreichere Konfiguration.
- Wenn der öffentliche Netzwerkzugriff auf eine Registrierung deaktiviert ist, erfordert der Zugriff auf die Registrierung durch bestimmte vertrauenswürdige Dienste einschließlich Azure Security Center die Aktivierung einer Netzwerkeinstellung, um die Netzwerkregeln zu umgehen.
- Instanzen bestimmter Azure-Dienste, darunter Azure DevOps Services und Azure Container Instances, können derzeit nicht auf die Containerregistrierung zugreifen.
- Private Endpunkte werden derzeit nicht mit verwalteten Azure DevOps-Agents unterstützt. Sie müssen einen selbstgehosteten Agent mit Netzwerksichtverbindung zum privaten Endpunkt verwenden.
- Wenn die Registrierung einen genehmigten privaten Endpunkt hat und der öffentliche Netzwerkzugriff deaktiviert ist, können Repositorys und Tags außerhalb des virtuellen Netzwerks nicht über das Azure-Portal, die Azure CLI oder andere Tools aufgelistet werden.
Voraussetzungen
Um in diesem Artikel die Schritte an der Azure-Befehlszeilenschnittstelle (CLI) ausführen zu können, ist Azure CLI-Version 2.0.58 oder höher erforderlich. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
Sollten Sie noch nicht über eine Containerregistrierung verfügen, können Sie eine Registrierung erstellen (Premium-Tarif erforderlich) und ein Beispielimage (etwa
hello-world
) aus Docker Hub pushen. Zum Erstellen einer Registrierung können Sie das Azure-Portal oder die Azure-Befehlszeilenschnittstelle verwenden.Wenn Sie den Registrierungszugriff mithilfe eines Dienstendpunkts in einem anderen Azure-Abonnement einschränken möchten, müssen Sie den Ressourcenanbieter für Azure Container Registry in diesem Abonnement registrieren. Beispiel:
az account set --subscription <Name or ID of subscription of virtual network> az provider register --namespace Microsoft.ContainerRegistry
Erstellen eines Docker-fähigen virtuellen Computers
Verwenden Sie zu Testzwecken einen Docker-fähigen virtuellen Ubuntu-Computer für den Zugriff auf eine Azure-Containerregistrierung. Um die Microsoft Entra-Authentifizierung für die Registrierung zu verwenden, installieren Sie auch die Azure-Befehlszeilenschnittstelle auf der VM. Wenn Sie bereits über einen virtuellen Azure-Computer verfügen, überspringen Sie diesen Erstellungsschritt.
Sie können die gleiche Ressourcengruppe für Ihren virtuellen Computer und Ihre Containerregistrierung verwenden. Dieses Setup vereinfacht die Bereinigung am Übungsende, ist aber nicht erforderlich. Wenn Sie eine separate Ressourcengruppe für den virtuellen Computer und das virtuelle Netzwerk erstellen möchten, führen Sie den Befehl az group create aus. Das folgende Beispiel setzt voraus, dass Sie Umgebungsvariablen für den Ressourcengruppennamen und den Speicherort der Registrierung festgelegt haben:
az group create --name $RESOURCE_GROUP --location $REGISTRY_LOCATION
Stellen Sie nun mithilfe von az vm create einen virtuellen Azure-Standardcomputer mit Ubuntu bereit. Im folgenden Beispiel wird ein virtueller Computer namens myDockerVM erstellt:
VM_NAME=myDockerVM
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
Die Erstellung des virtuellen Computers dauert einige Minuten. Notieren Sie nach Abschluss der Befehlsausführung die von der Azure CLI angezeigte publicIpAddress
. Verwenden Sie diese Adresse, um SSH-Verbindungen mit der VM herzustellen.
Installieren von Docker auf der VM
Wenn die VM ausgeführt wird, stellen Sie eine SSH-Verbindung mit der VM her. Ersetzen Sie publicIpAddress durch die öffentliche IP-Adresse Ihrer VM.
ssh azureuser@publicIpAddress
Führen Sie die folgenden Befehle aus, um Docker auf dem virtuellen Ubuntu-Computer zu installieren:
sudo apt-get update
sudo apt install docker.io -y
Führen Sie nach der Installation den folgenden Befehl aus, um sicherzustellen, dass Docker ordnungsgemäß auf der VM ausgeführt wird:
sudo docker run -it hello-world
Ausgabe:
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
Installieren der Azure CLI
Führen Sie die in Installieren der Azure CLI mit apt beschriebenen Schritte aus, um die Azure CLI auf Ihrer Ubuntu-VM zu installieren. Beispiel:
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Beenden Sie die SSH-Verbindung.
Konfigurieren des Netzwerkzugriffs für die Registrierung
In diesem Abschnitt konfigurieren Sie Ihre Containerregistrierung für den Zugriff aus einem Subnetz in einem virtuellen Azure-Netzwerk. Es werden Schritte für die Verwendung der Azure CLI bereitgestellt.
Hinzufügen eines Dienstendpunkts zu einem Subnetz
Wenn Sie einen virtuellen Computer erstellen, erstellt Azure standardmäßig in der gleichen Ressourcengruppe ein virtuelles Netzwerk. Der Name des virtuellen Netzwerks hängt von dem Namen des virtuellen Computers ab. Wenn Sie Ihren virtuellen Computer beispielsweise MyDockerVM nennen, lautet der Standardname des virtuellen Netzwerks MyDockerVMVNET mit einem Subnetz namens MyDockerVMSubnet. Dies können Sie mithilfe des Befehls az network vnet list überprüfen:
az network vnet list \
--resource-group myResourceGroup \
--query "[].{Name: name, Subnet: subnets[0].name}"
Ausgabe:
[
{
"Name": "myDockerVMVNET",
"Subnet": "myDockerVMSubnet"
}
]
Verwenden Sie den Befehl az network vnet subnet update, um Ihrem Subnetz einen Microsoft.ContainerRegistry-Dienstendpunkt hinzuzufügen. Ersetzen Sie im folgenden Befehl die Werte durch die Namen Ihres virtuellen Netzwerks und Ihres Subnetzes:
az network vnet subnet update \
--name myDockerVMSubnet \
--vnet-name myDockerVMVNET \
--resource-group myResourceGroup \
--service-endpoints Microsoft.ContainerRegistry
Rufen Sie mit dem Befehl az network vnet subnet show die Ressourcen-ID des Subnetzes ab. Diese benötigen Sie in einem späteren Schritt zum Konfigurieren einer Netzwerkzugriffsregel.
az network vnet subnet show \
--name myDockerVMSubnet \
--vnet-name myDockerVMVNET \
--resource-group myResourceGroup \
--query "id"
--output tsv
Ausgabe:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet
Ändern des Standardnetzwerkzugriffs auf die Registrierung
Eine Azure-Containerregistrierung lässt standardmäßig Verbindungen von Hosts in beliebigen Netzwerken zu. Um den Zugriff auf ein ausgewähltes Netzwerk zu beschränken, ändern Sie die Standardaktion so, dass der Zugriff verweigert wird. Ersetzen Sie im folgenden Befehl az acr update den Wert durch den Namen Ihrer Registrierung:
az acr update --name myContainerRegistry --default-action Deny
Hinzufügen einer Netzwerkregel zur Registrierung
Fügen Sie mit dem Befehl az acr network-rule add Ihrer Registrierung eine Netzwerkregel hinzu, die den Zugriff vom Subnetz des virtuellen Computers erlaubt. Ersetzen Sie im folgenden Befehl die Werte durch den Namen der Containerregistrierung und die Ressourcen-ID des Subnetzes:
az acr network-rule add \
--name mycontainerregistry \
--subnet <subnet-resource-id>
Prüfen des Zugriffs auf die Registrierung
Warten Sie einige Minuten, bis die Konfiguration aktualisiert wurde, und prüfen Sie dann, ob der virtuelle Computer auf die Containerregistrierung zugreifen kann. Stellen Sie eine SSH-Verbindung mit Ihrem virtuellen Computer her, und melden Sie sich mit dem Befehl az acr login bei der Registrierung an.
az acr login --name mycontainerregistry
Sie können Registerierungsvorgänge ausführen (z.B. docker pull
), um mittels Pullvorgang ein Beispielimage aus der Registrierung abzurufen. Ersetzen Sie im Befehl die Werte durch den Image- und Tagwert, der Ihrer Registrierung entspricht, und verwenden Sie als Präfix den Namens des Anmeldeservers für die Registrierung (nur Kleinbuchstaben):
docker pull mycontainerregistry.azurecr.io/hello-world:v1
Docker ruft erfolgreich mittels Pullvorgang das Image auf den virtuellen Computer ab.
Dieses Beispiel zeigt, dass Sie über die Netzwerkzugriffsregel auf die private Containerregistrierung zugreifen können. Auf die Containerregistrierung kann jedoch nicht über einen Anmeldehost zugegriffen werden, für den keine Netzwerkzugriffsregel konfiguriert wurde. Wenn Sie versuchen, sich mit dem Befehl az acr login
oder docker login
von einem anderen Host anzumelden, sieht die Ausgabe in etwa wie folgt aus:
Error response from daemon: login attempt to https://xxxxxxx.azurecr.io/v2/ failed with status: 403 Forbidden
Wiederherstellen des Standardzugriffs auf die Registrierung
Zum Wiederherstellen des standardmäßigen Zugriffs auf die Registrierung müssen Sie alle konfigurierten Netzwerkregeln entfernen. Stellen Sie dann „Zugriff zulassen“ wieder als Standardaktion ein.
Entfernen von Netzwerkregeln
Um eine Liste der Netzwerkregeln anzuzeigen, die für Ihre Registrierung konfiguriert wurden, führen Sie den folgenden Befehl az acr network-rule list aus:
az acr network-rule list --name mycontainerregistry
Führen Sie für jede konfigurierte Regel den Befehl az acr network-rule remove aus, um die Regel zu entfernen. Beispiel:
# 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
Zugriff zulassen
Ersetzen Sie im folgenden Befehl az acr update den Wert durch den Namen Ihrer Registrierung:
az acr update --name myContainerRegistry --default-action Allow
Bereinigen von Ressourcen
Wenn Sie alle Azure-Ressourcen in der gleichen Ressourcengruppe erstellt haben und sie nicht mehr benötigen, können Sie die Ressourcen optional mit einem einzigen Befehl az group delete löschen:
az group delete --name myResourceGroup
Nächste Schritte
- Informationen zum Einschränken des Zugriffs auf eine Registrierung mithilfe eines privaten Endpunkts in einem virtuellen Netzwerk finden Sie unter Konfigurieren von Azure Private Link für eine Azure-Container Containerregistrierung.
- Wenn Sie Zugriffsregeln für die Registrierung hinter einer Clientfirewall einrichten müssen, finden Sie Informationen hierzu unter Konfigurieren von Regeln für den Zugriff auf eine Azure-Containerregistrierung hinter einer Firewall.