Ověřování ve službě Azure Container Registry pomocí instančních objektů

Instanční objekt Microsoft Entra můžete použít k poskytování nabízeného, vyžádané replikace nebo jiného přístupu k vašemu registru kontejneru. Pomocí instančního objektu můžete poskytnout přístup k "bezobslužné" službě a aplikacím.

Co je instanční objekt?

Instanční objekty Microsoft Entra ID poskytují přístup k prostředkům Azure v rámci vašeho předplatného. Instanční objekt si můžete představit jako identitu uživatele pro službu, kde "služba" je libovolná aplikace, služba nebo platforma, která potřebuje přístup k prostředkům. Instanční objekt s přístupovými právy vymezenými pouze na vámi zadané prostředky můžete nakonfigurovat. Potom nakonfigurujte aplikaci nebo službu tak, aby pro přístup k těmto prostředkům používala přihlašovací údaje instančního objektu.

V kontextu služby Azure Container Registry můžete vytvořit instanční objekt Microsoft Entra s oprávněními k vyžádání, nabízení a vyžádání obsahu nebo jiným oprávněním k privátnímu registru v Azure. Úplný seznam najdete v tématu Role a oprávnění služby Azure Container Registry.

Proč používat instanční objekt?

Pomocí instančního objektu Microsoft Entra můžete poskytnout omezený přístup k vašemu privátnímu registru kontejneru. Vytvořte pro každou aplikaci nebo služby různé instanční objekty s přizpůsobenými přístupovými právy k vašemu registru. A protože se můžete vyhnout sdílení přihlašovacích údajů mezi službami a aplikacemi, můžete přihlašovací údaje obměňovat nebo odvolat přístup pouze pro instanční objekt (a tím i aplikaci), kterou zvolíte.

Například nakonfigurujte webovou aplikaci tak, aby používala instanční objekt, který mu poskytuje přístup pouze k imagi pull , zatímco váš systém sestavení používá instanční objekt, který ho poskytuje jak s přístupem, tak pushpull i s přístupem. Pokud se vývoj aplikace změní, můžete obměňovat přihlašovací údaje instančního objektu, aniž by to mělo vliv na systém sestavení.

Kdy použít instanční objekt

Instanční objekt byste měli použít k poskytování přístupu k registru v bezobslužných scénářích. To znamená, že aplikace, služba nebo skript, které musí nasdílat nebo vyžádat image kontejneru automatizovaným nebo jinak bezobslužným způsobem. Příklad:

  • Přijetí změn: Nasaďte kontejnery z registru do systémů orchestrace, včetně Kubernetes, DC/OS a Docker Swarm. Z registrů kontejnerů můžete také načíst související služby Azure, jako jsou App Service, Batch, Service Fabric a další.

    Tip

    Instanční objekt se doporučuje v několika scénářích Kubernetes pro načtení imagí z registru kontejneru Azure. Pomocí služby Azure Kubernetes Service (AKS) můžete také použít automatizovaný mechanismus k ověření v cílovém registru povolením spravované identity clusteru.

    • Nabízená oznámení: Vytvářejte image kontejnerů a nasdílejte je do registru pomocí řešení kontinuální integrace a nasazování, jako jsou Azure Pipelines nebo Jenkins.

Pro individuální přístup k registru, například při ručním vyžádání image kontejneru do vývojové pracovní stanice, doporučujeme místo přístupu k registru použít vlastní identitu Microsoft Entra (například pomocí příkazu az acr login).

Vytvoření instančního objektu služby

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 instančního objektu.

Pokud chcete udělit různá oprávnění, můžete volitelně upravit --role hodnotu v příkazu az ad sp create-for-rbac . Úplný seznam rolí najdete v tématu Role a oprávnění ACR.

Po spuštění skriptu si poznamenejte ID a heslo instančního objektu. Jakmile budete mít přihlašovací údaje, můžete aplikace a služby nakonfigurovat tak, aby se ověřily v registru kontejneru jako instanční objekt.

#!/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 instanční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 instančního objektu můžete udělit přístup pull, push a pull a přístup vlastníka.

Následující skript pomocí příkazu az role assignment create udělí oprávnění k přijetí změn instančnímu objektu SERVICE_PRINCIPAL_ID , který zadáte v proměnné. --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

Ukázkové skripty

Předchozí ukázkové skripty pro Azure CLI najdete na GitHubu a také verze Azure PowerShellu:

Ověření pomocí instančního objektu

Jakmile máte instanční objekt, který jste udělili přístup k registru kontejneru, můžete jeho přihlašovací údaje nakonfigurovat pro přístup k "bezobslužné" službě a aplikacím nebo je zadat pomocí docker login příkazu. Použijte následující hodnoty:

  • Uživatelské jméno – ID aplikace instančního objektu (klienta)
  • Heslo – heslo instančního objektu (tajný klíč klienta)

Hodnota Uživatelské jméno má formát xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Tip

Heslo (tajný klíč klienta) instančního objektu můžete vygenerovat spuštěním příkazu az ad sp credential reset .

Použití přihlašovacích údajů se službami Azure

Přihlašovací údaje instančního objektu můžete použít z libovolné služby Azure, která se ověřuje pomocí registru kontejneru Azure. Pro různé scénáře používejte přihlašovací údaje instančního objektu místo přihlašovacích údajů správce registru.

Použití s přihlášením k Dockeru

Můžete spustit docker login pomocí instančního objektu. V následujícím příkladu se ID aplikace instančního objektu předává v proměnné $SP_APP_IDprostředí a heslo v proměnné $SP_PASSWD. Doporučené postupy pro správu přihlašovacích údajů Dockeru najdete v referenčních informacích k příkazům docker login .

# Log in to Docker with service principal credentials
docker login myregistry.azurecr.io --username $SP_APP_ID --password $SP_PASSWD

Po přihlášení ukládá Docker přihlašovací údaje do mezipaměti.

Použití s certifikátem

Pokud jste do instančního objektu přidali certifikát, můžete se přihlásit k Azure CLI pomocí ověřování na základě certifikátů a pak pomocí příkazu az acr login získat přístup k registru. Použití certifikátu jako tajného klíče místo hesla poskytuje dodatečné zabezpečení při použití rozhraní příkazového řádku.

Certifikát podepsaný svým držitelem je možné vytvořit při vytváření instančního objektu. Nebo přidejte jeden nebo více certifikátů do existujícího instančního objektu. Pokud například použijete některý ze skriptů v tomto článku k vytvoření nebo aktualizaci instančního objektu s právy k vyžádání nebo naházení imagí z registru, přidejte certifikát pomocí příkazu az ad sp credential reset .

Pokud chcete k přihlášení k Azure CLI použít instanční objekt s certifikátem, musí být certifikát ve formátu PEM a zahrnout privátní klíč. Pokud váš certifikát není v požadovaném formátu, použijte nástroj, například openssl ho převeďte. Když spustíte příkaz az login pro přihlášení k rozhraní příkazového řádku pomocí instančního objektu, zadejte TAKÉ ID aplikace instančního objektu a ID tenanta Active Directory. Následující příklad ukazuje tyto hodnoty jako proměnné prostředí:

az login --service-principal --username $SP_APP_ID --tenant $SP_TENANT_ID  --password /path/to/cert/pem/file

Pak spuštěním příkazu az acr login proveďte ověření pomocí registru:

az acr login --name myregistry

Rozhraní příkazového řádku používá token vytvořený při spuštění az login k ověření relace v registru.

Vytvoření instančního objektu pro scénáře napříč tenanty

Instanční objekt je možné použít také ve scénářích Azure, které vyžadují vyžádání imagí z registru kontejneru v jednom ID (tenanta) Microsoft Entra ID do služby nebo aplikace v jiné. Organizace může například spustit aplikaci v tenantovi A, která potřebuje načíst image ze sdíleného registru kontejneru v tenantovi B.

Vytvoření instančního objektu, který se může ověřit v registru kontejneru ve scénáři mezi tenanty:

  • Vytvoření víceklientové aplikace (instančního objektu) v tenantovi A
  • Zřízení aplikace v tenantovi B
  • Udělení oprávnění instančního objektu pro vyžádání z registru v tenantovi B
  • Aktualizace služby nebo aplikace v tenantovi A pro ověření pomocí nového instančního objektu

Příklad kroků najdete v tématu Vyžádání imagí z registru kontejneru do clusteru AKS v jiném tenantovi AD.

Obnovení instančního objektu

Instanční objekt se vytvoří s roční platností. Platnost můžete prodloužit o více než jeden rok nebo můžete pomocí az ad sp credential reset příkazu zadat datum vypršení platnosti podle vašeho výběru.

Další kroky

  • Podívejte se na přehled ověřování pro další scénáře ověřování pomocí registru kontejneru Azure.

  • Příklad použití služby Azure Key Vault k ukládání a načítání přihlašovacích údajů instančního objektu pro registr kontejnerů najdete v kurzu sestavení a nasazení image kontejneru pomocí ACR Tasks.