Azure Container Registry-hitelesítés szolgáltatásnevek használatával

A Microsoft Entra szolgáltatásnévvel leküldéses, lekéréses vagy egyéb hozzáférést biztosíthat a tárolóregisztrációs adatbázishoz. Szolgáltatásnév használatával hozzáférést biztosíthat a "fej nélküli" szolgáltatásokhoz és alkalmazásokhoz.

Mi az a szolgáltatásnév?

A Microsoft Entra ID szolgáltatásnevek hozzáférést biztosítanak az Azure-erőforrásokhoz az előfizetésen belül. A szolgáltatásnév egy szolgáltatás felhasználói identitásaként is felfogható, ahol a "szolgáltatás" minden olyan alkalmazás, szolgáltatás vagy platform, amelynek hozzá kell férnie az erőforrásokhoz. A szolgáltatásnév csak a megadott erőforrásokra vonatkozó hozzáférési jogosultságokkal konfigurálható. Ezután konfigurálja az alkalmazást vagy szolgáltatást úgy, hogy a szolgáltatásnév hitelesítő adataival férhessen hozzá ezekhez az erőforrásokhoz.

Az Azure Container Registry kontextusában létrehozhat egy Microsoft Entra szolgáltatásnevet lekéréses, leküldéses és lekéréses vagy más engedélyekkel a privát regisztrációs adatbázishoz az Azure-ban. A teljes listát az Azure Container Registry szerepkörei és engedélyei című témakörben találja.

Miért érdemes szolgáltatásnevet használni?

A Microsoft Entra szolgáltatásnév használatával hatókörön belüli hozzáférést biztosíthat a privát tárolóregisztrációs adatbázishoz. Hozzon létre különböző szolgáltatásneveket az egyes alkalmazásokhoz vagy szolgáltatásokhoz, amelyek mindegyike személyre szabott hozzáférési jogosultságokkal rendelkezik a beállításjegyzékhez. Mivel elkerülheti a hitelesítő adatok szolgáltatások és alkalmazások közötti megosztását, elforgathatja a hitelesítő adatokat, vagy visszavonhatja a hozzáférést csak a választott szolgáltatásnév (és így az alkalmazás) számára.

Konfigurálja például a webalkalmazást úgy, hogy csak képhozzáférést pull biztosító szolgáltatásnevet használjon, míg a buildelési rendszer egy olyan szolgáltatásnevet használ, amely mindkettőt push és pull hozzáférést biztosít. Ha az alkalmazás fejlesztése kézenfekve változik, a szolgáltatásnév hitelesítő adatait a buildelési rendszer befolyásolása nélkül is elforgathatja.

Mikor érdemes szolgáltatásnevet használni?

Fej nélküli forgatókönyvekben a beállításjegyzék-hozzáférést szolgáltatásnévvel kell biztosítani. Ez egy olyan alkalmazás, szolgáltatás vagy szkript, amelynek automatikus vagy más felügyelet nélküli módon kell leküldenie vagy lekérnie a tárolórendszerképeket. Példa:

  • Lekérés: Tárolók üzembe helyezése a beállításjegyzékből olyan vezénylési rendszerekre, mint a Kubernetes, a DC/OS és a Docker Swarm. A tárolóregisztrációs adatbázisokból lekérheti a kapcsolódó Azure-szolgáltatásokat, például az App Service-t, a Batchet, a Service Fabricet és másokat.

    Tipp.

    Számos Kubernetes-forgatókönyvben ajánlott szolgáltatásnévvel rendszerképeket lekérni egy Azure-tárolóregisztrációs adatbázisból. Az Azure Kubernetes Service (AKS) használatával automatizált mechanizmussal is hitelesíthet egy célregisztrációs adatbázissal a fürt felügyelt identitásának engedélyezésével.

    • Leküldés: Tárolólemezképek létrehozása és leküldése egy beállításjegyzékbe folyamatos integrációs és üzembe helyezési megoldásokkal, például az Azure Pipelines vagy a Jenkins használatával.

Ha egyénileg szeretne hozzáférni egy beállításjegyzékhez, például amikor manuálisan lekér egy tárolólemezképet a fejlesztői munkaállomásra, javasoljuk, hogy a beállításjegyzék-hozzáféréshez (például az acr-bejelentkezéshez) használja a saját Microsoft Entra-identitását.

Egyszerű szolgáltatás létrehozása

A tárolóregisztrációs adatbázishoz való hozzáféréssel rendelkező egyszerű szolgáltatás létrehozásához futtassa a következő szkriptet az Azure Cloud Shellben vagy az Azure CLI helyi telepítésében. A szkript a Bash-rendszerhéjhoz van formázva.

A szkript futtatása előtt frissítse a változót ACR_NAME a tárolóregisztrációs adatbázis nevével. Az SERVICE_PRINCIPAL_NAME értéknek egyedinek kell lennie a Microsoft Entra-bérlőn belül. Ha "'http://acr-service-principal' already exists." hibaüzenetet kap, adjon meg egy másik nevet a szolgáltatásnévnek.

Ha más engedélyeket szeretne adni, tetszés szerint módosíthatja az --role az ad sp create-for-rbac parancs értékét. A szerepkörök teljes listáját az ACR-szerepkörök és -engedélyek című témakörben találja.

A szkript futtatása után jegyezze fel a szolgáltatásnév azonosítóját és jelszavát. Miután megkapta a hitelesítő adatait, konfigurálhatja az alkalmazásokat és szolgáltatásokat a tárolóregisztrációs adatbázis szolgáltatásnévként való hitelesítésére.

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

Meglévő szolgáltatásnév használata

Ahhoz, hogy a beállításjegyzék hozzáférést biztosítson egy meglévő szolgáltatásnévhez, új szerepkört kell hozzárendelnie a szolgáltatásnévhez. Az új szolgáltatásnév létrehozásához hasonlóan többek között lekéréses, leküldéses és lekéréses, valamint tulajdonosi hozzáférést is biztosíthat.

Az alábbi szkript az az role assignment create paranccsal biztosít lekérési engedélyeket a változóban SERVICE_PRINCIPAL_ID megadott szolgáltatásnévnek. Módosítsa az --role értéket, ha más hozzáférési szintet szeretne biztosítani.

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

Mintaszkriptek

A GitHubon az Azure CLI előző példaszkriptjei, valamint az Azure PowerShell verziói találhatók:

Hitelesítés a szolgáltatásnévvel

Miután rendelkezik egy szolgáltatásnévvel, amely hozzáférést adott a tárolóregisztrációs adatbázishoz, konfigurálhatja a hitelesítő adatait a "fej nélküli" szolgáltatásokhoz és alkalmazásokhoz való hozzáféréshez, vagy a parancs használatával docker login megadhatja őket. Használja a következő értékeket:

  • Felhasználónév – a szolgáltatásnév alkalmazásának (ügyfél) azonosítója
  • Jelszó – a szolgáltatásnév jelszava (titkos ügyfélkód)

A Felhasználónév érték formátuma xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Tipp.

A szolgáltatásnév jelszavát (titkos ügyfélkulcsát) az az ad sp hitelesítőadat-visszaállítási parancs futtatásával lehet újragenerálni.

Hitelesítő adatok használata az Azure-szolgáltatásokkal

A szolgáltatásnév hitelesítő adatait bármely Olyan Azure-szolgáltatásból használhatja, amely egy Azure-tárolóregisztrációs adatbázissal hitelesít. A szolgáltatásnév hitelesítő adatainak használata a beállításjegyzék rendszergazdai hitelesítő adatai helyett számos forgatókönyv esetében.

Használat Docker-bejelentkezéssel

Futtatható docker login szolgáltatásnévvel. Az alábbi példában a rendszer átadja a szolgáltatásnév alkalmazásazonosítóját a környezeti változóban $SP_APP_ID, a jelszót pedig a változóban $SP_PASSWD. A Docker hitelesítő adatainak kezelésével kapcsolatos ajánlott eljárásokért tekintse meg a Docker bejelentkezési parancsainak hivatkozását.

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

Miután bejelentkezett, a Docker gyorsítótárazza a hitelesítő adatokat.

Használat tanúsítvánnyal

Ha tanúsítványt adott hozzá a szolgáltatásnévhez, tanúsítványalapú hitelesítéssel bejelentkezhet az Azure CLI-be, majd az az acr bejelentkezési paranccsal hozzáférhet egy beállításjegyzékhez. A tanúsítvány jelszó helyett titkos kódként való használata további biztonságot nyújt a parancssori felület használatakor.

Szolgáltatásnév létrehozásakor önaláírt tanúsítvány hozható létre. Vagy adjon hozzá egy vagy több tanúsítványt egy meglévő szolgáltatásnévhez. Ha például a jelen cikkben szereplő szkriptek egyikével hoz létre vagy frissít egy szolgáltatásnevet, amely jogosult képek lekérésére vagy leküldésére egy beállításjegyzékből, adjon hozzá egy tanúsítványt az az ad sp hitelesítőadat-visszaállítási paranccsal.

Ha a szolgáltatásnevet tanúsítványsal szeretné használni az Azure CLI-be való bejelentkezéshez, a tanúsítványnak PEM formátumban kell lennie, és tartalmaznia kell a titkos kulcsot. Ha a tanúsítvány nem a szükséges formátumban van, használjon egy eszközt, például openssl konvertálja. Amikor az az login futtatásával bejelentkezik a parancssori felületre a szolgáltatásnév használatával, adja meg a szolgáltatásnév alkalmazásazonosítóját és az Active Directory-bérlő azonosítóját is. Az alábbi példa környezeti változóként jeleníti meg ezeket az értékeket:

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

Ezután futtassa az az acr-bejelentkezést a beállításjegyzékkel való hitelesítéshez:

az acr login --name myregistry

A parancssori felület a futtatáskor az login létrehozott jogkivonatot használja a munkamenet beállításjegyzékben való hitelesítéséhez.

Szolgáltatásnév létrehozása bérlők közötti forgatókönyvekhez

A szolgáltatásnév olyan Azure-forgatókönyvekben is használható, amelyekhez lemezképek lekérése szükséges egy tárolóregisztrációs adatbázisból az egyik Microsoft Entra-azonosítóban (bérlőben) egy másik szolgáltatásba vagy alkalmazásba. Előfordulhat például, hogy egy szervezet olyan alkalmazást futtat az A bérlőben, amely le kell húznia egy lemezképet a B bérlő megosztott tárolóregisztrációs adatbázisából.

Olyan szolgáltatásnév létrehozása, amely egy tárolóregisztrációs adatbázissal hitelesíthető bérlőközi forgatókönyvben:

  • Több-bérlős alkalmazás (szolgáltatásnév) létrehozása az A bérlőben
  • Az alkalmazás kiépítése a B bérlőben
  • A szolgáltatásnév engedélyeinek megadása a beállításjegyzékből való lekéréshez a B bérlőben
  • A szolgáltatás vagy alkalmazás frissítése az A bérlőben az új szolgáltatásnév használatával történő hitelesítéshez

Példa a lemezképek lekérésére egy tárolóregisztrációs adatbázisból egy másik AD-bérlőben lévő AKS-fürtre.

Szolgáltatásnév megújítása

A szolgáltatásnév egyéves érvényességgel jön létre. Lehetősége van arra, hogy az érvényességi időt egy évnél tovább meghosszabbítsa, vagy a parancs használatával megadhatja a az ad sp credential reset választott lejárati dátumot.

Következő lépések