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.
V úloze ACR můžete povolit spravovanou identitu pro prostředky Azure. Úloha může použít identitu pro přístup k jiným prostředkům Azure, aniž by bylo nutné zadávat nebo spravovat přihlašovací údaje.
V tomto článku se dozvíte, jak povolit spravované identitě v úloze načíst image z registru, který se liší od toho, který se používá ke spuštění úlohy.
Pokud chcete vytvořit prostředky Azure, musíte spustit Azure CLI verze 2.0.68 nebo novější. Verzi zjistíte spuštěním příkazu az --version
. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Přehled scénáře
Ukázková úloha načítá základní obraz z jiného registru kontejneru Azure, aby se obraz aplikace sestavil a odeslal. Pokud chcete načíst základní image, nakonfigurujete úlohu se spravovanou identitou a přiřadíte jí příslušná oprávnění.
Tento příklad ukazuje kroky pomocí spravované identity přiřazené uživatelem nebo přiřazenou systémem. Vaše volba identity závisí na potřebách vaší organizace.
Ve skutečném scénáři může organizace udržovat sadu základních imagí používaných všemi vývojovými týmy k vytváření aplikací. Tyto základní snímky jsou uložené v podnikovém registru, přičemž každý vývojový tým má pouze práva pro stažení.
Požadavky
Pro účely tohoto článku potřebujete dva registry kontejnerů Azure:
- Pomocí prvního registru vytvoříte a spustíte úlohy ACR. V tomto článku se tento registr jmenuje myregistry.
- Druhý registr hostuje základní obraz, který se používá k plnění úlohy sestavení obrazu. V tomto článku se druhý registr jmenuje mybaseregistry.
V dalších krocích nahraďte vlastními názvy registru.
Pokud ještě nemáte potřebné registry kontejnerů Azure, projděte si rychlý start: Vytvoření privátního registru kontejneru pomocí Azure CLI. Image do registru ještě nemusíte nasdílovat.
Příprava základního registru
Pro demonstrační účely jako jednorázovou operaci spusťte příkaz [az acr import][az-acr-import] a importujte veřejnou Node.js image z Docker Hubu do základního registru. V praxi může jiný tým nebo proces v organizaci udržovat image v základním registru.
az acr import --name mybaseregistry \
--source docker.io/library/node:15-alpine \
--image baseimages/node:15-alpine
Definování kroků úkolů v souboru YAML
Kroky pro tento příklad vícekrokové úlohy jsou definovány v souboru YAML. Vytvořte soubor s názvem helloworldtask.yaml
v místním pracovním adresáři a vložte následující obsah. Aktualizujte hodnotu REGISTRY_NAME
v kroku sestavení názvem serveru vašeho základního registru.
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"]
Krok sestavení používá Dockerfile-app
soubor v úložišti Azure-Samples/acr-build-helloworld-node k sestavení image.
--build-arg
odkazuje na registr základu a načítá základní obraz. Po úspěšném sestavení se image odešle do registru použitého ke spuštění úlohy.
Možnost 1: Vytvoření úlohy s identitou přiřazenou uživatelem
Kroky v této části vytvoří úlohu a povolí identitu přiřazenou uživatelem. Pokud chcete místo toho povolit identitu přiřazenou systémem, přečtěte si téma 2: Vytvoření úlohy s identitou přiřazenou systémem.
Vytvořte identitu přiřazenou uživatelem
Pomocí příkazu az identity create vytvořte ve svém předplatném identitu myACRTasksId. Můžete použít stejnou skupinu prostředků, kterou jste použili dříve k vytvoření registru kontejneru nebo jiné skupiny prostředků.
az identity create \
--resource-group myResourceGroup \
--name myACRTasksId
Pokud chcete nakonfigurovat identitu přiřazenou uživatelem v následujících krocích, pomocí příkazu az identity show uložte ID prostředku, ID objektu zabezpečení a ID klienta v proměnných.
# 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)
Vytvořit úkol
Vytvořte úlohu helloworldtask spuštěním následujícího příkazu az acr task create . Úloha se spustí bez kontextu zdrojového kódu a příkaz odkazuje na soubor helloworldtask.yaml
v pracovním adresáři. Parametr --assign-identity
předá ID prostředku identity přiřazené uživatelem.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity $resourceID
Ve výstupu příkazu sekce identity
ukazuje, že identita typu UserAssigned
je nastavena v úloze:
[...]
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRTasksId": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
[...]
Udělení oprávnění k vyžádání identity základnímu registru
V této části dejte spravované identitě oprávnění k načtení ze základního registru mybaseregistry.
Pomocí příkazu az acr show získejte ID prostředku základního registru a uložte ho do proměnné:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Pomocí příkazu az role assignment create přiřaďte identitě správnou roli k základnímu registru. Toto přiřazení role uděluje oprávnění pouze k načtení imagí z registru.
Správná role, kterou použít pro přiřazení role, závisí na tom, jestli je registr ABAC-povolený nebo ne.
ROLE="Container Registry Repository Reader" # For ABAC-enabled registries. For non-ABAC registries, use AcrPull.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role "$ROLE"
Pokračujte přidáním přihlašovacích údajů cílového registru k úloze.
Možnost 2: Vytvoření úlohy s identitou přiřazenou systémem
Kroky v této části vytvoří úlohu a povolí identitu přiřazenou systémem. Pokud chcete místo toho povolit identitu přiřazenou uživatelem, přečtěte si téma 1: Vytvoření úlohy s identitou přiřazenou uživatelem.
Vytvořit úkol
Vytvořte úlohu helloworldtask spuštěním následujícího příkazu az acr task create . Úloha se spustí bez kontextu zdrojového kódu a příkaz odkazuje na soubor helloworldtask.yaml
v pracovním adresáři. Parametr --assign-identity
bez hodnoty povoluje identitu přiřazenou systémem pro úlohu.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity
Ve výstupu příkazu je v části identity
uvedena identita typu SystemAssigned
nastavená v úloze. Hlavní ID identity úlohy je principalId
.
[...]
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "eastus",
[...]
Pomocí příkazu az acr task show uložte hodnotu principalId do proměnné, abyste ji mohli použít v pozdějších příkazech. Název úlohy a registru nahraďte následujícím příkazem:
principalID=$(az acr task show \
--name <task_name> --registry <registry_name> \
--query identity.principalId --output tsv)
Udělení oprávnění k vyžádání identity základnímu registru
V této části dejte spravované identitě oprávnění k načtení ze základního registru mybaseregistry.
Pomocí příkazu az acr show získejte ID prostředku základního registru a uložte ho do proměnné:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Pomocí příkazu az role assignment create přiřaďte identitě správnou roli k základnímu registru. Toto přiřazení role uděluje oprávnění pouze k načtení imagí z registru.
Správná role pro použití při přiřazování závisí na tom, zda je registr ABAC-povolený nebo ne.
ROLE="Container Registry Repository Reader" # For ABAC-enabled registries. For non-ABAC registries, use AcrPull.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role "$ROLE"
Přidání přihlašovacích údajů cílového registru k úloze
Nyní použijte příkaz az acr task credential add k tomu, abyste umožnili úloze autentizovat se s primárním registrem pomocí přihlašovacích údajů identity. Spusťte příkaz odpovídající typu spravované identity, kterou jste povolili v úloze. Pokud jste povolili identitu přiřazenou uživatelem, předejte --use-identity
ID klienta identity. Pokud jste povolili identitu přiřazenou systémem, předejte --use-identity [system]
ji .
# 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]
Ruční spuštění úlohy
Pokud chcete ověřit úspěšné spuštění úlohy, ve které jste povolili spravovanou identitu, spusťte úlohu ručně pomocí příkazu az acr task run .
az acr task run \
--name helloworldtask \
--registry myregistry
Pokud se úloha úspěšně spustí, bude výstup podobný následujícímu:
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
Spuštěním příkazu az acr repository show-tags ověřte, že se image vytvořila a úspěšně se odeslala do myregistry:
az acr repository show-tags --name myregistry --repository hello-world --output tsv
Příklad výstupu:
cf10
Další kroky
- Přečtěte si další informace o povolení spravované identity v úloze ACR.
- Viz referenční informace k ACR Tasks YAML