Verificatie tussen registers in een ACR-taak met behulp van een door Azure beheerde identiteit
In een ACR-taak kunt u een beheerde identiteit inschakelen voor Azure-resources. De taak kan de identiteit gebruiken om toegang te krijgen tot andere Azure-resources, zonder referenties op te geven of te beheren.
In dit artikel leert u hoe u een beheerde identiteit in een taak kunt inschakelen om een installatiekopie op te halen uit een ander register dan de installatiekopie die wordt gebruikt om de taak uit te voeren.
Als u de Azure-resources wilt maken, moet u voor dit artikel azure CLI versie 2.0.68 of hoger uitvoeren. Voer az --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
Overzicht van scenario
Met de voorbeeldtaak wordt een basisinstallatiekopie opgehaald uit een ander Azure-containerregister om een toepassingsinstallatiekopie te bouwen en te pushen. Als u de basisinstallatiekopie wilt ophalen, configureert u de taak met een beheerde identiteit en wijst u de juiste machtigingen eraan toe.
In dit voorbeeld ziet u stappen met behulp van een door de gebruiker toegewezen of door het systeem toegewezen beheerde identiteit. Uw keuze voor identiteit is afhankelijk van de behoeften van uw organisatie.
In een praktijkscenario kan een organisatie een set basisinstallatiekopieën onderhouden die door alle ontwikkelteams worden gebruikt om hun toepassingen te bouwen. Deze basisinstallatiekopieën worden opgeslagen in een bedrijfsregister, waarbij elk ontwikkelteam alleen pull-rechten heeft.
Vereisten
Voor dit artikel hebt u twee Azure-containerregisters nodig:
- U gebruikt het eerste register om ACR-taken te maken en uit te voeren. In dit artikel heeft dit register de naam myregistry.
- Het tweede register fungeert als host voor een basisinstallatiekopieën die voor de taak worden gebruikt om een installatiekopieën te bouwen. In dit artikel heet het tweede register mybaseregistry.
Vervang in latere stappen door uw eigen registernamen.
Als u nog niet over de benodigde Azure-containerregisters beschikt, raadpleegt u quickstart: Een privécontainerregister maken met behulp van de Azure CLI. U hoeft nog geen installatiekopieën naar het register te pushen.
Basisregister voorbereiden
Voor demonstratiedoeleinden voert u [az acr import][az-acr-import] uit om een openbare Node.js-installatiekopie van Docker Hub te importeren in uw basisregister. In de praktijk kan een ander team of proces in de organisatie installatiekopieën in het basisregister onderhouden.
az acr import --name mybaseregistry \
--source docker.io/library/node:15-alpine \
--image baseimages/node:15-alpine
Taakstappen definiëren in YAML-bestand
De stappen voor deze voorbeeldtaak met meerdere stappen worden gedefinieerd in een YAML-bestand. Maak een bestand met de naam helloworldtask.yaml
in uw lokale werkmap en plak de volgende inhoud. Werk de waarde van REGISTRY_NAME
in de buildstap bij met de servernaam van uw basisregister.
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"]
De buildstap maakt gebruik van het Dockerfile-app
bestand in de opslagplaats Azure-Samples/acr-build-helloworld-node om een installatiekopie te bouwen. Het --build-arg
verwijst naar het basisregister om de basisinstallatiekopie op te halen. Wanneer de installatiekopie is gemaakt, wordt de installatiekopie naar het register gepusht dat wordt gebruikt om de taak uit te voeren.
Optie 1: Taak maken met door de gebruiker toegewezen identiteit
Met de stappen in deze sectie maakt u een taak en schakelt u een door de gebruiker toegewezen identiteit in. Als u in plaats daarvan een door het systeem toegewezen identiteit wilt inschakelen, raadpleegt u Optie 2: Taak maken met door het systeem toegewezen identiteit.
Een door de gebruiker toegewezen identiteit maken
Maak een identiteit met de naam myACRTasksId in uw abonnement met behulp van de opdracht az identity create . U kunt dezelfde resourcegroep gebruiken die u eerder hebt gebruikt om een containerregister of een ander register te maken.
az identity create \
--resource-group myResourceGroup \
--name myACRTasksId
Als u de door de gebruiker toegewezen identiteit in de volgende stappen wilt configureren, gebruikt u de opdracht az identity show om de resource-id, principal-id en client-id van de identiteit op te slaan in variabelen.
# 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)
Taak aanmaken
Maak de taak helloworldtask door de volgende opdracht az acr task create uit te voeren. De taak wordt uitgevoerd zonder broncodecontext en de opdracht verwijst naar het bestand helloworldtask.yaml
in de werkmap. De --assign-identity
parameter geeft de resource-id van de door de gebruiker toegewezen identiteit door.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity $resourceID
In de uitvoer van de opdracht wordt in de identity
sectie de identiteit van het type UserAssigned
weergegeven in de taak:
[...]
"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"
}
[...]
Machtigingen voor het ophalen van identiteiten verlenen aan het basisregister
In deze sectie geeft u de beheerde identiteit machtigingen voor het ophalen uit het basisregister, mybaseregistry.
Gebruik de opdracht az acr show om de resource-id van het basisregister op te halen en op te slaan in een variabele:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Gebruik de opdracht az role assignment create om de identiteit toe acrpull
te wijzen aan het basisregister. Deze rol heeft alleen machtigingen voor het ophalen van installatiekopieën uit het register.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role acrpull
Ga verder met het toevoegen van doelregisterreferenties aan de taak.
Optie 2: Taak maken met door het systeem toegewezen identiteit
Met de stappen in deze sectie maakt u een taak en schakelt u een door het systeem toegewezen identiteit in. Als u in plaats daarvan een door de gebruiker toegewezen identiteit wilt inschakelen, raadpleegt u Optie 1: Taak maken met door de gebruiker toegewezen identiteit.
Taak aanmaken
Maak de taak helloworldtask door de volgende opdracht az acr task create uit te voeren. De taak wordt uitgevoerd zonder broncodecontext en de opdracht verwijst naar het bestand helloworldtask.yaml
in de werkmap. Met --assign-identity
de parameter zonder waarde kan de door het systeem toegewezen identiteit voor de taak worden ingeschakeld.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity
In de uitvoer van de opdracht wordt in de identity
sectie een identiteit van het type SystemAssigned
weergegeven die in de taak is ingesteld. Dit principalId
is de principal-id van de taakidentiteit:
[...]
"identity": {
"principalId": "xxxxxxxx-2703-42f9-97d0-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-86f1-41af-91ab-xxxxxxxxxxxx",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "eastus",
[...]
Gebruik de opdracht az acr task show om de principalId op te slaan in een variabele, om in latere opdrachten te gebruiken. Vervang de naam van uw taak en het register in de volgende opdracht:
principalID=$(az acr task show \
--name <task_name> --registry <registry_name> \
--query identity.principalId --output tsv)
Machtigingen voor het ophalen van identiteiten verlenen aan het basisregister
In deze sectie geeft u de beheerde identiteit machtigingen voor het ophalen uit het basisregister, mybaseregistry.
Gebruik de opdracht az acr show om de resource-id van het basisregister op te halen en op te slaan in een variabele:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Gebruik de opdracht az role assignment create om de identiteit toe acrpull
te wijzen aan het basisregister. Deze rol heeft alleen machtigingen voor het ophalen van installatiekopieën uit het register.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role acrpull
Registerreferenties voor doel toevoegen aan taak
Gebruik nu de opdracht az acr task credential add om de taak in te schakelen voor verificatie met het basisregister met behulp van de referenties van de identiteit. Voer de opdracht uit die overeenkomt met het type beheerde identiteit dat u in de taak hebt ingeschakeld. Als u een door de gebruiker toegewezen identiteit hebt ingeschakeld, geeft --use-identity
u de client-id van de identiteit door. Als u een door het systeem toegewezen identiteit hebt ingeschakeld, geeft u door --use-identity [system]
.
# 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]
De taak handmatig uitvoeren
Als u wilt controleren of de taak waarin u een beheerde identiteit hebt ingeschakeld, correct wordt uitgevoerd, activeert u de taak handmatig met de opdracht az acr task run .
az acr task run \
--name helloworldtask \
--registry myregistry
Als de taak wordt uitgevoerd, is de uitvoer vergelijkbaar met:
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
Voer de opdracht az acr repository show-tags uit om te controleren of de installatiekopie is gemaakt en naar myregistry is gepusht:
az acr repository show-tags --name myregistry --repository hello-world --output tsv
Voorbeelduitvoer:
cf10
Volgende stappen
- Meer informatie over het inschakelen van een beheerde identiteit in een ACR-taak.
- Zie de YAML-verwijzing voor ACR-taken