Konfigurace oprávnění Azure VM Image Builderu pomocí PowerShellu
Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️
Když zaregistrujete Azure VM Image Builder, udělíte službě oprávnění k vytváření, správě a odstraňování přípravné skupiny prostředků. Služba má také práva k přidání prostředků do skupiny prostředků, která je nutná pro sestavení image. Během úspěšné registrace získá vaše předplatné přístup k hlavnímu názvu služby (SPN) VM Image Builderu.
Pokud chcete, aby Image Builder virtuálního počítače distribuuje image, musíte v Azure vytvořit identitu přiřazenou uživatelem s oprávněními ke čtení a zápisu imagí. Můžete například chtít distribuovat image do spravovaných imagí nebo do Galerie výpočetních prostředků Azure. Pokud přistupujete ke službě Azure Storage, identita přiřazená uživatelem, kterou vytvoříte, potřebuje oprávnění ke čtení privátních nebo veřejných kontejnerů.
Před vytvořením image musíte nastavit oprávnění a oprávnění. Následující části podrobně popisuje, jak nakonfigurovat možné scénáře pomocí PowerShellu.
Vytvoření spravované identity přiřazené uživatelem
Image Builder virtuálního počítače vyžaduje, abyste vytvořili spravovanou identitu přiřazenou uživatelem Azure. Image Builder virtuálního počítače používá tuto identitu ke čtení imagí, zápisu imagí a přístupu k účtům Azure Storage. Identitě udělíte oprávnění k provádění konkrétních akcí ve vašem předplatném.
Poznámka:
Spravovaná identita přiřazená uživatelem je správný způsob, jak udělit oprávnění skupinám prostředků image. Hlavní název služby (SPN) je pro tento účel zastaralý.
Následující příklad ukazuje, jak vytvořit spravovanou identitu přiřazenou uživatelem Azure. Nahraďte nastavení zástupného symbolu a nastavte proměnné.
Nastavení | Popis |
---|---|
<Skupina prostředků> | Skupina prostředků, ve které chcete vytvořit spravovanou identitu přiřazenou uživatelem. |
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity
$parameters = @{
Name = 'aibIdentity'
ResourceGroupName = '<Resource group>'
}
# create identity
New-AzUserAssignedIdentity @parameters
Další informace najdete v tématu Spravovaná identita přiřazená uživatelem Azure.
Povolení distribuce imagí VM Image Builderu
Aby služba VM Image Builder distribuuje image, musí mít služba povoleno vkládat image do skupin prostředků. Pokud chcete udělit požadovaná oprávnění, vytvořte spravovanou identitu přiřazenou uživatelem a udělte jí oprávnění ke skupině prostředků, ve které je image vytvořená. VM Image Builder nemá oprávnění pro přístup k prostředkům v jiných skupinách prostředků v předplatném. Abyste zabránili selhání sestavení, musíte provést explicitní akce, které umožní přístup.
K distribuci imagí nemusíte u skupiny prostředků udělovat práva přispěvatele spravované identity přiřazené uživatelem. Spravovaná identita přiřazená uživatelem ale potřebuje v distribuční skupině prostředků následující oprávnění Azure Actions
:
Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete
Pokud chcete distribuovat do Galerie výpočetních prostředků Azure, potřebujete také:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write
Oprávnění k přizpůsobení existujících imagí
Aby nástroj Image Builder virtuálního počítače mohl vytvářet image ze zdrojových vlastních imagí, musí mít služba povolené čtení imagí do těchto skupin prostředků. Pokud chcete udělit požadovaná oprávnění, vytvořte spravovanou identitu přiřazenou uživatelem a udělte jí oprávnění ke skupině prostředků, ve které se image nachází.
Tady je postup sestavení z existující vlastní image:
Microsoft.Compute/images/read
Tady je postup sestavení z existující verze Galerie výpočetních prostředků Azure:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Oprávnění k přizpůsobení imagí ve virtuálních sítích
VM Image Builder má možnost nasadit a používat existující virtuální síť ve vašem předplatném, což umožňuje přizpůsobení přístupu k připojeným prostředkům.
Pokud chcete nasadit virtuální počítač do existující virtuální sítě, nemusíte u skupiny prostředků udělovat oprávnění přispěvatele spravované identity přiřazené uživatelem. Spravovaná identita přiřazená uživatelem ale potřebuje pro skupinu prostředků virtuální sítě následující oprávnění Azure Actions
:
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action
Vytvoření definice role Azure
Následující příklady vytvoří definici role Azure z akcí popsaných v předchozích částech. Příklady se použijí na úrovni skupiny prostředků. Vyhodnoťte a otestujte, jestli jsou příklady dostatečně podrobné pro vaše požadavky.
Akce obrázku umožňují čtení a zápis. Rozhodněte se, co je vhodné pro vaše prostředí. Vytvořte například roli, která umožní Nástroji image virtuálního počítače číst image ze skupiny prostředků example-rg-1 a zapisovat image do skupiny prostředků example-rg-2.
Příklad role Azure s vlastní imagí
Následující příklad vytvoří roli Azure pro použití a distribuci zdrojové vlastní image. Potom vlastní roli udělíte spravované identitě přiřazené uživatelem pro VM Image Builder.
Chcete-li zjednodušit nahrazení hodnot v příkladu, nastavte nejprve následující proměnné. Nahraďte nastavení zástupného symbolu a nastavte proměnné.
Nastavení | Popis |
---|---|
<ID předplatného> | ID vašeho předplatného Azure |
<Skupina prostředků> | Skupina prostředků pro vlastní image |
$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
Příklad existující role Azure virtuální sítě
Následující příklad vytvoří roli Azure pro použití a distribuci existující image virtuální sítě. Potom vlastní roli udělíte spravované identitě přiřazené uživatelem pro VM Image Builder.
Chcete-li zjednodušit nahrazení hodnot v příkladu, nastavte nejprve následující proměnné. Nahraďte nastavení zástupného symbolu a nastavte proměnné.
Nastavení | Popis |
---|---|
<ID předplatného> | ID vašeho předplatného Azure |
<Skupina prostředků> | Skupina prostředků virtuální sítě. |
$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