Udostępnij za pośrednictwem


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 usłudze 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 (SPN) programu Image Builder 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 odczytu i zapisu obrazów. Na przykład możesz chcieć dystrybuować obrazy do obrazów zarządzanych lub do galerii zasobów obliczeniowych platformy Azure. Jeśli uzyskujesz dostęp do usługi Azure Storage, tworzona przez ciebie tożsamość 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

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

Uwaga

Tożsamość zarządzana przypisana przez użytkownika jest prawidłowym 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 mieć możliwość wstrzykiwania obrazów do grup zasobów. Aby przyznać wymagane uprawnienia, 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. Aby zapobiec awarii kompilacji, należy wykonać jawne akcje, aby zezwolić na dostęp.

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 rozpowszechnić usługę Azure Compute Gallery, 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ć z istniejącego obrazu niestandardowego:

Microsoft.Compute/images/read

Poniżej przedstawiono sposób tworzenia z istniejącej wersji galerii obliczeniowej 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

Narzędzie VM Image Builder umożliwia wdrażanie i używanie 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 obrazu niestandardowego

Poniższy przykład tworzy rolę platformy Azure do użycia i dystrybucji ź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ć zastępowanie wartości w przykładzie, najpierw ustaw następujące zmienne. Zastąp ustawienia symbolu zastępczego, aby ustawić zmienne.

Ustawienie opis
<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ć zastępowanie wartości w przykładzie, najpierw ustaw następujące zmienne. Zastąp ustawienia symbolu zastępczego, aby ustawić zmienne.

Ustawienie opis
<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