Konfigurowanie uprawnień konstruktora obrazów maszyny wirtualnej platformy Azure przy użyciu programu PowerShell

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

Po zarejestrowaniu się w programie Azure VM Image Builder to przyznaje usłudze uprawnienia do tworzenia, zarządzania i usuwania przejściowej grupy zasobów. Usługa ma również prawa do dodawania zasobów do grupy zasobów wymaganej do kompilacji obrazu. Podczas pomyślnej rejestracji subskrypcja uzyskuje dostęp do głównej nazwy usługi Image Builder (SPN) maszyny wirtualnej.

Jeśli chcesz, aby konstruktor obrazów maszyny wirtualnej dystrybuował obrazy, musisz utworzyć tożsamość przypisaną przez użytkownika na platformie Azure z uprawnieniami do odczytywania i zapisywania obrazów. Możesz na przykład dystrybuować obrazy do obrazów zarządzanych lub do usługi Azure Compute Gallery. Jeśli uzyskujesz dostęp do usługi Azure Storage, tożsamość przypisana przez użytkownika wymaga uprawnień do odczytu kontenerów prywatnych lub publicznych.

Przed utworzeniem obrazu należy skonfigurować uprawnienia i uprawnienia. W poniższych sekcjach opisano sposób konfigurowania możliwych scenariuszy przy użyciu programu PowerShell.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Konstruktor obrazów maszyny wirtualnej wymaga utworzenia tożsamości zarządzanej przypisanej przez użytkownika platformy Azure. Konstruktor obrazów maszyny wirtualnej używa tej tożsamości do odczytywania obrazów, zapisywania obrazów i uzyskiwania dostępu do kont usługi Azure Storage. Udzielasz uprawnień tożsamości do wykonywania określonych akcji w ramach subskrypcji.

Uwaga

Tożsamość zarządzana przypisana przez użytkownika jest poprawnym sposobem udzielania uprawnień do grup zasobów obrazu. Nazwa SPN jest przestarzała w tym celu.

W poniższym przykładzie pokazano, jak utworzyć tożsamość zarządzaną przypisaną przez użytkownika platformy Azure. Zastąp ustawienia symbolu zastępczego, aby ustawić zmienne.

Ustawienie Opis
<Grupa zasobów> Grupa zasobów, w której chcesz utworzyć tożsamość zarządzaną przypisaną przez użytkownika.
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity

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

Aby uzyskać więcej informacji, zobacz Tożsamość zarządzana przypisana przez użytkownika platformy Azure.

Zezwalaj konstruktorowi obrazów maszyny wirtualnej na dystrybucję obrazów

Aby konstruktor obrazów maszyny wirtualnej dystrybuował obrazy, usługa musi być dozwolona do wstrzykiwania obrazów do grup zasobów. Aby udzielić wymaganych uprawnień, utwórz tożsamość zarządzaną przypisaną przez użytkownika i przyznaj jej prawa do grupy zasobów, w której jest tworzony obraz. Konstruktor obrazów maszyny wirtualnej nie ma uprawnień dostępu do zasobów w innych grupach zasobów w subskrypcji. Musisz podjąć jawne akcje, aby zezwolić na dostęp, aby zapobiec awarii kompilacji.

Nie musisz udzielać uprawnień współautora tożsamości zarządzanej przypisanej przez użytkownika do grupy zasobów w celu rozpowszechniania obrazów. Jednak tożsamość zarządzana przypisana przez użytkownika wymaga następujących uprawnień platformy Azure Actions w grupie zasobów dystrybucji:

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

Jeśli chcesz dystrybuować do galerii zasobów obliczeniowych platformy Azure, potrzebujesz również następujących elementów:

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

Uprawnienie do dostosowywania istniejących obrazów

Aby konstruktor obrazów maszyny wirtualnej tworzył obrazy na podstawie źródłowych obrazów niestandardowych, usługa musi mieć możliwość odczytywania obrazów do tych grup zasobów. Aby udzielić wymaganych uprawnień, utwórz tożsamość zarządzaną przypisaną przez użytkownika i przyznaj jej prawa do grupy zasobów, w której znajduje się obraz.

Oto jak utworzyć na podstawie istniejącego obrazu niestandardowego:

Microsoft.Compute/images/read

Poniżej przedstawiono sposób kompilowanie z istniejącej wersji galerii obliczeń platformy Azure:

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

Uprawnienie do dostosowywania obrazów w sieciach wirtualnych

Konstruktor obrazów maszyny wirtualnej ma możliwość wdrażania i używania istniejącej sieci wirtualnej w ramach subskrypcji, co umożliwia dostosowanie dostępu do połączonych zasobów.

Nie musisz udzielać uprawnień współautora tożsamości zarządzanej przypisanej przez użytkownika w grupie zasobów, aby wdrożyć maszynę wirtualną w istniejącej sieci wirtualnej. Jednak tożsamość zarządzana przypisana przez użytkownika wymaga następujących uprawnień platformy Azure Actions w grupie zasobów sieci wirtualnej:

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

Tworzenie definicji roli platformy Azure

W poniższych przykładach utworzono definicję roli platformy Azure z akcji opisanych w poprzednich sekcjach. Przykłady są stosowane na poziomie grupy zasobów. Oceń i przetestuj, czy przykłady są wystarczająco szczegółowe dla Twoich wymagań.

Akcje obrazu umożliwiają odczyt i zapis. Zdecyduj, co jest odpowiednie dla danego środowiska. Na przykład utwórz rolę, aby umożliwić konstruktorowi obrazów maszyny wirtualnej odczytywanie obrazów z grupy zasobów example-rg-1 i zapisywanie obrazów w grupie zasobów example-rg-2.

Przykład roli platformy Azure dla obrazu niestandardowego

W poniższym przykładzie utworzono rolę platformy Azure do użycia i dystrybuowania źródłowego obrazu niestandardowego. Następnie przyznasz rolę niestandardową tożsamości zarządzanej przypisanej przez użytkownika dla programu VM Image Builder.

Aby uprościć zamianę wartości w przykładzie, najpierw ustaw następujące zmienne. Zastąp ustawienia symbolu zastępczego, aby ustawić zmienne.

Ustawienie Opis
<Subscription ID (Identyfikator subskrypcji)> Identyfikator subskrypcji platformy Azure.
<Grupa zasobów> Grupa zasobów dla obrazu niestandardowego.
$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

Przykład roli istniejącej sieci wirtualnej platformy Azure

Poniższy przykład tworzy rolę platformy Azure do użycia i dystrybucji istniejącego obrazu sieci wirtualnej. Następnie przyznasz rolę niestandardową tożsamości zarządzanej przypisanej przez użytkownika dla programu VM Image Builder.

Aby uprościć zamianę wartości w przykładzie, najpierw ustaw następujące zmienne. Zastąp ustawienia symbolu zastępczego, aby ustawić zmienne.

Ustawienie Opis
<Subscription ID (Identyfikator subskrypcji)> Identyfikator subskrypcji platformy Azure.
<Grupa zasobów> Grupa zasobów sieci wirtualnej.
$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

Następne kroki

Omówienie narzędzia Azure VM Image Builder