Een installatiekopieën maken en een door de gebruiker toegewezen beheerde identiteit gebruiken om toegang te krijgen tot bestanden in een Azure-opslagaccount
Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️
In dit artikel wordt beschreven hoe u een aangepaste installatiekopieën maakt met behulp van Azure VM Image Builder. De service maakt gebruik van een door de gebruiker toegewezen beheerde identiteit om toegang te krijgen tot bestanden in een Azure-opslagaccount en kan niet-geverifieerde toegang tot het opslagaccount blokkeren.
Azure VM Image Builder ondersteunt het gebruik van scripts en het kopiëren van bestanden vanuit GitHub, Azure-opslagaccounts en andere locaties. Als u de locaties wilt gebruiken, moeten ze extern toegankelijk zijn voor VM Image Builder.
In het volgende voorbeeld maakt u twee resourcegroepen, een voor de aangepaste installatiekopie en de andere voor het hosten van een Azure-opslagaccount dat een scriptbestand bevat. In dit voorbeeld wordt een praktijkscenario gesimuleerd, waarbij u mogelijk artefacten of afbeeldingsbestanden in verschillende opslagaccounts hebt gemaakt. U maakt een door de gebruiker toegewezen identiteit en verleent de identiteit leesmachtigingen voor het scriptbestand, maar u staat geen openbare toegang tot het bestand toe. Vervolgens gebruikt u de shell-customizer om een script te downloaden en uit te voeren vanuit het opslagaccount.
Een brongroep maken
Omdat u enkele stukjes informatie herhaaldelijk gebruikt, maakt u enkele variabelen om die informatie op te slaan.
# Image resource group name imageResourceGroup=aibmdimsi # Storage resource group strResourceGroup=aibmdimsistor # Location location=WestUS2 # Name of the image to be created imageName=aibCustLinuxImgMsi01 # Image distribution metadata reference name runOutputName=u1804ManImgMsiro
Maak een variabele voor uw abonnements-id:
subscriptionID=$(az account show --query id --output tsv)
Maak resourcegroepen voor zowel de installatiekopieën als de scriptopslag:
# Create a resource group for the image template az group create -n $imageResourceGroup -l $location # Create a resource group for the script storage az group create -n $strResourceGroup -l $location
Maak een door de gebruiker toegewezen identiteit en stel machtigingen in voor de resourcegroep:
VM Image Builder gebruikt de opgegeven gebruikersidentiteit om de installatiekopieën in de resourcegroep te injecteren. In dit voorbeeld maakt u een Azure-roldefinitie met specifieke acties voor het distribueren van de installatiekopieën. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.
# Create a user-assigned identity for VM Image Builder to access the storage account where the script is located identityName=aibBuiUserId$(date +'%s') az identity create -g $imageResourceGroup -n $identityName # Get an identity ID imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv) # Get the user-identity URI, which is needed for the template imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName # Download the preconfigured role definition example curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json # Update the definition sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json # Create role definitions az role definition create --role-definition ./aibRoleImageCreation.json # Grant the role definition to the user-assigned identity az role assignment create \ --assignee $imgBuilderCliId \ --role "Azure Image Builder Service Image Creation Role" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
Maak het opslagaccount en kopieer het voorbeeldscript ernaar vanuit GitHub:
# Script storage account scriptStorageAcc=aibstorscript$(date +'%s') # Script container scriptStorageAccContainer=scriptscont$(date +'%s') # Script URL scriptUrl=https://$scriptStorageAcc.blob.core.windows.net/$scriptStorageAccContainer/customizeScript.sh # Create the storage account and blob in the resource group az storage account create -n $scriptStorageAcc -g $strResourceGroup -l $location --sku Standard_LRS az storage container create -n $scriptStorageAccContainer --fail-on-exist --account-name $scriptStorageAcc # Copy in an example script from the GitHub repo az storage blob copy start \ --destination-blob customizeScript.sh \ --destination-container $scriptStorageAccContainer \ --account-name $scriptStorageAcc \ --source-uri https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/customizeScript.sh
Geef VM Image Builder toestemming om resources te maken in de resourcegroep van de installatiekopieën. De
--assignee
waarde is de id van de gebruikersidentiteit.az role assignment create \ --assignee $imgBuilderCliId \ --role "Storage Blob Data Reader" \ --scope /subscriptions/$subscriptionID/resourceGroups/$strResourceGroup/providers/Microsoft.Storage/storageAccounts/$scriptStorageAcc/blobServices/default/containers/$scriptStorageAccContainer
Het voorbeeld wijzigen
Download het JSON-voorbeeldbestand en configureer het met de variabelen die u eerder hebt gemaakt.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/7_Creating_Custom_Image_using_MSI_to_Access_Storage/helloImageTemplateMsi.json -o helloImageTemplateMsi.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateMsi.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" helloImageTemplateMsi.json
sed -i -e "s/<region>/$location/g" helloImageTemplateMsi.json
sed -i -e "s/<imageName>/$imageName/g" helloImageTemplateMsi.json
sed -i -e "s%<scriptUrl>%$scriptUrl%g" helloImageTemplateMsi.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateMsi.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateMsi.json
De installatiekopie maken
Verzend de installatiekopieënconfiguratie naar de VM Image Builder-service:
az resource create \ --resource-group $imageResourceGroup \ --properties @helloImageTemplateMsi.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateMsi01
Start de build van de installatiekopieën:
az resource invoke-action \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateMsi01 \ --action Run
Het duurt ongeveer 15 minuten voordat de build is voltooid.
Een VM maken:
Maak een VIRTUELE machine op basis van de installatiekopieën:
az vm create \ --resource-group $imageResourceGroup \ --name aibImgVm00 \ --admin-username aibuser \ --image $imageName \ --location $location \ --generate-ssh-keys
Nadat de VIRTUELE machine is gemaakt, start u er een SSH-sessie (Secure Shell) mee.
ssh aibuser@<publicIp>
Nadat de SSH-verbinding tot stand is gebracht, ontvangt u het bericht 'Bericht van de dag' waarin staat dat de afbeelding is aangepast:
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Uw resources opschonen
Als u de resources die tijdens dit proces zijn gemaakt niet meer nodig hebt, kunt u ze verwijderen door de volgende code uit te voeren:
az role definition delete --name "$imageRoleDefName"
```azurecli-interactive
az role assignment delete \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az identity delete --ids $imgBuilderId
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateMsi01
az group delete -n $imageResourceGroup
az group delete -n $strResourceGroup
Volgende stappen
Als u problemen ondervindt met het gebruik van VM Image Builder, raadpleegt u Problemen met Azure VM Image Builder oplossen.