Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Instanční objekt Microsoft Entra můžete použít k zajištění přístupu k vašim registrům kontejnerů ve službě Azure Container Registry.
V tomto článku se dozvíte, jak vytvořit a nakonfigurovat instanční objekt Microsoft Entra s oprávněními k vyžádání obsahu pro váš registr. Pak spustíte kontejner ve službě Azure Container Instances (ACI), který načte jeho image z registru pomocí instančního objektu pro ověřování.
Kdy použít service principal
K ověřování z ACI v bezobslužných scénářích, jako jsou aplikace nebo služby, které automatizovaně nebo jinak bezobslužně vytvářejí instance kontejnerů, byste měli použít principál služby.
Pokud máte například automatizovaný skript, který běží v noci a vytvoří instanci kontejneru založenou na úlohách pro zpracování některých dat, může k ověření v registru použít servisní účet s oprávněními pouze pro načítání. Přihlašovací údaje principála služby pak můžete změnit nebo jeho přístup úplně odvolat, aniž by to mělo vliv na jiné služby a aplikace.
Hlavní služby by se měly používat také v případě, že je uživatel správce registru zakázán.
Vytvořit služební identitu
Pokud chcete vytvořit instanční objekt s přístupem k registru kontejneru, spusťte v Azure Cloud Shellu nebo místní instalaci Azure CLI následující skript. Skript je naformátovaný pro prostředí Bash.
Před spuštěním skriptu aktualizujte ACR_NAME proměnnou názvem vašeho registru kontejneru. Hodnota SERVICE_PRINCIPAL_NAME musí být jedinečná v rámci vašeho tenanta Microsoft Entra. Pokud se zobrazí chyba "'http://acr-service-principal' already exists.", zadejte jiný název principálu služby.
Volitelně můžete upravit --role hodnotu v příkazu az ad sp create-for-rbac a udělit tak různá oprávnění. Úplný seznam rolí najdete v přehledu oprávnění a rolí služby Azure Container Registry Entra.
Po spuštění skriptu si poznamenejte ID a heslo principála služby. Jakmile budete mít přihlašovací údaje, můžete své aplikace a služby nakonfigurovat tak, aby se autentizovaly v registru kontejneru jako služební 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"
Použití existujícího služebního hlavního objektu
Pokud chcete udělit přístup registru k existujícímu instančnímu objektu, musíte instančnímu objektu přiřadit novou roli. Stejně jako při vytváření nového služebního účtu musíte k udělení oprávnění služebnímu účtu provádět přiřazení rolí. Přehled oprávnění a rolí služby Azure Container Registry
Následující skript pomocí příkazu az role assignment create poskytne oprávnění k čtení pro service principal, který zadáte v proměnné SERVICE_PRINCIPAL_ID.
--role Upravte hodnotu, pokud chcete udělit jinou úroveň přístupu.
#!/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
Ověřování pomocí služebního principálu
Pokud chcete spustit kontejner ve službě Azure Container Instances pomocí instančního objektu, zadejte jeho ID --registry-usernamea heslo pro --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>
Poznámka:
Doporučujeme spouštět příkazy v nejnovější verzi Azure Cloud Shellu. Nastavte export MSYS_NO_PATHCONV=1 pro spouštění Bash v místním prostředí.
Ukázkové skripty
Předchozí ukázkové skripty pro Azure CLI najdete na GitHubu a verze Azure PowerShellu:
Další kroky
Následující články obsahují další podrobnosti o práci s principal služeb a ACR.