Configurare le autorizzazioni di Image Builder di macchine virtuali di Azure usando l'interfaccia della riga di comando di Azure

Si applica a: ✔️ Set di scalabilità flessibili di macchine virtuali ✔️ Linux

Quando si esegue la registrazione per Image Builder di macchine virtuali di Azure, la sottoscrizione ottiene l'accesso a un nome dell'entità servizio (SPN) di Image Builder della macchina virtuale. Questa registrazione autorizza anche l'autorizzazione del servizio a creare, gestire ed eliminare un gruppo di risorse di staging. Per il processo di compilazione delle immagini, l'assegnazione di ruolo Collaboratore è necessaria anche nel gruppo di risorse di staging.

Se si vuole che Image Builder di macchine virtuali distribuisca le immagini, è necessario creare un'identità assegnata dall'utente in Azure, con le autorizzazioni per leggere e scrivere immagini. Ad esempio, è possibile distribuire le immagini alle immagini gestite o alla raccolta di calcolo di Azure. Se si accede all'archiviazione di Azure, l'identità assegnata dall'utente creata deve disporre delle autorizzazioni per leggere contenitori privati o pubblici.

È necessario configurare autorizzazioni e privilegi prima di creare un'immagine. Le sezioni seguenti illustrano in dettaglio come configurare scenari possibili usando l'interfaccia della riga di comando di Azure.

Prerequisiti

Creare un'identità gestita assegnata dall'utente

Vm Image Builder richiede di creare un'identità gestita assegnata dall'utente di Azure. Image Builder di macchine virtuali usa questa identità per leggere immagini, scrivere immagini e accedere agli account di archiviazione di Azure. Si concede all'identità l'autorizzazione per eseguire azioni specifiche nella sottoscrizione.

Nota

L'identità gestita assegnata dall'utente è il modo corretto per concedere le autorizzazioni ai gruppi di risorse di immagine. Il nome SPN è deprecato a questo scopo.

L'esempio seguente illustra come creare un'identità gestita assegnata dall'utente di Azure. Sostituire le impostazioni segnaposto per impostare le variabili.

Impostazione Descrizione
<Gruppo di risorse> Gruppo di risorse in cui si vuole creare l'identità gestita assegnata dall'utente.
identityName="aibIdentity"
imageResourceGroup=<Resource group>

az identity create \
    --resource-group $imageResourceGroup \
    --name $identityName

Per altre informazioni, vedere Identità gestita assegnata dall'utente di Azure.

Consenti a Image Builder di macchine virtuali di distribuire le immagini

Affinché Image Builder di macchine virtuali distribuisca le immagini, il servizio deve essere autorizzato a inserire le immagini nei gruppi di risorse. Per concedere le autorizzazioni necessarie, creare un'identità gestita assegnata dall'utente e concedergli i diritti per il gruppo di risorse in cui viene compilata l'immagine. Image Builder di macchine virtuali non dispone dell'autorizzazione per accedere alle risorse in altri gruppi di risorse nella sottoscrizione. È necessario eseguire azioni esplicite per consentire l'accesso, per evitare che le compilazioni non riescano.

Non è necessario concedere al gruppo di risorse i diritti di collaboratore dell'identità gestita assegnata dall'utente per distribuire le immagini. L'identità gestita assegnata dall'utente richiede tuttavia le autorizzazioni di Azure Actions seguenti nel gruppo di risorse di distribuzione:

Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete

Se si vuole eseguire la distribuzione in Azure Compute Gallery, è anche necessario:

Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write

Autorizzazione per personalizzare le immagini esistenti

Per creare immagini da immagini personalizzate di origine, il servizio deve essere autorizzato a leggere le immagini in questi gruppi di risorse. Per concedere le autorizzazioni necessarie, creare un'identità gestita assegnata dall'utente e concedergli i diritti per il gruppo di risorse in cui si trova l'immagine.

Ecco come creare da un'immagine personalizzata esistente:

Microsoft.Compute/images/read

Ecco come eseguire la compilazione da una versione esistente di Azure Compute Gallery:

Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read

Autorizzazione per personalizzare le immagini nelle reti virtuali

Image Builder di macchine virtuali ha la possibilità di distribuire e usare una rete virtuale esistente nella sottoscrizione, consentendo così alle personalizzazioni di accedere alle risorse connesse.

Non è necessario concedere i diritti di collaboratore dell'identità gestita assegnata dall'utente nel gruppo di risorse per distribuire una macchina virtuale in una rete virtuale esistente. L'identità gestita assegnata dall'utente richiede tuttavia le autorizzazioni di Azure Actions seguenti per il gruppo di risorse di rete virtuale:

Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action

Creare una definizione di ruolo di Azure

Gli esempi seguenti creano una definizione di ruolo di Azure dalle azioni descritte nelle sezioni precedenti. Gli esempi vengono applicati a livello di gruppo di risorse. Valutare e testare se gli esempi sono sufficientemente granulari per i requisiti.

Le azioni dell'immagine consentono la lettura e la scrittura. Decidere cosa è appropriato per l'ambiente in uso. Ad esempio, creare un ruolo per consentire a Image Builder di vm di leggere le immagini dal gruppo di risorse example-rg-1 e scrivere immagini nel gruppo di risorse example-rg-2.

Esempio di ruolo di Azure immagine personalizzata

L'esempio seguente crea un ruolo di Azure per usare e distribuire un'immagine personalizzata di origine. Si concede quindi il ruolo personalizzato all'identità gestita assegnata dall'utente per Image Builder della macchina virtuale.

Per semplificare la sostituzione dei valori nell'esempio, impostare prima le variabili seguenti. Sostituire le impostazioni segnaposto per impostare le variabili.

Impostazione Descrizione
<ID sottoscrizione> L'ID sottoscrizione di Azure.
<Gruppo di risorse> Gruppo di risorse per l'immagine personalizzata.
# Subscription ID - You can get this using `az account show | grep id` or from the Azure portal.
subscriptionID=$(az account show --query id --output tsv)
# Resource group - image builder will only support creating custom images in the same Resource Group as the source managed image.
imageResourceGroup=<Resource group>
identityName="aibIdentity"

# Use *cURL* to download the a sample JSON description 
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json

# Create a unique role name to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')

# Update the JSON definition using stream editor
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json

# Create a custom role from the sample aibRoleImageCreation.json description file.
az role definition create --role-definition ./aibRoleImageCreation.json

# Get the user-assigned managed identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)

# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
az role assignment create \
    --assignee $imgBuilderCliId \
    --role $imageRoleDefName \
    --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup

Esempio di ruolo di Azure per la rete virtuale esistente

L'esempio seguente crea un ruolo di Azure per usare e distribuire un'immagine di rete virtuale esistente. Si concede quindi il ruolo personalizzato all'identità gestita assegnata dall'utente per Image Builder della macchina virtuale.

Per semplificare la sostituzione dei valori nell'esempio, impostare prima le variabili seguenti. Sostituire le impostazioni segnaposto per impostare le variabili.

Impostazione Descrizione
<ID sottoscrizione> L'ID sottoscrizione di Azure.
<Gruppo di risorse> Gruppo di risorse di rete virtuale
# Subscription ID - You can get this using `az account show | grep id` or from the Azure portal.
subscriptionID=$(az account show --query id --output tsv)
VnetResourceGroup=<Resource group>
identityName="aibIdentity"

# Use *cURL* to download the a sample JSON description 
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json

# Create a unique role name to avoid clashes in the same domain
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')

# Update the JSON definition using stream editor
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$VnetResourceGroup/g" aibRoleNetworking.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json

# Create a custom role from the aibRoleNetworking.json description file.
az role definition create --role-definition ./aibRoleNetworking.json

# Get the user-assigned managed identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)

# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
az role assignment create \
    --assignee $imgBuilderCliId \
    --role $netRoleDefName \
    --scope /subscriptions/$subscriptionID/resourceGroups/$VnetResourceGroup

Uso dell'identità gestita per l'accesso Archiviazione di Azure

Se si vuole eseguire l'autenticazione con Archiviazione di Azure e usare contenitori privati, Image Builder richiede un'identità gestita assegnata dall'utente. Image Builder di macchine virtuali usa l'identità per l'autenticazione con Archiviazione di Azure.

Nota

Image Builder della macchina virtuale usa solo l'identità al momento dell'invio del modello di immagine. La macchina virtuale di compilazione non ha accesso all'identità durante la compilazione dell'immagine.

Usare l'interfaccia della riga di comando di Azure per creare l'identità gestita assegnata dall'utente:

az role assignment create \
    --assignee <Image Builder client ID> \
    --role "Storage Blob Data Reader" \
    --scope /subscriptions/<Subscription ID>/resourceGroups/<Resource group>/providers/Microsoft.Storage/storageAccounts/$scriptStorageAcc/blobServices/default/containers/<Storage account container>

Nel modello Image Builder della macchina virtuale specificare l'identità gestita assegnata dall'utente:

    "type": "Microsoft.VirtualMachineImages/imageTemplates",
    "apiVersion": "2020-02-14",
    "location": "<Region>",
    ..
    "identity": {
    "type": "UserAssigned",
          "userAssignedIdentities": {
            "<Image Builder ID>": {}     
        }

Sostituire le impostazioni segnaposto seguenti:

Impostazione Descrizione
<Area> Area modello
<Gruppo di risorse> Gruppo di risorse
<contenitore dell'account Archiviazione> Nome del contenitore dell'account di archiviazione
<ID sottoscrizione> Sottoscrizione di Azure

Per altre informazioni, vedere Creare un'immagine e usare un'identità gestita assegnata dall'utente per accedere ai file in Archiviazione di Azure. Si apprenderà come creare e configurare l'identità gestita assegnata dall'utente per accedere a un account di archiviazione.

Passaggi successivi

Panoramica di Image Builder di macchine virtuali di Azure