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, necessario per la compilazione dell'immagine. Durante una registrazione corretta, la sottoscrizione ottiene l'accesso a un nome dell'entità servizio (SPN) di Image Builder della macchina virtuale.
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 a 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 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 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. |
## 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 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. |
$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. 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