Anslut privat till ett Azure-containerregister med Azure Private Link

Begränsa åtkomsten till ett register genom att tilldela privata IP-adresser för virtuella nätverk till registerslutpunkterna och använda Azure Private Link. Nätverkstrafik mellan klienterna i det virtuella nätverket och registrets privata slutpunkter passerar det virtuella nätverket och en privat länk i Microsofts stamnätverk, vilket eliminerar exponering från det offentliga Internet. Private Link ger även åtkomst till privata register lokalt via privat Peering i Azure ExpressRoute eller en VPN-gateway.

Du kan konfigurera DNS-inställningar för registrets privata slutpunkter, så att inställningarna matchar registrets allokerade privata IP-adress. Med DNS-konfigurationen kan klienter och tjänster i nätverket fortsätta att komma åt registret vid registrets fullständigt kvalificerade domännamn, till exempel myregistry.azurecr.io.

Den här artikeln visar hur du konfigurerar en privat slutpunkt för registret med hjälp av Azure Portal (rekommenderas) eller Azure CLI. Den här funktionen är tillgänglig på tjänstnivån Premium containerregister. Information om registertjänstnivåer och gränser finns i Azure Container Registry nivåer.

Viktigt

Vissa funktioner kanske inte är tillgängliga eller kräver 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åtkomst för vissa betrodda tjänster, inklusive Azure Security Center, aktivera en nätverksinställning för att kringgå nätverksreglerna.
  • Instanser av vissa Azure-tjänster, inklusive Azure DevOps Services, kan för närvarande inte komma åt containerregistret.
  • Om registret har en godkänd privat slutpunkt och åtkomst till offentligt nätverk är inaktiverat kan lagringsplatser och taggar inte visas utanför det virtuella nätverket med hjälp av Azure Portal, Azure CLI eller andra verktyg.

Anteckning

Från och med oktober 2021 tillåter nya containerregister högst 200 privata slutpunkter. Register som skapades tidigare tillåter högst 10 privata slutpunkter. Använd kommandot az acr show-usage för att se gränsen för registret.

Förutsättningar

  • Ett virtuellt nätverk och undernät där du kan konfigurera den privata slutpunkten. Om det behövs skapar du ett nytt virtuellt nätverk och undernät.
  • För testning rekommenderar vi att du konfigurerar en virtuell dator i det virtuella nätverket. Anvisningar för hur du skapar en virtuell testdator för åtkomst till registret finns i Skapa en Docker-aktiverad virtuell dator.
  • Om du vill använda Azure CLI-stegen i den här artikeln rekommenderas Azure CLI version 2.6.0 eller senare. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. Eller kör i Azure Cloud Shell.
  • Om du inte redan har ett containerregister skapar du ett (Premium nivå krävs) och importerar en offentlig exempelavbildning, till exempel mcr.microsoft.com/hello-world från Microsoft Container Registry. Använd till exempel Azure Portal eller Azure CLI för att skapa ett register.

Registrera containerregisterresursprovider

Om du vill konfigurera registeråtkomst med hjälp av en privat länk i en annan Azure-prenumeration eller klientorganisation måste du registrera resursprovidern för Azure Container Registry i den prenumerationen. Använd Azure Portal, Azure CLI eller andra verktyg.

Exempel:

az account set --subscription <Name or ID of subscription of private link>

az provider register --namespace Microsoft.ContainerRegistry

Konfigurera en privat slutpunkt när du skapar ett register eller lägg till en privat slutpunkt i ett befintligt register.

Skapa en privat slutpunkt – nytt register

  1. När du skapar ett register i portalen går du till fliken Grundläggande i SKUoch väljer Premium.

  2. Välj fliken Nätverk.

  3. I Nätverksanslutning väljer du Privat slutpunkt>+ Lägg till.

  4. Ange eller välj följande information:

    Inställning Värde
    Prenumeration Välj din prenumeration.
    Resursgrupp Ange namnet på en befintlig grupp eller skapa en ny.
    Name Ange ett unikt namn.
    Registerunderresurs Välj register
    Nätverk
    Virtuellt nätverk Välj det virtuella nätverket för den privata slutpunkten. Exempel: myDockerVMVNET.
    Undernät Välj undernätet för den privata slutpunkten. Exempel: myDockerVMSubnet.
    Privat DNS integrering
    Integrera med privat DNS-zon Välj Ja.
    Privat DNS-zon Välj (ny) privatelink.azurecr.io
  5. Konfigurera de återstående registerinställningarna och välj sedan Granska + skapa.

Create registry with private endpoint

Din privata länk är nu konfigurerad och klar att användas.

Skapa en privat slutpunkt – befintligt register

  1. Gå till containerregistret i portalen.

  2. Under Inställningar väljer du Nätverk.

  3. På fliken Privata slutpunkter väljer du + Privat slutpunkt. Add private endpoint to registry

  4. På fliken Grundläggande anger eller väljer du följande information:

    Inställning Värde
    Projektinformation
    Prenumeration Välj din prenumeration.
    Resursgrupp Ange namnet på en befintlig grupp eller skapa en ny.
    Instansinformation
    Name Ange ett namn.
    Region Välj en region.
  5. Välj Nästa: Resurs.

  6. Ange eller välj följande information:

    Inställning Värde
    Anslutningsmetod I det här exemplet väljer du Anslut till en Azure-resurs i min katalog.
    Prenumeration Välj din prenumeration.
    Resurstyp Välj Microsoft.ContainerRegistry/registries.
    Resurs Välj namnet på registret
    Målunderresurs Välj register
  7. Välj Nästa: Konfiguration.

  8. Ange eller välj informationen:

    Inställning Värde
    Nätverk
    Virtuellt nätverk Välj det virtuella nätverket för den privata slutpunkten
    Undernät Välj undernätet för den privata slutpunkten
    Privat DNS integration
    Integrera med privat DNS-zon Välj Ja.
    Privat DNS-zon Välj (ny) privatelink.azurecr.io
  9. Välj Granska + skapa. Du tas till sidan Granska + skapa där Azure verifierar din konfiguration.

  10. När du ser ett meddelande som anger att valideringen har slutförts klickar du på Skapa.

Bekräfta slutpunktskonfiguration

När den privata slutpunkten har skapats visas DNS-inställningar i den privata zonen med inställningarna för privata slutpunkter i portalen:

  1. Gå till containerregistret i portalen och välj Inställningar > Nätverk.
  2. På fliken Privata slutpunkter väljer du den privata slutpunkt som du skapade.
  3. Välj DNS-konfiguration.
  4. Granska länkinställningarna och anpassade DNS-inställningar.

Endpoint DNS settings in portal

Konfigurera privat slutpunkt – CLI

Azure CLI-exemplen i den här artikeln använder följande miljövariabler. Du behöver namnen på ett befintligt containerregister, virtuellt nätverk och undernät för att konfigurera en privat slutpunkt. Lämpliga ersättningsvärden för din miljö. Alla exempel är formaterade för Bash-gränssnittet:

REGISTRY_NAME=<container-registry-name>
REGISTRY_LOCATION=<container-registry-location> # Azure region such as westeurope where registry created
RESOURCE_GROUP=<resource-group-name> # Resource group for your existing virtual network and subnet
NETWORK_NAME=<virtual-network-name>
SUBNET_NAME=<subnet-name>

Inaktivera nätverksprinciper i undernätet

Inaktivera nätverksprinciper som nätverkssäkerhetsgrupper i undernätet för den privata slutpunkten. Uppdatera undernätskonfigurationen med az network vnet subnet update:

az network vnet subnet update \
 --name $SUBNET_NAME \
 --vnet-name $NETWORK_NAME \
 --resource-group $RESOURCE_GROUP \
 --disable-private-endpoint-network-policies

Konfigurera den privata DNS-zonen

Skapa en privat Azure DNS-zon för den privata Azure-containerregisterdomänen. I senare steg skapar du DNS-poster för registerdomänen i den här DNS-zonen. Mer information finns i DNS-konfigurationsalternativ senare i den här artikeln.

Om du vill använda en privat zon för att åsidosätta standard-DNS-matchningen för azure-containerregistret måste zonen namnges privatelink.azurecr.io. Kör följande az network private-dns zone create-kommando för att skapa den privata zonen:

az network private-dns zone create \
  --resource-group $RESOURCE_GROUP \
  --name "privatelink.azurecr.io"

Kör az network private-dns link vnet create för att associera din privata zon med det virtuella nätverket. I det här exemplet skapas en länk med namnet myDNSLink.

az network private-dns link vnet create \
  --resource-group $RESOURCE_GROUP \
  --zone-name "privatelink.azurecr.io" \
  --name MyDNSLink \
  --virtual-network $NETWORK_NAME \
  --registration-enabled false

Skapa en privat registerslutpunkt

I det här avsnittet skapar du registrets privata slutpunkt i det virtuella nätverket. Hämta först resurs-ID:t för registret:

REGISTRY_ID=$(az acr show --name $REGISTRY_NAME \
  --query 'id' --output tsv)

Kör kommandot az network private-endpoint create för att skapa registrets privata slutpunkt.

I följande exempel skapas slutpunkten myPrivateEndpoint och tjänstanslutningen myConnection. Om du vill ange en containerregisterresurs för slutpunkten skickar du --group-ids registry:

az network private-endpoint create \
    --name myPrivateEndpoint \
    --resource-group $RESOURCE_GROUP \
    --vnet-name $NETWORK_NAME \
    --subnet $SUBNET_NAME \
    --private-connection-resource-id $REGISTRY_ID \
    --group-ids registry \
    --connection-name myConnection

Hämta IP-konfiguration för slutpunkt

Om du vill konfigurera DNS-poster hämtar du IP-konfigurationen för den privata slutpunkten. Associerad med den privata slutpunktens nätverksgränssnitt i det här exemplet är två privata IP-adresser för containerregistret: en för själva registret och en för registrets dataslutpunkt. Om registret är geo-replikerat associeras ytterligare en IP-adress med varje replik.

Kör först az network private-endpoint show för att fråga den privata slutpunkten efter nätverksgränssnittets ID:

NETWORK_INTERFACE_ID=$(az network private-endpoint show \
  --name myPrivateEndpoint \
  --resource-group $RESOURCE_GROUP \
  --query 'networkInterfaces[0].id' \
  --output tsv)

Följande az network nic show-kommandon hämtar privata IP-adresser och FQDN:er för containerregistret och registrets dataslutpunkt:

REGISTRY_PRIVATE_IP=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIpAddress" \
  --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REGISTRY_LOCATION'].privateIpAddress" \
  --output tsv)

# An FQDN is associated with each IP address in the IP configurations

REGISTRY_FQDN=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateLinkConnectionProperties.fqdns" \
  --output tsv)

DATA_ENDPOINT_FQDN=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REGISTRY_LOCATION'].privateLinkConnectionProperties.fqdns" \
  --output tsv)

Ytterligare slutpunkter för geo-repliker

Om registret är geo-replikerat frågar du efter den ytterligare dataslutpunkten för varje registerreplik. I regionen eastus kan du till exempel:

REPLICA_LOCATION=eastus
GEO_REPLICA_DATA_ENDPOINT_PRIVATE_IP=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REPLICA_LOCATION'].privateIpAddress" \
  --output tsv) 

GEO_REPLICA_DATA_ENDPOINT_FQDN=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REPLICA_LOCATION'].privateLinkConnectionProperties.fqdns" \
  --output tsv)

Skapa DNS-poster i den privata zonen

Följande kommandon skapar DNS-poster i den privata zonen för registerslutpunkten och dess dataslutpunkt. Om du till exempel har ett register med namnet myregistry i regionen westeurope är myregistry.azurecr.io slutpunktsnamnen och myregistry.westeurope.data.azurecr.io.

Kör först az network private-dns record-set a create för att skapa tomma A-postuppsättningar för registrets slutpunkt och dataslutpunkt:

az network private-dns record-set a create \
  --name $REGISTRY_NAME \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP

# Specify registry region in data endpoint name
az network private-dns record-set a create \
  --name ${REGISTRY_NAME}.${REGISTRY_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP

Kör kommandot az network private-dns record-set a add-record för att skapa A-posterna för registerslutpunkten och dataslutpunkten:

az network private-dns record-set a add-record \
  --record-set-name $REGISTRY_NAME \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP \
  --ipv4-address $REGISTRY_PRIVATE_IP

# Specify registry region in data endpoint name
az network private-dns record-set a add-record \
  --record-set-name ${REGISTRY_NAME}.${REGISTRY_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP \
  --ipv4-address $DATA_ENDPOINT_PRIVATE_IP

Ytterligare poster för geo-repliker

Om registret är geo-replikerat skapar du ytterligare DNS-inställningar för varje replik. Fortsätter exemplet i regionen eastus :

az network private-dns record-set a create \
  --name ${REGISTRY_NAME}.${REPLICA_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP

az network private-dns record-set a add-record \
  --record-set-name ${REGISTRY_NAME}.${REPLICA_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP \
  --ipv4-address $GEO_REPLICA_DATA_ENDPOINT_PRIVATE_IP

Den privata länken är nu konfigurerad och klar att användas.

Inaktivera offentlig åtkomst

I många scenarier inaktiverar du registeråtkomst från offentliga nätverk. Den här konfigurationen förhindrar att klienter utanför det virtuella nätverket når registerslutpunkterna.

Inaktivera offentlig åtkomst – portalen

  1. Gå till containerregistret i portalen och välj Inställningar > Nätverk.
  2. På fliken Offentlig åtkomst går du till Tillåt åtkomst till offentligt nätverk och väljer Inaktiverad. Välj sedan Spara.

Inaktivera offentlig åtkomst – CLI

Anteckning

Om den offentliga åtkomsten az acr build är inaktiverad fungerar inte längre kommandona.

Om du vill inaktivera offentlig åtkomst med hjälp av Azure CLI kör du az acr update och anger --public-network-enabled till false.

az acr update --name $REGISTRY_NAME --public-network-enabled false

az acr build Kör med privat slutpunkt och privat register

Överväg följande alternativ för att köra korrekt az acr build .

Anteckning

När du inaktiverar åtkomst till offentligt nätverk här az acr build fungerar inte längre kommandon.

  1. Tilldela en dedikerad agentpool.
  2. Om agentpoolen inte är tillgänglig i regionen lägger du till den regionala Azure Container Registry Service Tag IPv4 i brandväggens åtkomstregler.
  3. Skapa en ACR-uppgift med en hanterad identitet och aktivera betrodda tjänster för åtkomst till nätverksbegränsad ACR.

Du bör kontrollera att resurserna i undernätet för den privata slutpunkten ansluter till registret över en privat IP-adress och har rätt privat DNS-zonintegrering.

Om du vill verifiera den privata länkanslutningen ansluter du till den virtuella dator som du har konfigurerat i det virtuella nätverket.

Kör ett verktyg som nslookup eller dig för att leta upp IP-adressen för registret via den privata länken. Ett exempel:

dig $REGISTRY_NAME.azurecr.io

Exempelutdata visar registrets IP-adress i undernätets adressutrymme:

[...]
; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> myregistry.azurecr.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52155
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;myregistry.azurecr.io.         IN      A

;; ANSWER SECTION:
myregistry.azurecr.io.  1783    IN      CNAME   myregistry.privatelink.azurecr.io.
myregistry.privatelink.azurecr.io. 10 IN A      10.0.0.7

[...]

Jämför det här resultatet med den offentliga IP-adressen i dig utdata för samma register över en offentlig slutpunkt:

[...]
;; ANSWER SECTION:
myregistry.azurecr.io.	2881	IN	CNAME	myregistry.privatelink.azurecr.io.
myregistry.privatelink.azurecr.io. 2881	IN CNAME xxxx.xx.azcr.io.
xxxx.xx.azcr.io.	300	IN	CNAME	xxxx-xxx-reg.trafficmanager.net.
xxxx-xxx-reg.trafficmanager.net. 300 IN	CNAME	xxxx.westeurope.cloudapp.azure.com.
xxxx.westeurope.cloudapp.azure.com. 10	IN A 20.45.122.144

[...]

Kontrollera också att du kan utföra registeråtgärder från den virtuella datorn i nätverket. Skapa en SSH-anslutning till den virtuella datorn och kör az acr login för att logga in i registret. Beroende på konfigurationen av den virtuella datorn kan du behöva prefixa följande kommandon med sudo.

az acr login --name $REGISTRY_NAME

Utför registeråtgärder som docker pull att hämta en exempelbild från registret. Ersätt hello-world:v1 med en avbildning och tagg som är lämplig för registret, prefixet med namnet på registerinloggningsservern (alla gemener):

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

Docker hämtar avbildningen till den virtuella datorn.

Hantera privata slutpunktsanslutningar

Hantera ett registers privata slutpunktsanslutningar med hjälp av Azure Portal eller med hjälp av kommandon i kommandogruppen az acr private-endpoint-connection. Åtgärderna omfattar att godkänna, ta bort, lista, avvisa eller visa information om ett registers privata slutpunktsanslutningar.

Om du till exempel vill visa en lista över privata slutpunktsanslutningar för ett register kör du kommandot az acr private-endpoint-connection list . Ett exempel:

az acr private-endpoint-connection list \
  --registry-name $REGISTRY_NAME 

När du konfigurerar en privat slutpunktsanslutning med hjälp av stegen i den här artikeln accepterar registret automatiskt anslutningar från klienter och tjänster som har Azure RBAC-behörigheter i registret. Du kan konfigurera slutpunkten så att den kräver manuellt godkännande av anslutningar. Information om hur du godkänner och avvisar privata slutpunktsanslutningar finns i Hantera en privat slutpunktsanslutning.

Viktigt

Om du tar bort en privat slutpunkt från ett register kan du för närvarande också behöva ta bort det virtuella nätverkets länk till den privata zonen. Om länken inte tas bort kan du se ett fel som liknar unresolvable host.

DNS-konfigurationsalternativ

Den privata slutpunkten i det här exemplet integreras med en privat DNS-zon som är associerad med ett grundläggande virtuellt nätverk. Den här konfigurationen använder den Azure-tillhandahållna DNS-tjänsten direkt för att matcha registrets offentliga FQDN till dess privata IP-adresser i det virtuella nätverket.

Privat länk stöder ytterligare DNS-konfigurationsscenarier som använder den privata zonen, inklusive med anpassade DNS-lösningar. Du kan till exempel ha en anpassad DNS-lösning distribuerad i det virtuella nätverket eller lokalt i ett nätverk som du ansluter till det virtuella nätverket med hjälp av en VPN-gateway eller Azure ExpressRoute.

För att matcha registrets offentliga FQDN till den privata IP-adressen i dessa scenarier måste du konfigurera en vidarebefordrare på servernivå till Azure DNS-tjänsten (168.63.129.16). Exakta konfigurationsalternativ och steg beror på dina befintliga nätverk och DNS. Exempel finns i DNS-konfiguration för privata Slutpunkter i Azure.

Viktigt

Om du för hög tillgänglighet har skapat privata slutpunkter i flera regioner rekommenderar vi att du använder en separat resursgrupp i varje region och placerar det virtuella nätverket och den associerade privata DNS-zonen i den. Den här konfigurationen förhindrar också oförutsägbar DNS-matchning som orsakas av delning av samma privata DNS-zon.

Konfigurera DNS-poster manuellt

I vissa scenarier kan du behöva konfigurera DNS-poster manuellt i en privat zon i stället för att använda den privata zonen som tillhandahålls av Azure. Se till att skapa poster för var och en av följande slutpunkter: registerslutpunkten, registrets dataslutpunkt och dataslutpunkten för eventuella ytterligare regionala repliker. Om alla poster inte har konfigurerats kan registret vara oåtkomligt.

Viktigt

Om du senare lägger till en ny replik måste du lägga till en ny DNS-post manuellt för dataslutpunkten i den regionen. Om du till exempel skapar en replik av myregistry på northeurope-platsen lägger du till en post för myregistry.northeurope.data.azurecr.io.

De FQDN:er och privata IP-adresser som du behöver för att skapa DNS-poster är associerade med den privata slutpunktens nätverksgränssnitt. Du kan hämta den här informationen med hjälp av Azure Portal eller Azure CLI.

När du har skapat DNS-poster kontrollerar du att registrets FQDN matchar korrekt till sina respektive privata IP-adresser.

Rensa resurser

Om du vill rensa dina resurser i portalen går du till din resursgrupp. När resursgruppen har lästs in klickar du på Ta bort resursgrupp för att ta bort resursgruppen och resurserna som lagras där.

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 $RESOURCE_GROUP

Nästa steg