Configurare le autorizzazioni di Image Builder di macchine virtuali di Azure usando l'interfaccia della riga di comando di Azure
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
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
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido su Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
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 di 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.