Configurare le autorizzazioni di Generatore immagini di macchine virtuali di Azure usando PowerShell

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

Quando si esegue la registrazione per Image Builder di macchine virtuali di Azure, questo concede 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, necessario per la compilazione dell'immagine. Durante una registrazione riuscita, la sottoscrizione ottiene l'accesso a un nome dell'entità servizio Di Generatore immagini macchina virtuale (SPN).

Se si vuole distribuire immagini, è necessario creare un'identità assegnata dall'utente in Azure, con autorizzazioni per leggere e scrivere immagini. Ad esempio, è possibile distribuire immagini alle immagini gestite o a Azure Compute Gallery. Se si accede ad Archiviazione di Azure, l'identità assegnata dall'utente creata richiede le 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 gli 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. Vm Image Builder usa questa identità per leggere immagini, scrivere immagini e accedere agli account di archiviazione di Azure. Si concede l'autorizzazione identity 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 per questo scopo.

Nell'esempio seguente viene illustrato 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.
## 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 Generatore immagini vm di distribuire immagini

Per distribuire 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 concederne i diritti nel gruppo di risorse in cui viene compilata l'immagine. Generatore immagini vm 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 ai diritti di collaboratore dell'identità gestita assegnati dall'utente nel gruppo di risorse per distribuire immagini. Tuttavia, l'identità gestita assegnata dall'utente richiede 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 distribuire in Azure Compute Gallery, è necessario anche:

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 concederne i diritti nel gruppo di risorse in cui si trova l'immagine.

Ecco come creare da un'immagine personalizzata esistente:

Microsoft.Compute/images/read

Ecco come creare da una versione di Azure Compute Gallery esistente:

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

Autorizzazione per personalizzare le immagini nelle reti virtuali

Vm Image Builder ha la possibilità di distribuire e usare una rete virtuale esistente nella sottoscrizione, consentendo così alle personalizzazioni l'accesso alle risorse connesse.

Non è necessario concedere ai diritti di collaboratore dell'identità gestita assegnati dall'utente nel gruppo di risorse per distribuire una macchina virtuale in una rete virtuale esistente. Tuttavia, l'identità gestita assegnata dall'utente richiede le autorizzazioni di Azure Actions seguenti nel gruppo di risorse di rete virtuale:

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

Creare una definizione di ruolo di Azure

Negli esempi seguenti viene creata 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 abbastanza granulari per i requisiti.

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

Esempio di ruolo di Azure immagine personalizzata

Nell'esempio seguente viene creato 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 Generatore immagini vm.

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.
$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 Rete virtuale esistente di Azure

Nell'esempio seguente viene creato 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 Generatore immagini vm.

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.
$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 Generatore immagini di macchine virtuali di Azure