Share via


Keresztregisztrációs hitelesítés egy ACR-feladatban egy Azure által felügyelt identitás használatával

Egy ACR-feladatbanengedélyezheti a felügyelt identitást az Azure-erőforrásokhoz. A feladat az identitás használatával hozzáférhet más Azure-erőforrásokhoz anélkül, hogy hitelesítő adatokat kellene megadnia vagy kezelnie.

Ebből a cikkből megtudhatja, hogyan engedélyezheti egy feladat felügyelt identitásának, hogy lekérjen egy rendszerképet a feladat futtatásához használt beállításjegyzéktől eltérő beállításjegyzékből.

Az Azure-erőforrások létrehozásához ehhez a cikkhez az Azure CLI 2.0.68-es vagy újabb verzióját kell futtatnia. A verzió azonosításához futtassa a következőt: az --version. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.

A forgatókönyv áttekintése

A példafeladat egy alaprendszerképet kér le egy másik Azure-tárolóregisztrációs adatbázisból egy alkalmazásrendszerkép létrehozásához és leküldéséhez. Az alaprendszerkép lekéréséhez konfigurálja a feladatot egy felügyelt identitással, és rendelje hozzá a megfelelő engedélyeket.

Ez a példa egy felhasználó által hozzárendelt vagy rendszer által hozzárendelt felügyelt identitást használó lépéseket mutat be. Az identitás kiválasztása a szervezet igényeitől függ.

Valós forgatókönyv esetén a szervezetek fenntarthatnak egy alaprendszerkép-készletet, amelyet az összes fejlesztői csapat használ az alkalmazások létrehozásához. Ezek az alaplemezképek egy vállalati beállításjegyzékben vannak tárolva, és minden fejlesztői csapat csak lekérési jogosultságokkal rendelkezik.

Előfeltételek

Ehhez a cikkhez két Azure-tárolóregisztrációs adatbázisra van szükség:

  • Az első beállításjegyzék használatával hozhat létre és hajthat végre ACR-feladatokat. Ebben a cikkben ennek a beállításjegyzéknek a neve myregistry.
  • A második beállításjegyzék egy alaprendszerképet üzemeltet, amelyet a feladat lemezkép létrehozásához használ. Ebben a cikkben a második beállításjegyzék neve mybaseregistry.

A későbbi lépésekben cserélje le a elemet a saját beállításjegyzék-nevére.

Ha még nem rendelkezik a szükséges Azure-tárolóregisztrációs adatbázisokkal, tekintse meg a rövid útmutatót: Privát tárolóregisztrációs adatbázis létrehozása az Azure CLI használatával. Még nem kell rendszerképeket leküldnie a beállításjegyzékbe.

Alapregisztrációs adatbázis előkészítése

Bemutató céljából egyszeri műveletként futtassa az [az acr import][az-acr-import] parancsot egy nyilvános Node.js lemezkép importálásához Docker Hub az alapregisztrációs adatbázisba. A gyakorlatban előfordulhat, hogy a szervezet egy másik csapata vagy folyamata rendszerképeket tart fenn az alapregisztrációs adatbázisban.

az acr import --name mybaseregistry \
  --source docker.io/library/node:15-alpine \
  --image baseimages/node:15-alpine 

Feladatlépések definiálása YAML-fájlban

A példában szereplő többlépéses feladat lépései egy YAML-fájlban vannak meghatározva. Hozzon létre egy nevű helloworldtask.yaml fájlt a helyi munkakönyvtárban, és illessze be a következő tartalmat. Frissítse a buildelési lépés értékét REGISTRY_NAME az alapregisztrációs adatbázis kiszolgálónevével.

version: v1.1.0
steps:
# Replace mybaseregistry with the name of your registry containing the base image
  - build: -t $Registry/hello-world:$ID  https://github.com/Azure-Samples/acr-build-helloworld-node.git#main -f Dockerfile-app --build-arg REGISTRY_NAME=mybaseregistry.azurecr.io
  - push: ["$Registry/hello-world:$ID"]

A buildelési lépés az Dockerfile-appAzure-Samples/acr-build-helloworld-node adattárban található fájlt használja egy rendszerkép létrehozásához. A --build-arg hivatkozás az alapregisztrációs adatbázisra hivatkozik az alaprendszerkép lekéréséhez. Sikeres létrehozásakor a rendszer leküldi a rendszerképet a feladat futtatásához használt beállításjegyzékbe.

1. lehetőség: Feladat létrehozása felhasználó által hozzárendelt identitással

Az ebben a szakaszban ismertetett lépések létrehoznak egy feladatot, és engedélyezik a felhasználó által hozzárendelt identitást. Ha inkább rendszer által hozzárendelt identitást szeretne engedélyezni, tekintse meg a 2. lehetőség: Feladat létrehozása rendszer által hozzárendelt identitással című témakört.

Felhasználó által hozzárendelt identitás létrehozása

Hozzon létre egy myACRTasksId nevű identitást az előfizetésében az az identity create paranccsal. Használhatja ugyanazt az erőforráscsoportot, amelyet korábban egy tárolóregisztrációs adatbázis létrehozásához használt, vagy egy másikat.

az identity create \
  --resource-group myResourceGroup \
  --name myACRTasksId

A felhasználó által hozzárendelt identitás konfigurálásához használja az az identity show parancsot az identitás erőforrás-azonosítójának, egyszerű azonosítójának és ügyfél-azonosítójának változókban való tárolásához.

# Get resource ID of the user-assigned identity
resourceID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACRTasksId \
  --query id --output tsv)

# Get principal ID of the task's user-assigned identity
principalID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACRTasksId \
  --query principalId --output tsv)

# Get client ID of the user-assigned identity
clientID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACRTasksId \
  --query clientId --output tsv)

Feladat létrehozása

Hozza létre a helloworldtask feladatot az alábbi az acr task create parancs végrehajtásával. A feladat forráskódkörnyezet nélkül fut, és a parancs a munkakönyvtárban lévő fájlra helloworldtask.yaml hivatkozik. A --assign-identity paraméter átadja a felhasználó által hozzárendelt identitás erőforrás-azonosítóját.

az acr task create \
  --registry myregistry \
  --name helloworldtask \
  --context /dev/null \
  --file helloworldtask.yaml \
  --assign-identity $resourceID

A parancs kimenetében a identity szakasz azt mutatja, hogy a típus identitása UserAssigned be van állítva a feladatban:

[...]
"identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-d12e-4760-9ab6-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRTasksId": {
        "clientId": "xxxxxxxx-f17e-4768-bb4e-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-1335-433d-bb6c-xxxxxxxxxxxx"
      }
[...]

Identitás lekérési engedélyeinek megadása az alapregisztrációs adatbázishoz

Ebben a szakaszban adja meg a felügyelt identitás engedélyeit a mybaseregistry alapregisztrációs adatbázisból való lekéréshez.

Az az acr show paranccsal kérje le az alapregisztrációs adatbázis erőforrás-azonosítóját, és tárolja egy változóban:

baseregID=$(az acr show --name mybaseregistry --query id --output tsv)

Az az role assignment create paranccsal rendelje hozzá az identitást az acrpull alapregisztrációs adatbázishoz. Ez a szerepkör csak a lemezképek beállításjegyzékből való lekéréséhez rendelkezik engedéllyel.

az role assignment create \
  --assignee $principalID \
  --scope $baseregID \
  --role acrpull

Folytassa a Célregisztrációs adatbázis hitelesítő adatainak hozzáadása feladathoz lépéshez.

2. lehetőség: Feladat létrehozása rendszer által hozzárendelt identitással

Az ebben a szakaszban ismertetett lépések létrehoznak egy feladatot, és engedélyezik a rendszer által hozzárendelt identitást. Ha inkább felhasználó által hozzárendelt identitást szeretne engedélyezni, tekintse meg az 1. lehetőséget: Feladat létrehozása felhasználó által hozzárendelt identitással.

Feladat létrehozása

Hozza létre a helloworldtask feladatot az alábbi az acr task create parancs végrehajtásával. A feladat forráskódkörnyezet nélkül fut, és a parancs a munkakönyvtárban lévő fájlra helloworldtask.yaml hivatkozik. Az --assign-identity érték nélküli paraméter engedélyezi a rendszer által hozzárendelt identitást a feladaton.

az acr task create \
  --registry myregistry \
  --name helloworldtask \
  --context /dev/null \
  --file helloworldtask.yaml \
  --assign-identity 

A parancs kimenetében a identity szakasz azt mutatja, hogy egy típusú SystemAssigned identitás van beállítva a feladatban. A principalId a feladatidentitás egyszerű azonosítója:

[...]
  "identity": {
    "principalId": "xxxxxxxx-2703-42f9-97d0-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-86f1-41af-91ab-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
  },
  "location": "eastus",
[...]

Az az acr task show paranccsal egy változóban tárolhatja a principalId azonosítót a későbbi parancsokban való használathoz. Írja be a feladat nevét és a beállításjegyzéket a következő parancsba:

principalID=$(az acr task show \
  --name <task_name> --registry <registry_name> \
  --query identity.principalId --output tsv)

Identitás lekérési engedélyeinek megadása az alapregisztrációs adatbázishoz

Ebben a szakaszban adja meg a felügyelt identitás engedélyeit a mybaseregistry alapregisztrációs adatbázisból való lekéréshez.

Az az acr show paranccsal kérje le az alapregisztrációs adatbázis erőforrás-azonosítóját, és tárolja egy változóban:

baseregID=$(az acr show --name mybaseregistry --query id --output tsv)

Az az role assignment create paranccsal rendelje hozzá az identitást az acrpull alapregisztrációs adatbázishoz. Ez a szerepkör csak a lemezképek beállításjegyzékből való lekéréséhez rendelkezik engedéllyel.

az role assignment create \
  --assignee $principalID \
  --scope $baseregID \
  --role acrpull

Célregisztrációs adatbázis hitelesítő adatainak hozzáadása a feladathoz

Most használja az az acr task credential add parancsot, amellyel engedélyezheti a feladat hitelesítését az alapregisztrációs adatbázissal az identitás hitelesítő adataival. Futtassa a feladatban engedélyezett felügyelt identitás típusának megfelelő parancsot. Ha engedélyezte a felhasználó által hozzárendelt identitást, adja meg --use-identity az identitás ügyfél-azonosítóját. Ha engedélyezte a rendszer által hozzárendelt identitást, adja meg --use-identity [system]a elemet.

# Add credentials for user-assigned identity to the task
az acr task credential add \
  --name helloworldtask \
  --registry myregistry \
  --login-server mybaseregistry.azurecr.io \
  --use-identity $clientID

# Add credentials for system-assigned identity to the task
az acr task credential add \
  --name helloworldtask \
  --registry myregistry \
  --login-server mybaseregistry.azurecr.io \
  --use-identity [system]

A feladat manuális futtatása

Annak ellenőrzéséhez, hogy a felügyelt identitást engedélyező feladat sikeresen lefut-e, manuálisan aktiválja a feladatot az az acr task run paranccsal.

az acr task run \
  --name helloworldtask \
  --registry myregistry

Ha a feladat sikeresen lefut, a kimenet a következőhöz hasonló:

Queued a run with ID: cf10
Waiting for an agent...
2019/06/14 22:47:32 Using acb_vol_dbfbe232-fd76-4ca3-bd4a-687e84cb4ce2 as the home volume
2019/06/14 22:47:39 Creating Docker network: acb_default_network, driver: 'bridge'
2019/06/14 22:47:40 Successfully set up Docker network: acb_default_network
2019/06/14 22:47:40 Setting up Docker configuration...
2019/06/14 22:47:41 Successfully set up Docker configuration
2019/06/14 22:47:41 Logging in to registry: myregistry.azurecr.io
2019/06/14 22:47:42 Successfully logged into myregistry.azurecr.io
2019/06/14 22:47:42 Logging in to registry: mybaseregistry.azurecr.io
2019/06/14 22:47:43 Successfully logged into mybaseregistry.azurecr.io
2019/06/14 22:47:43 Executing step ID: acb_step_0. Timeout(sec): 600, Working directory: '', Network: 'acb_default_network'
2019/06/14 22:47:43 Scanning for dependencies...
2019/06/14 22:47:45 Successfully scanned dependencies
2019/06/14 22:47:45 Launching container with name: acb_step_0
Sending build context to Docker daemon   25.6kB
Step 1/6 : ARG REGISTRY_NAME
Step 2/6 : FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
15-alpine: Pulling from baseimages/node
[...]
Successfully built 41b49a112663
Successfully tagged myregistry.azurecr.io/hello-world:cf10
2019/06/14 22:47:56 Successfully executed container: acb_step_0
2019/06/14 22:47:56 Executing step ID: acb_step_1. Timeout(sec): 600, Working directory: '', Network: 'acb_default_network'
2019/06/14 22:47:56 Pushing image: myregistry.azurecr.io/hello-world:cf10, attempt 1
The push refers to repository [myregistry.azurecr.io/hello-world]
[...]
2019/06/14 22:48:00 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.517011)
2019/06/14 22:48:00 The following dependencies were found:
2019/06/14 22:48:00
- image:
    registry: myregistry.azurecr.io
    repository: hello-world
    tag: cf10
    digest: sha256:611cf6e3ae3cb99b23fadcd89fa144e18aa1b1c9171ad4a0da4b62b31b4e38d1
  runtime-dependency:
    registry: mybaseregistry.azurecr.io
    repository: baseimages/node
    tag: 15-alpine
    digest: sha256:e8e92cffd464fce3be9a3eefd1b65dc9cbe2484da31c11e813a4effc6105c00f
  git:
    git-head-revision: 0f988779c97fe0bfc7f2f74b88531617f4421643

Run ID: cf10 was successful after 32s

Futtassa az az acr repository show-tags parancsot annak ellenőrzéséhez, hogy a rendszerkép létrejött-e, és sikeresen le lett-e küldve a myregistrybe:

az acr repository show-tags --name myregistry --repository hello-world --output tsv

Példa a kimenetre:

cf10

Következő lépések