Beschränken des Zugriffs auf eine Containerregistrierung mithilfe eines Dienstendpunkts in einem virtuellen Azure-NetzwerkRestrict access to a container registry using a service endpoint in an Azure virtual network

Das virtuelle Azure-Netzwerk (Azure Virtual Network) stellt ein sicheres, privates Netzwerk für Ihre Azure- und lokalen Ressourcen bereit.Azure Virtual Network provides secure, private networking for your Azure and on-premises resources. Mit einem Dienstendpunkt können Sie die öffentliche IP-Adresse Ihrer Containerregistrierung auf Ihr virtuelles Netzwerk beschränken.A service endpoint allows you to secure your container registry's public IP address to only your virtual network. Dieser Endpunkt sorgt für eine optimale Datenverkehrsroute zu der Ressource über das Azure-Backbonenetzwerk.This endpoint gives traffic an optimal route to the resource over the Azure backbone network. Mit jeder Anforderung wird zudem die Identität des virtuellen Netzwerks und des Subnetzes übertragen.The identities of the virtual network and the subnet are also transmitted with each request.

In diesem Artikel erfahren Sie, wie Sie einen Dienstendpunkt für die Containerregistrierung (Vorschauversion) in einem virtuellen Netzwerk konfigurieren.This article shows how to configure a container registry service endpoint (preview) in a virtual network.

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.Azure Container Registry now supports Azure Private Link, enabling private endpoints from a virtual network to be placed on a registry. Auf private Endpunkte kann innerhalb des virtuellen Netzwerks über private IP-Adressen zugegriffen werden.Private endpoints are accessible from within the virtual network, using private IP addresses. In den meisten Netzwerkszenarien empfiehlt es sich, anstelle von Dienstendpunkten private Endpunkte zu verwenden.We recommend using private endpoints instead of service endpoints in most network scenarios.

Ein Endpunkt für den Registrierungsdienst kann im Tarif Premium des Containerregistrierungsdiensts konfiguriert werden.Configuring a registry service endpoint is available in the Premium container registry service tier. Informationen zu den Tarifen und Einschränkungen des Registrierungsdiensts finden Sie unter Azure Container Registry-Tarife.For information about registry service tiers and limits, see Azure Container Registry service tiers.

Einschränkungen der VorschauPreview limitations

  • Momentan ist für Azure Container Registry keine Weiterentwicklung von Dienstendpunkten geplant.Future development of service endpoints for Azure Container Registry isn't currently planned. Es wird empfohlen, stattdessen private Endpunkte zu verwenden.We recommend using private endpoints instead.
  • Dienstendpunkte für eine Registrierung können nicht über das Azure-Portal konfiguriert werden.You can't use the Azure portal to configure service endpoints on a registry.
  • 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.Only an Azure Kubernetes Service cluster or Azure virtual machine can be used as a host to access a container registry using a service endpoint. Andere Azure-Dienste (einschließlich Azure Container Instances) werden nicht unterstützt.Other Azure services including Azure Container Instances aren't supported.
  • Pro Registrierung werden maximal 100 Netzwerkzugriffsregeln unterstützt.Each registry supports a maximum of 100 network access rules.
  • Dienstendpunkte für Azure Container Registry werden in der Azure US Government-Cloud oder in der Azure China-Cloud nicht unterstützt.Service endpoints for Azure Container Registry aren't supported in the Azure US Government cloud or Azure China cloud.

VoraussetzungenPrerequisites

  • 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.To use the Azure CLI steps in this article, Azure CLI version 2.0.58 or later is required. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.If you need to install or upgrade, see Install 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.If you don't already have a container registry, create one (Premium tier required) and push a sample image such as hello-world from Docker Hub. Zum Erstellen einer Registrierung können Sie das Azure-Portal oder die Azure-Befehlszeilenschnittstelle verwenden.For example, use the Azure portal or the Azure CLI to create a registry.

  • 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.If you want to restrict registry access using a service endpoint in a different Azure subscription, register the resource provider for Azure Container Registry in that subscription. Beispiel:For example:

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

Erstellen eines Docker-fähigen virtuellen ComputersCreate a Docker-enabled virtual machine

Verwenden Sie zu Testzwecken einen Docker-fähigen virtuellen Ubuntu-Computer für den Zugriff auf eine Azure-Containerregistrierung.For test purposes, use a Docker-enabled Ubuntu VM to access an Azure container registry. Damit für die Registrierung die Azure Active Directory-Authentifizierung verwendet werden kann, installieren Sie auch die Azure-Befehlszeilenschnittstelle (CLI) auf dem virtuellen Computer.To use Azure Active Directory authentication to the registry, also install the Azure CLI on the VM. Wenn Sie bereits über einen virtuellen Azure-Computer verfügen, überspringen Sie diesen Erstellungsschritt.If you already have an Azure virtual machine, skip this creation step.

Sie können die gleiche Ressourcengruppe für Ihren virtuellen Computer und Ihre Containerregistrierung verwenden.You may use the same resource group for your virtual machine and your container registry. Dieses Setup vereinfacht die Bereinigung am Übungsende, ist aber nicht erforderlich.This setup simplifies clean-up at the end but isn't required. 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.If you choose to create a separate resource group for the virtual machine and virtual network, run az group create. Das folgende Beispiel setzt voraus, dass Sie Umgebungsvariablen für den Ressourcengruppennamen und den Speicherort der Registrierung festgelegt haben:The following example assumes you've set environment variables for the resource group name and registry location:

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

Stellen Sie nun mithilfe von az vm create einen virtuellen Azure-Standardcomputer mit Ubuntu bereit.Now deploy a default Ubuntu Azure virtual machine with az vm create. Im folgenden Beispiel wird ein virtueller Computer namens myDockerVM erstellt:The following example creates a VM named myDockerVM.

VM_NAME=myDockerVM

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

Die Erstellung des virtuellen Computers dauert einige Minuten.It takes a few minutes for the VM to be created. Notieren Sie nach Abschluss der Befehlsausführung die von der Azure CLI angezeigte publicIpAddress.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. Verwenden Sie diese Adresse, um SSH-Verbindungen mit der VM herzustellen.Use this address to make SSH connections to the VM.

Installieren von Docker auf der VMInstall Docker on the VM

Wenn die VM ausgeführt wird, stellen Sie eine SSH-Verbindung mit der VM her.After the VM is running, make an SSH connection to the VM. Ersetzen Sie publicIpAddress durch die öffentliche IP-Adresse Ihrer VM.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

Führen Sie die folgenden Befehle aus, um Docker auf dem virtuellen Ubuntu-Computer zu installieren:Run the following commands to install Docker on the Ubuntu VM:

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:After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

Ausgabe:Output:

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

Installieren der Azure CLIInstall the 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.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. Beispiel:For example:

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

Beenden Sie die SSH-Verbindung.Exit the SSH connection.

Konfigurieren des Netzwerkzugriffs für die RegistrierungConfigure network access for registry

In diesem Abschnitt konfigurieren Sie Ihre Containerregistrierung für den Zugriff aus einem Subnetz in einem virtuellen Azure-Netzwerk.In this section, configure your container registry to allow access from a subnet in an Azure virtual network. Die Schritte werden jeweils bei Verwendung der Azure-Befehlszeilenschnittstelle (CLI) bzw. des Azure-Portals erläutert.Equivalent steps using the Azure CLI and Azure portal are provided.

Zulassen des Zugriffs von einem virtuellen Netzwerk – Befehlszeilenschnittstelle (CLI)Allow access from a virtual network - CLI

Hinzufügen eines Dienstendpunkts zu einem SubnetzAdd a service endpoint to a subnet

Wenn Sie einen virtuellen Computer erstellen, erstellt Azure standardmäßig in der gleichen Ressourcengruppe ein virtuelles Netzwerk.When you create a VM, Azure by default creates a virtual network in the same resource group. Der Name des virtuellen Netzwerks hängt von dem Namen des virtuellen Computers ab.The name of the virtual network is based on the name of the virtual machine. Wenn Sie Ihren virtuellen Computer beispielsweise MyDockerVM nennen, lautet der Standardname des virtuellen Netzwerks MyDockerVMVNET mit einem Subnetz namens MyDockerVMSubnet.For example, if you name your virtual machine myDockerVM, the default virtual network name is myDockerVMVNET, with a subnet named myDockerVMSubnet. Dies können Sie im Azure-Portal oder mithilfe des Befehls az network vnet list überprüfen:Verify this in the Azure portal or by using the az network vnet list command:

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

Ausgabe:Output:

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

Verwenden Sie den Befehl az network vnet subnet update, um Ihrem Subnetz einen Microsoft.ContainerRegistry-Dienstendpunkt hinzuzufügen.Use the az network vnet subnet update command to add a Microsoft.ContainerRegistry service endpoint to your subnet. Ersetzen Sie im folgenden Befehl die Werte durch die Namen Ihres virtuellen Netzwerks und Ihres Subnetzes:Substitute the names of your virtual network and subnet in the following command:

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.Use the az network vnet subnet show command to retrieve the resource ID of the subnet. Diese benötigen Sie in einem späteren Schritt zum Konfigurieren einer Netzwerkzugriffsregel.You need this in a later step to configure a network access rule.

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

Ausgabe:Output:

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

Ändern des Standardnetzwerkzugriffs auf die RegistrierungChange default network access to registry

Eine Azure-Containerregistrierung lässt standardmäßig Verbindungen von Hosts in beliebigen Netzwerken zu.By default, an Azure container registry allows connections from hosts on any network. Um den Zugriff auf ein ausgewähltes Netzwerk zu beschränken, ändern Sie die Standardaktion so, dass der Zugriff verweigert wird.To limit access to a selected network, change the default action to deny access. Ersetzen Sie im folgenden Befehl az acr update den Wert durch den Namen Ihrer Registrierung:Substitute the name of your registry in the following az acr update command:

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

Hinzufügen einer Netzwerkregel zur RegistrierungAdd network rule to registry

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.Use the az acr network-rule add command to add a network rule to your registry that allows access from the VM's subnet. Ersetzen Sie im folgenden Befehl die Werte durch den Namen der Containerregistrierung und die Ressourcen-ID des Subnetzes:Substitute the container registry's name and the resource ID of the subnet in the following command:

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

Prüfen des Zugriffs auf die RegistrierungVerify access to the registry

Warten Sie einige Minuten, bis die Konfiguration aktualisiert wurde, und prüfen Sie dann, ob der virtuelle Computer auf die Containerregistrierung zugreifen kann.After waiting a few minutes for the configuration to update, verify that the VM can access the container registry. Stellen Sie eine SSH-Verbindung mit Ihrem virtuellen Computer her, und melden Sie sich mit dem Befehl az acr login bei der Registrierung an.Make an SSH connection to your VM, and run the az acr login command to login to your registry.

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.You can perform registry operations such as run docker pull to pull a sample image from the registry. 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):Substitute an image and tag value appropriate for your registry, prefixed with the registry login server name (all lowercase):

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

Docker ruft erfolgreich mittels Pullvorgang das Image auf den virtuellen Computer ab.Docker successfully pulls the image to the VM.

Dieses Beispiel zeigt, dass Sie über die Netzwerkzugriffsregel auf die private Containerregistrierung zugreifen können.This example demonstrates that you can access the private container registry through the network access rule. Auf die Containerregistrierung kann jedoch nicht über einen Anmeldehost zugegriffen werden, für den keine Netzwerkzugriffsregel konfiguriert wurde.However, the registry can't be accessed from a login host that doesn't have a network access rule configured. 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:If you attempt to login from another host using the az acr login command or docker login command, output is similar to the following:

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

Wiederherstellen des Standardzugriffs auf die RegistrierungRestore default registry access

Zum Wiederherstellen des standardmäßigen Zugriffs auf die Registrierung müssen Sie alle konfigurierten Netzwerkregeln entfernen.To restore the registry to allow access by default, remove any network rules that are configured. Stellen Sie dann „Zugriff zulassen“ wieder als Standardaktion ein.Then set the default action to allow access. Die Schritte werden jeweils bei Verwendung der Azure-Befehlszeilenschnittstelle (CLI) bzw. des Azure-Portals erläutert.Equivalent steps using the Azure CLI and Azure portal are provided.

Wiederherstellen des Standardzugriffs auf die Registrierung – Befehlszeilenschnittstelle (CLI)Restore default registry access - CLI

Entfernen von NetzwerkregelnRemove network rules

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:To see a list of network rules configured for your registry, run the following az acr network-rule list command:

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.For each rule that is configured, run the az acr network-rule remove command to remove it. Beispiel:For example:

# 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 zulassenAllow access

Ersetzen Sie im folgenden Befehl az acr update den Wert durch den Namen Ihrer Registrierung:Substitute the name of your registry in the following az acr update command:

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

Bereinigen von RessourcenClean up resources

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:If you created all the Azure resources in the same resource group and no longer need them, you can optionally delete the resources by using a single az group delete command:

az group delete --name myResourceGroup

Navigieren Sie zum Bereinigen von Ressourcen im Azure-Portal zu Ihrer Ressourcengruppe (z.B.„myResourceGroup“).To clean up your resources in the portal, navigate to the myResourceGroup resource group. Klicken Sie nach dem Laden der Ressourcengruppe auf Ressourcengruppe löschen, um die Ressourcengruppe und die dort gespeicherten Ressourcen zu entfernen.Once the resource group is loaded, click on Delete resource group to remove the resource group and the resources stored there.

Nächste SchritteNext steps