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 behörigheter 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 få åtkomst till Azure Storage-konton. Du ger identiteten behörighet att utföra specifika åtgärder i din prenumeration.
Kommentar
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 azure-användartilldelad hanterad identitet. Ersätt platshållarinställningarna för att ange variablerna.
Inställning | 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 till 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 explicita åtgärder för att tillåta åtkomst för att förhindra att dina versioner 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 resursgruppen 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 Azure Compute Gallery-version:
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 ge den användartilldelade hanterade identitetsdeltagaren behörighet för 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 resursgruppen för virtuella nätverk:
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 för att tillåta vm Image Builder att 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.
För att förenkla bytet av värden i exemplet anger du följande variabler först. Ersätt platshållarinställningarna för att ange variablerna.
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
Azure-rollexempel 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.
För att förenkla bytet av värden i exemplet anger du följande variabler först. Ersätt platshållarinställningarna för att ange variablerna.
Inställning | beskrivning |
---|---|
<Prenumerations-ID> | ditt prenumerations-ID för Azure |
<Resursgrupp> | Resursgruppen för virtuellt nätverk. |
$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