Condividi tramite


Configurare le autorizzazioni di Image Builder di macchine virtuali di Azure usando PowerShell

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

Quando si esegue la registrazione per Image Builder di macchine virtuali di Azure, viene concessa l'autorizzazione del servizio per creare, gestire ed eliminare un gruppo di risorse di staging. Il servizio dispone anche dei diritti per aggiungere risorse a un gruppo di risorse, necessarie per la creazione dell'immagine. Dopo una registrazione riuscita, la sottoscrizione ottiene l'accesso a un nome dell'entità servizio di Image Builder per macchine virtuali di Azure.

Annotazioni

Se si usa un gruppo di risorse di staging personalizzato, l'identità gestita assegnata dall'utente richiede anche autorizzazioni aggiuntive di Collaboratore su questo gruppo di risorse, per poter distribuire la macchina virtuale modello durante il processo.

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 oppure alla Azure Compute Gallery. Se si accede ad Azure Storage, l'identità assegnata dall'utente che crei deve disporre delle autorizzazioni per leggere container privati o pubblici.

È necessario configurare autorizzazioni e privilegi prima di creare un'immagine. Le sezioni seguenti illustrano in dettaglio come configurare scenari possibili usando PowerShell.

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. All'identità viene concessa l'autorizzazione a eseguire azioni specifiche nella sottoscrizione.

Annotazioni

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

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

Impostazione Description
<Gruppo di risorse> Gruppo di risorse in cui si vuole creare l'identità gestita assegnata dall'utente.
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity

$parameters = @{
    Name = 'aibIdentity'
    ResourceGroupName = '<Resource group>'
}
# create identity
New-AzUserAssignedIdentity @parameters

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

Consenti a VM Image Builder 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. VM Image Builder non dispone dell'autorizzazione per accedere alle risorse in altri gruppi di risorse nella sottoscrizione. È necessario eseguire azioni esplicite per consentire l'accesso, al fine di evitare che le compilazioni falliscano.

Per distribuire le immagini, non è necessario concedere all'identità gestita assegnata dall'utente i diritti di collaboratore nel gruppo di risorse. 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

Costruttore di Immagini VM ha la capacità di distribuire e usare una rete virtuale esistente nel tuo abbonamento, consentendo così che le personalizzazioni possano accedere alle risorse connesse.

Per distribuire una rete virtuale esistente, non è necessario concedere i diritti di collaboratore dell'identità gestita assegnata dall'utente nel gruppo di risorse. 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. Decidi cosa è appropriato per il tuo ambiente. 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 immagine personalizzata di Azure

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. È necessario sostituire le impostazioni dei segnaposto per impostare le variabili.

Impostazione Description
<ID sottoscrizione> L'ID sottoscrizione di Azure.
<Gruppo di risorse> Gruppo di risorse per l'immagine personalizzata.
$sub_id = "<Subscription ID>"
# 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 a web request to download the sample JSON description
$sample_uri="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json"
$role_definition="aibRoleImageCreation.json"

Invoke-WebRequest -Uri $sample_uri -Outfile $role_definition -UseBasicParsing

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

# Update the JSON definition placeholders with variable values
((Get-Content -path $role_definition -Raw) -replace '<subscriptionID>',$sub_id) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $role_definition

# Create a custom role from the aibRoleImageCreation.json description file. 
New-AzRoleDefinition -InputFile $role_definition

# Get the user-identity properties
$identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
$identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId

# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
$parameters = @{
    ObjectId = $identityNamePrincipalId
    RoleDefinitionName = $imageRoleDefName
    Scope = '/subscriptions/' + $sub_id + '/resourceGroups/' + $imageResourceGroup
}

New-AzRoleAssignment @parameters

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. Sostituisci le impostazioni dei segnaposto per impostare le variabili.

Impostazione Description
<ID sottoscrizione> L'ID sottoscrizione di Azure.
<Gruppo di risorse> Gruppo di risorse di rete virtuale.
$sub_id = "<Subscription ID>"
$res_group = "<Resource group>"
$identityName = "aibIdentity"

# Use a web request to download the sample JSON description
$sample_uri="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json"
$role_definition="aibRoleNetworking.json"

Invoke-WebRequest -Uri $sample_uri -Outfile $role_definition -UseBasicParsing

# Create a unique role name to avoid clashes in the same AAD domain
$timeInt=$(get-date -UFormat "%s")
$networkRoleDefName="Azure Image Builder Network Def"+$timeInt

# Update the JSON definition placeholders with variable values
((Get-Content -path $role_definition -Raw) -replace '<subscriptionID>',$sub_id) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace '<vnetRgName>', $res_group) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace 'Azure Image Builder Service Networking Role',$networkRoleDefName) | Set-Content -Path $role_definition

# Create a custom role from the aibRoleNetworking.json description file
New-AzRoleDefinition -InputFile $role_definition

# Get the user-identity properties
$identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
$identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId

# Assign the custom role to the user-assigned managed identity for Azure Image Builder
$parameters = @{
    ObjectId = $identityNamePrincipalId
    RoleDefinitionName = $networkRoleDefName
    Scope = '/subscriptions/' + $sub_id + '/resourceGroups/' + $res_group
}

New-AzRoleAssignment @parameters

Passaggi successivi

Panoramica di Image Builder per macchine virtuali di Azure