Begränsa åtkomsten till ett containerregister med hjälp av en tjänstslutpunkt i ett virtuellt Azure-nätverk

Azure Virtual Network tillhandahåller säkra, privata nätverk för dina Azure-resurser och lokala resurser. Med en tjänstslutpunkt kan du skydda containerregistrets offentliga IP-adress till endast ditt virtuella nätverk. Den här slutpunkten ger trafik en optimal väg till resursen via Azure-stamnätverket. Identiteterna för det virtuella nätverket och undernätet överförs också med varje begäran.

Den här artikeln visar hur du konfigurerar en tjänstslutpunkt för containerregister (förhandsversion) i ett virtuellt nätverk.

Varje register stöder högst 100 regler för virtuella nätverk.

Viktigt!

Azure Container Registry stöder nu Azure Private Link, vilket gör att privata slutpunkter från ett virtuellt nätverk kan placeras i ett register. Privata slutpunkter är tillgängliga från det virtuella nätverket med hjälp av privata IP-adresser. Vi rekommenderar att du använder privata slutpunkter i stället för tjänstslutpunkter i de flesta nätverksscenarier. Containerregistret stöder inte aktivering av funktioner för både privat länk och tjänstslutpunkt som konfigurerats från ett virtuellt nätverk. Därför rekommenderar vi att du kör listan och tar bort nätverksregler efter behov.

Det finns en tillgänglig konfiguration av en tjänstslutpunkt för registertjänsten i Premium-containerregistret . Information om registertjänstnivåer och gränser finns i Tjänstnivåer för Azure Container Registry.

Begränsningar i förhandsversionen

  • Framtida utveckling av tjänstslutpunkter för Azure Container Registry planeras inte för närvarande. Vi rekommenderar att du använder privata slutpunkter i stället.
  • Du kan inte använda Azure-portalen för att konfigurera tjänstslutpunkter i ett register.
  • Endast ett Azure Kubernetes Service-kluster eller en virtuell Azure-dator kan användas som värd för att få åtkomst till ett containerregister med hjälp av en tjänstslutpunkt. Andra Azure-tjänster, inklusive Azure Container Instances, stöds inte.
  • Tjänstslutpunkter för Azure Container Registry stöds inte i Azure US Government-molnet eller Microsoft Azure som drivs av 21Vianet-molnet.

Viktigt!

Vissa funktioner kan vara otillgängliga eller kräva mer konfiguration i ett containerregister som begränsar åtkomsten till privata slutpunkter, valda undernät eller IP-adresser.

  • När åtkomsten till ett offentligt nätverk till ett register är inaktiverad måste registeråtkomsten för vissa betrodda tjänster , inklusive Azure Security Center, aktivera en nätverksinställning för att kringgå nätverksreglerna.
  • När den offentliga nätverksåtkomsten har inaktiverats kan instanser av vissa Azure-tjänster, inklusive Azure DevOps Services, för närvarande inte komma åt containerregistret.
  • Privata slutpunkter stöds för närvarande inte med Azure DevOps-hanterade agenter. Du måste använda en lokalt installerad agent med nätverkslinje för den privata slutpunkten.
  • Om registret har en godkänd privat slutpunkt och åtkomsten till det offentliga nätverket är inaktiverad kan lagringsplatser och taggar inte visas utanför det virtuella nätverket med hjälp av Azure-portalen, Azure CLI eller andra verktyg.

Förutsättningar

  • Om du vill använda Azure CLI-stegen i den här artikeln krävs Azure CLI version 2.0.58 eller senare. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

  • Om du inte redan har ett containerregister skapar du ett (Premium-nivå krävs) och push-överför en exempelavbildning, till exempel hello-world från Docker Hub. Använd till exempel Azure-portalen eller Azure CLI för att skapa ett register.

  • Om du vill begränsa registeråtkomsten med hjälp av en tjänstslutpunkt i en annan Azure-prenumeration registrerar du resursprovidern för Azure Container Registry i den prenumerationen. Till exempel:

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

Skapa en Docker-aktiverad virtuell dator

I testsyfte använder du en Docker-aktiverad virtuell Ubuntu-dator för att få åtkomst till ett Azure-containerregister. Om du vill använda Microsoft Entra-autentisering i registret installerar du även Azure CLI på den virtuella datorn. Om du redan har en virtuell Azure-dator hoppar du över det här skapandesteget.

Du kan använda samma resursgrupp för den virtuella datorn och containerregistret. Den här konfigurationen förenklar rensningen i slutet men krävs inte. Om du väljer att skapa en separat resursgrupp för den virtuella datorn och det virtuella nätverket kör du az group create. I följande exempel förutsätter vi att du har angett miljövariabler för resursgruppens namn och registerplats:

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

Distribuera nu en standard virtuell Ubuntu Azure-dator med az vm create. I följande exempel skapas en virtuell dator med namnet myDockerVM.

VM_NAME=myDockerVM

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

Det tar några minuter att skapa den virtuella datorn. När kommandot har slutförts noterar du det publicIpAddress som visas av Azure CLI. Använd den här adressen för att skapa SSH-anslutningar till den virtuella datorn.

Installera Docker på den virtuella datorn

När den virtuella datorn har körts skapar du en SSH-anslutning till den virtuella datorn. Ersätt publicIpAddress med den offentliga IP-adressen för den virtuella datorn.

ssh azureuser@publicIpAddress

Kör följande kommandon för att installera Docker på den virtuella Ubuntu-datorn:

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

Efter installationen kör du följande kommando för att kontrollera att Docker körs korrekt på den virtuella datorn:

sudo docker run -it hello-world

Utdata:

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

Installera Azure CLI

Följ stegen i Installera Azure CLI med apt för att installera Azure CLI på din virtuella Ubuntu-dator. Till exempel:

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

Avsluta SSH-anslutningen.

Konfigurera nätverksåtkomst för registret

I det här avsnittet konfigurerar du containerregistret så att det tillåter åtkomst från ett undernät i ett virtuellt Azure-nätverk. Steg tillhandahålls med hjälp av Azure CLI.

Lägga till en tjänstslutpunkt i ett undernät

När du skapar en virtuell dator skapar Azure som standard ett virtuellt nätverk i samma resursgrupp. Namnet på det virtuella nätverket baseras på namnet på den virtuella datorn. Om du till exempel ger den virtuella datorn namnet myDockerVM är standardnamnet för det virtuella nätverket myDockerVMVNET, med ett undernät med namnet myDockerVMSubnet. Kontrollera detta med kommandot az network vnet list :

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

Utdata:

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

Använd kommandot az network vnet subnet update för att lägga till en tjänstslutpunkt för Microsoft.ContainerRegistry i undernätet. Ersätt namnen på ditt virtuella nätverk och undernät med följande kommando:

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

Använd kommandot az network vnet show för att hämta resurs-ID:t för undernätet. Du behöver detta i ett senare steg för att konfigurera en nätverksåtkomstregel.

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

Utdata:

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

Ändra standardnätverksåtkomst till registret

Som standard tillåter ett Azure-containerregister anslutningar från värdar i alla nätverk. Om du vill begränsa åtkomsten till ett valt nätverk ändrar du standardåtgärden för att neka åtkomst. Ersätt namnet på registret i följande az acr update-kommando :

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

Lägga till nätverksregel i registret

Använd kommandot az acr network-rule add för att lägga till en nätverksregel i registret som tillåter åtkomst från den virtuella datorns undernät. Ersätt containerregistrets namn och resurs-ID för undernätet i följande kommando:

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

Kontrollera åtkomsten till registret

När du har väntat några minuter på att konfigurationen ska uppdateras kontrollerar du att den virtuella datorn har åtkomst till containerregistret. Skapa en SSH-anslutning till den virtuella datorn och kör kommandot az acr login för att logga in i registret.

az acr login --name mycontainerregistry

Du kan utföra registeråtgärder som att köra docker pull för att hämta en exempelbild från registret. Ersätt ett avbildnings- och taggvärde som är lämpligt för registret, prefixet med namnet på registerinloggningsservern (alla gemener):

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

Docker hämtar avbildningen till den virtuella datorn.

Det här exemplet visar att du kan komma åt det privata containerregistret via nätverksåtkomstregeln. Registret kan dock inte nås från en inloggningsvärd som inte har konfigurerat någon nätverksåtkomstregel. Om du försöker logga in från en annan värd med kommandot az acr login eller docker login kommandot liknar utdata följande:

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

Återställa standardåtkomst till registret

Om du vill återställa registret för att tillåta åtkomst som standard tar du bort alla nätverksregler som har konfigurerats. Ange sedan standardåtgärden för att tillåta åtkomst.

Ta bort nätverksregler

Om du vill se en lista över nätverksregler som konfigurerats för registret kör du följande az acr network-rule list-kommando :

az acr network-rule list --name mycontainerregistry 

För varje regel som har konfigurerats kör du kommandot az acr network-rule remove för att ta bort den. Till exempel:

# 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

Tillåt åtkomst

Ersätt namnet på registret i följande az acr update-kommando :

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

Rensa resurser

Om du har skapat alla Azure-resurser i samma resursgrupp och inte längre behöver dem kan du ta bort resurserna med hjälp av kommandot az group delete :

az group delete --name myResourceGroup

Nästa steg