Delen via


Azure VM Image Builder-machtigingen configureren met behulp van PowerShell

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

Wanneer u zich registreert voor Azure VM Image Builder, verleent dit de servicemachtiging voor het maken, beheren en verwijderen van een faseringsresourcegroep. De service heeft ook rechten om resources toe te voegen aan een resourcegroep, vereist voor de aanmaak van de images. Tijdens een geslaagde registratie krijgt uw abonnement toegang tot een Service Principal-naam (SPN) van VM Image Builder.

Opmerking

Als u een aangepaste faseringsresourcegroep gebruikt, vereist de door de gebruiker toegewezen beheerde identiteit ook extra machtigingen van Inzender voor deze resourcegroep om de sjabloon-VM tijdens het proces te kunnen implementeren.

Als u wilt dat VM Image Builder installatiekopieën distribueert, moet u een door de gebruiker toegewezen identiteit maken in Azure, met machtigingen voor het lezen en schrijven van installatiekopieën. U kunt bijvoorbeeld afbeeldingen distribueren naar beheerde afbeeldingen of naar Azure Compute Gallery. Als u toegang hebt tot Azure Storage, heeft de door de gebruiker toegewezen identiteit die u maakt machtigingen nodig voor het lezen van privé- of openbare containers.

U moet machtigingen en bevoegdheden instellen voordat u een image maakt. In de volgende secties wordt beschreven hoe u mogelijke scenario's configureert met behulp van PowerShell.

Maak een door de gebruiker toegewezen beheerde identiteit

Voor VM Image Builder moet u een door de gebruiker toegewezen beheerde Identiteit van Azure maken. VM Image Builder gebruikt deze identiteit om installatiekopieën te lezen, installatiekopieën te schrijven en toegang te krijgen tot Azure Storage-accounts. U verleent de identiteit toestemming om specifieke acties in uw abonnement uit te voeren.

Opmerking

Door de gebruiker toegewezen managed identiteit is de juiste manier om machtigingen te verlenen aan de afbeelding resource groepen. De SPN is hiervoor verouderd verklaard.

In het volgende voorbeeld ziet u hoe u een door de gebruiker toegewezen beheerde azure-identiteit maakt. Vervang de instellingen van de tijdelijke aanduidingen om uw variabelen in te stellen.

Configuratie Description
<Resourcegroep> De resourcegroep waaraan u de door de gebruiker toegewezen beheerde identiteit wilt maken.
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity

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

Zie De door de gebruiker toegewezen beheerde identiteit van Azure voor meer informatie.

VM Image Builder toestaan om images te distribueren

Opdat VM Image Builder afbeeldingen kan distribueren, moet de service worden toegelaten om de afbeeldingen in resourcegroepen te injecteren. Als u de vereiste machtigingen wilt instellen, maakt u een door de gebruiker toegewezen beheerde identiteit aan en verleent u deze toegang tot de resourcegroep waarin het image wordt gemaakt. VM Image Builder is niet gemachtigd om toegang te krijgen tot resources in andere resourcegroepen in het abonnement. U moet expliciete acties uitvoeren om toegang toe te staan, om te voorkomen dat uw builds mislukken.

U hoeft de door de gebruiker toegewezen inzenderrechten voor beheerde identiteiten niet toe te kennen aan de resourcegroep om afbeeldingen te distribueren. De door de gebruiker toegewezen beheerde identiteit heeft echter de volgende Azure-machtigingen Actions nodig in de distributieresourcegroep:

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

Als u wilt distribueren naar azure Compute Gallery, hebt u ook het volgende nodig:

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

Toestemming voor het aanpassen van bestaande afbeeldingen

Voor VM Image Builder om installatiekopieën te bouwen uit aangepaste broninstallatiekopieën, moet de service de installatiekopieën in deze resourcegroepen mogen lezen. Als u de vereiste machtigingen wilt verlenen, maakt u een door de gebruiker toegewezen beheerde identiteit en verleent u deze rechten voor de resourcegroep waar de afbeelding zich bevindt.

Op de volgende manier bouw je vanuit een bestaand aangepast image:

Microsoft.Compute/images/read

U bouwt als volgt op basis van een bestaande versie van de Azure Compute Gallery:

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

Toestemming voor het aanpassen van afbeeldingen in uw virtuele netwerken

VM Image Builder biedt de mogelijkheid om een bestaand virtueel netwerk in uw abonnement te implementeren en te gebruiken, waardoor aanpassingen toegang hebben tot verbonden resources.

U hoeft de door de gebruiker toegewezen inzenderrechten voor beheerde identiteiten niet toe te kennen aan de resourcegroep om een virtuele machine te implementeren in een bestaand virtueel netwerk. De door de gebruiker toegewezen beheerde identiteit heeft echter de volgende Azure-machtigingen Actions nodig voor de resourcegroep van het virtuele netwerk:

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

Een Azure-roldefinitie maken

In de volgende voorbeelden wordt een Azure-roldefinitie gemaakt op basis van de acties die in de vorige secties zijn beschreven. De voorbeelden worden toegepast op het niveau van de resourcegroep. Evalueer en test of de voorbeelden gedetailleerd genoeg zijn voor uw vereisten.

De afbeeldingsacties staan lezen en schrijven toe. Bepaal wat geschikt is voor uw omgeving. Maak bijvoorbeeld een rol om VM Image Builder toe te staan installatiekopieën te lezen uit resourcegroep example-rg-1 en installatiekopieën te schrijven naar resourcegroep example-rg-2.

Voorbeeld van aangepaste Azure-rol voor afbeeldingen

In dit voorbeeld wordt een Azure-rol gemaakt voor het gebruiken en distribueren van een aangepaste bronafbeelding. Vervolgens verleent u de aangepaste rol aan de door de gebruiker toegewezen beheerde identiteit voor VM Image Builder.

Als u de vervanging van waarden in het voorbeeld wilt vereenvoudigen, stelt u eerst de volgende variabelen in. Vervang de instellingen van de tijdelijke aanduidingen om uw variabelen in te stellen.

Configuratie Description
<Abonnements-id> Uw Azure-abonnements-id.
<Resourcegroep> Resourcegroep voor de aangepaste afbeelding.
$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

Voorbeeld van een bestaande Azure-rol van een virtueel netwerk

In het volgende voorbeeld wordt een Azure-rol gemaakt voor het gebruik en te distribueren van een bestaande virtueel-netwerk image. Vervolgens verleent u de aangepaste rol aan de door de gebruiker toegewezen beheerde identiteit voor VM Image Builder.

Als u de vervanging van waarden in het voorbeeld wilt vereenvoudigen, stelt u eerst de volgende variabelen in. Vervang de instellingen van de tijdelijke aanduidingen om uw variabelen in te stellen.

Configuratie Description
<Abonnements-id> Uw Azure-abonnements-id.
<Resourcegroep> De resourcegroep van het virtuele netwerk.
$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

Volgende stappen

Overzicht van Azure VM Image Builder