Dela via


Autentisera med Azure Container Registry från Azure Container Instances

Du kan använda microsoft entra-tjänstens huvudnamn för att ge åtkomst till dina privata containerregister i Azure Container Registry.

I den här artikeln lär du dig att skapa och konfigurera ett Microsoft Entra-tjänsthuvudnamn med pull-behörigheter till registret. Sedan startar du en container i Azure Container Instances (ACI) som hämtar avbildningen från ditt privata register med tjänstens huvudnamn för autentisering.

När du ska använda tjänstens huvudnamn

Du bör använda tjänstens huvudnamn för autentisering från ACI i huvudlösa scenarier, till exempel i program eller tjänster som skapar containerinstanser på ett automatiserat eller på annat sätt obevakat sätt.

Om du till exempel har ett automatiserat skript som körs varje natt och skapar en uppgiftsbaserad containerinstans för att bearbeta vissa data, kan den använda ett huvudnamn för tjänsten med endast pull-behörigheter för att autentisera till registret. Du kan sedan rotera tjänstens huvudnamns autentiseringsuppgifter eller återkalla dess åtkomst helt utan att påverka andra tjänster och program.

Tjänstens huvudnamn bör också användas när registeradministratörsanvändaren är inaktiverad.

Skapa ett huvudnamn för tjänsten

Om du vill skapa ett huvudnamn för tjänsten med åtkomst till ditt containerregister kör du följande skript i Azure Cloud Shell eller en lokal installation av Azure CLI. Skriptet är formaterat för Bash-gränssnittet.

Innan du kör skriptet uppdaterar du variabeln ACR_NAME med namnet på containerregistret. Värdet SERVICE_PRINCIPAL_NAME måste vara unikt i din Microsoft Entra-klientorganisation. Om du får ett "'http://acr-service-principal' already exists."-fel anger du ett annat namn för tjänstens huvudnamn.

Du kan också ändra --role värdet i kommandot az ad sp create-for-rbac om du vill bevilja olika behörigheter. En fullständig lista över roller finns i ACR-roller och behörigheter.

När du har kört skriptet noterar du tjänstens huvudnamns ID och lösenord. När du har dess autentiseringsuppgifter kan du konfigurera dina program och tjänster för att autentisera till containerregistret som tjänstens huvudnamn.

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

Använda ett befintligt huvudnamn för tjänsten

Om du vill bevilja registeråtkomst till ett befintligt huvudnamn för tjänsten måste du tilldela tjänstens huvudnamn en ny roll. Precis som när du skapar ett nytt huvudnamn för tjänsten kan du bland annat bevilja pull-, push- och pull-åtkomst och ägaråtkomst.

Följande skript använder kommandot az role assignment create för att bevilja pull-behörigheter till ett tjänsthuvudnamn som du anger i variabeln SERVICE_PRINCIPAL_ID . Justera värdet --role om du vill bevilja en annan åtkomstnivå.

#!/bin/bash
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_ID=$servicePrincipal

# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull

Autentisera med tjänstens huvudnamn

Om du vill starta en container i Azure Container Instances med hjälp av tjänstens huvudnamn anger du dess ID för --registry-usernameoch dess lösenord för --registry-password.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerregistry.azurecr.io/myimage:v1 \
    --registry-login-server mycontainerregistry.azurecr.io \
    --registry-username <service-principal-ID> \
    --registry-password <service-principal-password>

Kommentar

Vi rekommenderar att du kör kommandona i den senaste versionen av Azure Cloud Shell. Ställ in export MSYS_NO_PATHCONV=1 för att köra bash-miljö på perm.

Exempelskript

Du hittar de föregående exempelskripten för Azure CLI på GitHub, samt versioner för Azure PowerShell:

Nästa steg

Följande artiklar innehåller ytterligare information om hur du arbetar med tjänstens huvudnamn och ACR: