Share via


Verifiëren met Azure Container Registry vanuit Azure Container Instances

U kunt een Microsoft Entra-service-principal gebruiken om toegang te bieden tot uw privécontainerregisters in Azure Container Registry.

In dit artikel leert u hoe u een Microsoft Entra-service-principal maakt en configureert met pull-machtigingen voor uw register. Vervolgens start u een container in Azure Container Instances (ACI) die de installatiekopie ophaalt uit uw privéregister, met behulp van de service-principal voor verificatie.

Wanneer gebruikt u een service-principal?

U moet een service-principal gebruiken voor verificatie vanuit ACI in headless scenario's, zoals in toepassingen of services die containerinstanties maken op een geautomatiseerde of anderszins onbeheerde manier.

Als u bijvoorbeeld een geautomatiseerd script hebt dat 's nachts wordt uitgevoerd en een op taken gebaseerde containerinstantie maakt om bepaalde gegevens te verwerken, kan er een service-principal worden gebruikt met alleen pull-machtigingen voor verificatie bij het register. Vervolgens kunt u de referenties van de service-principal roteren of de toegang volledig intrekken zonder dat dit van invloed is op andere services en toepassingen.

Service-principals moeten ook worden gebruikt wanneer de gebruiker van de registerbeheerder is uitgeschakeld.

Een service-principal maken

Als u een service-principal wilt maken met toegang tot uw containerregister, voert u het volgende script uit in Azure Cloud Shell of een lokale installatie van de Azure CLI. Het script is opgemaakt voor de Bash-shell.

Werk de ACR_NAME variabele bij met de naam van het containerregister voordat u het script uitvoert. De SERVICE_PRINCIPAL_NAME waarde moet uniek zijn binnen uw Microsoft Entra-tenant. Als u een ''http://acr-service-principal' already exists.'-fout ontvangt, geeft u een andere naam op voor de service-principal.

U kunt desgewenst de --role waarde wijzigen in de opdracht az ad sp create-for-rbac als u verschillende machtigingen wilt verlenen. Zie ACR-rollen en -machtigingen voor een volledige lijst met rollen.

Nadat u het script hebt uitgevoerd, noteert u de id en het wachtwoord van de service-principal. Zodra u de referenties hebt, kunt u uw toepassingen en services configureren voor verificatie bij uw containerregister als de service-principal.

#!/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"

Een bestaande service-principal gebruiken

Als u registertoegang wilt verlenen aan een bestaande service-principal, moet u een nieuwe rol toewijzen aan de service-principal. Net als bij het maken van een nieuwe service-principal kunt u onder andere pull-, push- en pull- en eigenaartoegang verlenen.

In het volgende script wordt de opdracht az role assignment create gebruikt om pull-machtigingen te verlenen aan een service-principal die u in de SERVICE_PRINCIPAL_ID variabele opgeeft. Pas de --role waarde aan als u een ander toegangsniveau wilt verlenen.

#!/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

Verifiëren met behulp van de service-principal

Als u een container in Azure Container Instances wilt starten met behulp van een service-principal, geeft u de id op voor --registry-usernameen het bijbehorende wachtwoord voor --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>

Notitie

U wordt aangeraden de opdrachten uit te voeren in de meest recente versie van Azure Cloud Shell. Ingesteld export MSYS_NO_PATHCONV=1 voor het uitvoeren van een on-perm bash-omgeving.

Voorbeeldscripts

U vindt de voorgaande voorbeeldscripts voor Azure CLI op GitHub, evenals versies voor Azure PowerShell:

Volgende stappen

De volgende artikelen bevatten aanvullende informatie over het werken met service-principals en ACR: