Azure depolama hesabındaki dosyalara erişmek için görüntü oluşturma ve kullanıcı tarafından atanan yönetilen kimliği kullanma
Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri
Bu makalede, Azure VM Görüntü Oluşturucusu'nu kullanarak özelleştirilmiş görüntü oluşturma adımları gösterilmektedir. Hizmet, Azure depolama hesabındaki dosyalara erişmek için kullanıcı tarafından atanan yönetilen kimliği kullanır ve depolama hesabına kimliği doğrulanmamış erişimi engellemeyi sağlayabilir.
Azure VM Görüntü Oluşturucusu, betiklerin kullanılmasını ve GitHub' dan, Azure depolama hesaplarından ve diğer konumlardan dosya kopyalamayı destekler. Konumları kullanmak istiyorsanız, bunların VM Görüntü Oluşturucusu tarafından dışarıdan erişilebilir olması gerekir.
Aşağıdaki örnekte biri özel görüntü, diğeri ise betik dosyası içeren bir Azure depolama hesabını barındırmak için olmak üzere iki kaynak grubu oluşturacaksınız. Bu örnek, çeşitli depolama hesaplarında yapıtlar veya görüntü dosyaları oluşturabileceğiniz gerçek yaşam senaryolarının benzetimini yapar. Kullanıcı tarafından atanan bir kimlik oluşturacak ve ardından betik dosyasında kimliğe okuma izinleri vereceksiniz, ancak dosyaya genel erişime izin vermeyeceksiniz. Ardından depolama hesabından bir betik indirip çalıştırmak için kabuk özelleştiricisini kullanacaksınız.
Kaynak grubu oluşturma
Bazı bilgileri art arda kullanacağınız için, bu bilgileri depolamak için bazı değişkenler oluşturun.
# 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
Abonelik kimliğiniz için bir değişken oluşturun:
subscriptionID=$(az account show --query id --output tsv)
Hem görüntü hem de betik depolaması için kaynak grupları oluşturun:
# 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
Kullanıcı tarafından atanan bir kimlik oluşturun ve kaynak grubunda izinleri ayarlayın:
VM Görüntü Oluşturucusu, görüntüyü kaynak grubuna eklemek için sağlanan kullanıcı kimliğini kullanır. Bu örnekte, görüntüyü dağıtmak için belirli eylemleri içeren bir Azure rol tanımı oluşturacaksınız. Rol tanımı daha sonra kullanıcı kimliğine atanır.
# 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
Depolama hesabını oluşturun ve örnek betiği GitHub'dan bu hesaba kopyalayın:
# 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
VM Görüntü Oluşturucusu'na görüntü kaynak grubunda kaynak oluşturma izni verin.
--assignee
Değer, kullanıcı kimliği kimliğidir.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
Örneği değiştirme
Örnek JSON dosyasını indirin ve daha önce oluşturduğunuz değişkenlerle yapılandırın.
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
Görüntü oluşturma
Görüntü yapılandırmasını VM Görüntü Oluşturucusu hizmetine gönderin:
az resource create \ --resource-group $imageResourceGroup \ --properties @helloImageTemplateMsi.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateMsi01
Görüntü derlemesini başlatın:
az resource invoke-action \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateMsi01 \ --action Run
Derlemenin tamamlanması yaklaşık 15 dakika sürebilir.
VM oluşturma
Görüntüden bir VM oluşturun:
az vm create \ --resource-group $imageResourceGroup \ --name aibImgVm00 \ --admin-username aibuser \ --image $imageName \ --location $location \ --generate-ssh-keys
VM oluşturulduktan sonra, vm ile bir Secure Shell (SSH) oturumu başlatın.
ssh aibuser@<publicIp>
SSH bağlantısı kurulduktan sonra görüntünün özelleştirildiğini belirten bir "Günün İletisi" almanız gerekir:
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Kaynaklarınızı temizleme
Bu işlem sırasında oluşturulan kaynaklara artık ihtiyacınız yoksa, aşağıdaki kodu çalıştırarak bunları silebilirsiniz:
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
Sonraki adımlar
VM Görüntü Oluşturucusu'nu kullanırken sorun yaşıyorsanız bkz . Azure VM Görüntü Oluşturucusu sorunlarını giderme.