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

  1. 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
    
  2. Abonelik kimliğiniz için bir değişken oluşturun:

    subscriptionID=$(az account show --query id --output tsv)
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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

  1. 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
    
  2. 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

  1. 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
    
  2. 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.