Konfigurera Azure VM Image Builder-behörigheter med hjälp av PowerShell

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

När du registrerar dig för Azure VM Image Builder ger detta tjänsten behörighet att skapa, hantera och ta bort en mellanlagringsresursgrupp. Tjänsten har också behörighet att lägga till resurser i en resursgrupp som krävs för avbildningsversionen. Under en lyckad registrering får din prenumeration åtkomst till ett SPN (Vm Image Builder Service Principal Name).

Om du vill att VM Image Builder ska distribuera avbildningar måste du skapa en användartilldelad identitet i Azure med behörighet att läsa och skriva avbildningar. Du kanske till exempel vill distribuera avbildningar till hanterade avbildningar eller till Azure Compute Gallery. Om du har åtkomst till Azure Storage måste den användartilldelade identitet som du skapar ha behörighet att läsa privata eller offentliga containrar.

Du måste konfigurera behörigheter och privilegier innan du skapar en avbildning. I följande avsnitt beskrivs hur du konfigurerar möjliga scenarier med hjälp av PowerShell.

Skapa en användartilldelad hanterad identitet

Vm Image Builder kräver att du skapar en användartilldelad hanterad identitet i Azure. VM Image Builder använder den här identiteten för att läsa avbildningar, skriva avbildningar och komma åt Azure Storage-konton. Du ger identiteten behörighet att utföra specifika åtgärder i din prenumeration.

Anteckning

Användartilldelad hanterad identitet är rätt sätt att bevilja behörigheter till avbildningsresursgrupperna. SPN är inaktuellt för detta ändamål.

I följande exempel visas hur du skapar en användartilldelad hanterad identitet i Azure. Ersätt platshållarinställningarna för att ange dina variabler.

Inställningen Beskrivning
<Resursgrupp> Den resursgrupp där du vill skapa den användartilldelade hanterade identiteten.
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity

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

Mer information finns i Användartilldelad hanterad identitet i Azure.

Tillåt att VM Image Builder distribuerar avbildningar

För att VM Image Builder ska kunna distribuera avbildningar måste tjänsten tillåtas att mata in avbildningarna i resursgrupper. Om du vill bevilja de behörigheter som krävs skapar du en användartilldelad hanterad identitet och ger den behörighet för den resursgrupp där avbildningen skapas. VM Image Builder har inte behörighet att komma åt resurser i andra resursgrupper i prenumerationen. Du måste vidta uttryckliga åtgärder för att tillåta åtkomst för att förhindra att dina byggen misslyckas.

Du behöver inte ge den användartilldelade hanterade identitetsdeltagaren behörighet för resursgruppen för att distribuera avbildningar. Den användartilldelade hanterade identiteten behöver dock följande Azure-behörigheter Actions i distributionsresursgruppen:

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

Om du vill distribuera till Azure Compute Gallery behöver du också:

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

Behörighet att anpassa befintliga avbildningar

För att VM Image Builder ska kunna skapa avbildningar från anpassade källavbildningar måste tjänsten kunna läsa avbildningarna i dessa resursgrupper. Om du vill bevilja nödvändiga behörigheter skapar du en användartilldelad hanterad identitet och ger den behörighet för den resursgrupp där avbildningen finns.

Så här skapar du från en befintlig anpassad avbildning:

Microsoft.Compute/images/read

Så här skapar du från en befintlig Version av Azure Compute Gallery:

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

Behörighet att anpassa avbildningar i dina virtuella nätverk

Vm Image Builder har möjlighet att distribuera och använda ett befintligt virtuellt nätverk i din prenumeration, vilket ger anpassningar åtkomst till anslutna resurser.

Du behöver inte bevilja behörigheten användartilldelad hanterad identitetsdeltagare i resursgruppen för att distribuera en virtuell dator till ett befintligt virtuellt nätverk. Den användartilldelade hanterade identiteten behöver dock följande Azure-behörigheter Actions för den virtuella nätverksresursgruppen:

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

Skapa en Azure-rolldefinition

I följande exempel skapas en Azure-rolldefinition från de åtgärder som beskrivs i föregående avsnitt. Exemplen tillämpas på resursgruppsnivå. Utvärdera och testa om exemplen är tillräckligt detaljerade för dina behov.

Bildåtgärderna tillåter läsning och skrivning. Bestäm vad som är lämpligt för din miljö. Skapa till exempel en roll så att VM Image Builder kan läsa avbildningar från resursgruppen example-rg-1 och skriva avbildningar till resursgruppen example-rg-2.

Exempel på anpassad avbildning av Azure-roll

I följande exempel skapas en Azure-roll för att använda och distribuera en anpassad källbild. Sedan beviljar du den anpassade rollen till den användartilldelade hanterade identiteten för VM Image Builder.

Om du vill förenkla bytet av värden i exemplet anger du följande variabler först. Ersätt platshållarinställningarna för att ange dina variabler.

Inställning Beskrivning
<Prenumerations-ID> ditt prenumerations-ID för Azure
<Resursgrupp> Resursgrupp för den anpassade avbildningen.
$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

Exempel på azure-roll för befintligt virtuellt nätverk

I följande exempel skapas en Azure-roll för att använda och distribuera en befintlig virtuell nätverksbild. Sedan beviljar du den anpassade rollen till den användartilldelade hanterade identiteten för VM Image Builder.

Om du vill förenkla bytet av värden i exemplet anger du följande variabler först. Ersätt platshållarinställningarna för att ange dina variabler.

Inställning Beskrivning
<Prenumerations-ID> ditt prenumerations-ID för Azure
<Resursgrupp> Den virtuella nätverksresursgruppen.
$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ästa steg

Översikt över Azure VM Image Builder