Skapa en avbildning och använd en användartilldelad hanterad identitet för att komma åt filer i ett Azure Storage-konto
Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️
Den här artikeln visar hur du skapar en anpassad avbildning med hjälp av Azure VM Image Builder. Tjänsten använder en användartilldelad hanterad identitet för att komma åt filer i ett Azure Storage-konto, och det kan få blockerande oautentiserad åtkomst till lagringskontot.
Azure VM Image Builder stöder användning av skript och kopiering av filer från GitHub, Azure Storage-konton och andra platser. Om du vill använda platserna måste de vara externt tillgängliga för VM Image Builder.
I följande exempel skapar du två resursgrupper, en för den anpassade avbildningen och den andra som värd för ett Azure-lagringskonto som innehåller en skriptfil. Det här exemplet simulerar ett verkligt scenario, där du kan ha byggartefakter eller bildfiler i olika lagringskonton. Du skapar en användartilldelad identitet och ger sedan identiteten läsbehörighet för skriptfilen, men du tillåter inte offentlig åtkomst till filen. Sedan använder du gränssnittsanpassaren för att ladda ned och köra ett skript från lagringskontot.
Skapa en resursgrupp
Eftersom du kommer att använda viss information upprepade gånger skapar du vissa variabler för att lagra den informationen.
# 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
Skapa en variabel för ditt prenumerations-ID:
subscriptionID=$(az account show --query id --output tsv)
Skapa resursgrupper för både avbildningen och skriptlagringen:
# 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
Skapa en användartilldelad identitet och ange behörigheter för resursgruppen:
Vm Image Builder använder den angivna användaridentiteten för att mata in avbildningen i resursgruppen. I det här exemplet skapar du en Azure-rolldefinition med specifika åtgärder för att distribuera avbildningen. Rolldefinitionen tilldelas sedan till användaridentiteten.
# 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
Skapa lagringskontot och kopiera exempelskriptet till det från 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
Ge VM Image Builder behörighet att skapa resurser i avbildningsresursgruppen. Värdet
--assignee
är användaridentitets-ID.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
Ändra exemplet
Ladda ned JSON-exempelfilen och konfigurera den med de variabler som du skapade tidigare.
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
Skapa avbildningen
Skicka avbildningskonfigurationen till tjänsten Image Builder för den virtuella datorn:
az resource create \ --resource-group $imageResourceGroup \ --properties @helloImageTemplateMsi.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateMsi01
Starta avbildningsversionen:
az resource invoke-action \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateMsi01 \ --action Run
Bygget kan ta cirka 15 minuter att slutföra.
Skapa en virtuell dator
Skapa en virtuell dator från avbildningen:
az vm create \ --resource-group $imageResourceGroup \ --name aibImgVm00 \ --admin-username aibuser \ --image $imageName \ --location $location \ --generate-ssh-keys
När den virtuella datorn har skapats startar du en SSH-session (Secure Shell) med den.
ssh aibuser@<publicIp>
När SSH-anslutningen har upprättats bör du få ett meddelande om att avbildningen har anpassats:
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Rensa dina resurser
Om du inte längre behöver de resurser som skapades under den här processen kan du ta bort dem genom att köra följande kod:
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
Nästa steg
Om du har problem med att använda VM Image Builder kan du läsa Felsöka Azure VM Image Builder.