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