Konfigurieren von Azure VM Image Builder-Berechtigungen mithilfe von PowerShell

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

Wenn Sie sich für Azure VM Image Builder registrieren, erhält der Dienst die Berechtigung zum Erstellen, Verwalten und Löschen einer Stagingressourcengruppe. Der Dienst ist auch berechtigt, Ressourcen zu einer Ressourcengruppe hinzuzufügen, die für die Imageerstellung erforderlich ist. Bei erfolgreicher Registrierung erhält Ihr Abonnement Zugriff auf einen VM Image Builder-Dienstprinzipalnamen (SPN).

Wenn Sie möchten, dass VM Image Builder Images verteilt, müssen Sie in Azure eine benutzerseitig zugewiesene Identität erstellen, die über Lese- und Schreibberechtigungen für Images verfügt. Sie können zum Beispiel Images an verwaltete Images oder an Azure Compute Gallery verteilen. Wenn Sie auf Azure Storage zugreifen, benötigt die von Ihnen erstellte benutzerseitig zugewiesene Identität Berechtigungen zum Lesen privater oder öffentlicher Container.

Vor dem Erstellen eines Images müssen Berechtigungen und Rechte eingerichtet werden. In den folgenden Abschnitten erfahren Sie, wie mögliche Szenarien mithilfe von PowerShell konfiguriert werden.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

VM Image Builder erfordert, dass Sie eine in Azure benutzerseitig zugewiesene verwaltete Identität erstellen. VM Image Builder verwendet diese Identität, um Images zu lesen, Images zu schreiben und auf Speicherkonten in Azure zuzugreifen. Sie gewähren der Identität die Berechtigung, bestimmte Aktionen für Ihr Abonnement ausführen zu dürfen.

Hinweis

Die benutzerseitig zugewiesene verwaltete Identität ist die richtige Möglichkeit, Berechtigungen für die Imageressourcengruppen zu erteilen. Der SPN ist für diesen Zweck als veraltet markiert.

Im folgenden Beispiel sehen Sie, wie Sie eine in Azure benutzerseitig zugewiesene verwaltete Identität erstellen. Ersetzen Sie die Platzhaltereinstellungen, um Ihre Variablen festzulegen.

Einstellung BESCHREIBUNG
<Ressourcengruppe> Die Ressourcengruppe, in der die benutzerseitig verwaltete Identität erstellt werden soll.
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity

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

Weitere Informationen finden Sie unter Benutzerseitig zugewiesene verwaltete Azure-Identität.

Berechtigungen für VM Image Builder zum Verteilen von Images

Damit VM Image Builder Images verteilen kann, muss der Dienst berechtigt sein, die Images in Ressourcengruppen einzufügen. Zum Gewähren der erforderlichen Berechtigungen erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität und erteilen ihr Rechte für die Ressourcengruppe, in der das Image erstellt wird. Azure VM Image Builder hat keine Berechtigung, auf Ressourcen in anderen Ressourcengruppen des Abonnements zuzugreifen. Sie müssen explizite Aktionen ausführen, um den Zugriff zu gestatten, damit Fehler für Ihre Builds verhindert werden.

Sie müssen der benutzerseitig zugewiesenen verwalteten Identität keine Berechtigungen eines Mitwirkenden für die Ressourcengruppe zuweisen, damit Images verteilt werden können. Die benutzerseitig zugewiesene verwaltete Identität benötigt jedoch die folgenden Actions-Berechtigungen in Azure in der Verteilungsressourcengruppe:

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

Wenn Sie die Verteilung über Azure Compute Gallery vornehmen möchten, benötigen Sie auch Folgendes:

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

Berechtigung zum Anpassen vorhandener Images

Damit VM Image Builder Images aus benutzerdefinierten Quellimages erstellen kann, muss der Dienst über die Berechtigung verfügen, die Images in diese Ressourcengruppen zu lesen. Zum Gewähren der erforderlichen Berechtigungen erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität und erteilen ihr Rechte für die Ressourcengruppe, in der sich das Image befindet.

So führen Sie den Buildvorgang aus einem vorhandenen benutzerdefinierten Image aus:

Microsoft.Compute/images/read

So führen Sie den Buildvorgang aus einer vorhandenen Azure Compute Gallery-Version aus:

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

Berechtigung zum Anpassen von Images in Ihren virtuellen Netzwerken

VM Image Builder ist in der Lage, ein vorhandenes virtuelles Netzwerk in Ihrem Abonnement bereitzustellen und zu nutzen. Insofern ist der Zugriff für Anpassungen für verknüpfte Ressourcen möglich.

Sie müssen der benutzerseitig zugewiesenen verwalteten Identität keine Berechtigungen eines Mitwirkenden für die Ressourcengruppe zuweisen, damit eine VM für ein vorhandenes virtuelles Netzwerk bereitgestellt werden kann. Die benutzerseitig zugewiesene verwaltete Identität benötigt jedoch die folgenden Actions-Berechtigungen in Azure für die Ressourcengruppe des virtuellen Netzwerks:

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

Erstellen einer Rollendefinition in Azure

Die folgenden Beispiele erstellen eine Rollendefinition in Azure auf Grundlage der Aktionen, die in den vorherigen Abschnitten beschrieben wurden. Diese Beispiele werden auf Ebene der Ressourcengruppe angewendet. Bewerten und testen Sie, ob die Granularität der Beispiele ausreichend für Ihre Anforderungen ist.

Die Aktionen für Images ermöglichen Lese- und Schreibvorgänge. Entscheiden Sie, was für Ihre Umgebung geeignet ist. Erstellen Sie beispielsweise eine Rolle, die es VM Image Builder ermöglicht, Images aus der Ressourcengruppe example-rg-1 zu lesen und Images in die Ressourcengruppe example-rg-2 zu schreiben.

Beispiel für eine benutzerdefinierte Rolle für ein Image in Azure

Im folgenden Beispiel wird eine Azure-Rolle erstellt, die für Verwendung und Verteilung eines benutzerdefinierten Quellimages verwendet wird. Dann weisen Sie die benutzerdefinierte Rolle der benutzerseitig zugewiesenen verwalteten Identität für VM Image Builder zu.

Zur Vereinfachung der Ersetzung der Werte im Beispiel legen Sie die folgenden Variablen zuerst fest. Ersetzen Sie die Platzhaltereinstellungen, um Ihre Variablen festzulegen.

Einstellung BESCHREIBUNG
<Abonnement-ID> die Azure-Abonnement-ID
<Ressourcengruppe> Ressourcengruppe für das benutzerdefinierte Image.
$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

Beispiel für eine vorhandene Azure-Rolle für das virtuelle Netzwerk

Im folgenden Beispiel wird eine Azure-Rolle erstellt, die für Verwendung und Verteilung eines vorhandenen Images des virtuellen Netzwerks verwendet wird. Dann weisen Sie die benutzerdefinierte Rolle der benutzerseitig zugewiesenen verwalteten Identität für VM Image Builder zu.

Zur Vereinfachung der Ersetzung der Werte im Beispiel legen Sie die folgenden Variablen zuerst fest. Ersetzen Sie die Platzhaltereinstellungen, um Ihre Variablen festzulegen.

Einstellung BESCHREIBUNG
<Abonnement-ID> die Azure-Abonnement-ID
<Ressourcengruppe> Die Ressourcengruppe für das virtuelle Netzwerk.
$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

Nächste Schritte

Übersicht über Azure VM Image Builder