Mengonfigurasi izin Azure VM Image Builder dengan menggunakan PowerShell
Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel
Saat Anda mendaftar untuk Azure VM Image Builder, hal ini memberikan izin layanan untuk membuat, mengelola, dan menghapus grup sumber daya penahapan. Layanan ini juga memiliki hak untuk menambahkan sumber daya ke grup sumber daya, yang diperlukan untuk build gambar. Selama pendaftaran yang berhasil, langganan Anda mendapatkan akses ke nama prinsipal layanan (SPN) VM Image Builder.
Jika Anda ingin VM Image Builder mendistribusikan gambar, Anda perlu membuat identitas yang ditetapkan pengguna di Azure, dengan izin untuk membaca dan menulis gambar. Misalnya, Anda mungkin ingin mendistribusikan gambar ke gambar terkelola atau ke Azure Compute Gallery. Jika Anda mengakses Azure Storage, identitas yang ditetapkan pengguna yang Anda buat memerlukan izin untuk membaca kontainer privat atau publik.
Anda harus menyiapkan izin dan hak istimewa sebelum membangun gambar. Bagian berikut ini merinci cara mengonfigurasi skenario yang mungkin terjadi menggunakan PowerShell.
Membuat identitas terkelola yang ditetapkan pengguna
VM Image Builder mengharuskan Anda membuat identitas terkelola yang ditetapkan pengguna Azure. VM Image Builder menggunakan identitas ini untuk membaca gambar, menulis gambar, dan mengakses akun Azure Storage. Anda memberikan izin identitas untuk melakukan tindakan tertentu pada langganan Anda.
Catatan
Identitas terkelola yang ditetapkan pengguna adalah cara yang benar untuk memberikan izin ke grup sumber daya gambar. SPN tidak digunakan lagi untuk tujuan ini.
Contoh berikut ini memperlihatkan kepada Anda cara membuat identitas terkelola yang ditetapkan pengguna Azure. Ganti pengaturan tempat penampung untuk mengatur variabel Anda.
Pengaturan | Deskripsi |
---|---|
<Grup sumber daya> | Grup sumber daya tempat Anda ingin membuat identitas terkelola yang ditetapkan pengguna. |
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity
$parameters = @{
Name = 'aibIdentity'
ResourceGroupName = '<Resource group>'
}
# create identity
New-AzUserAssignedIdentity @parameters
Untuk informasi selengkapnya, lihat Identitas terkelola yang ditetapkan pengguna Azure.
Izinkan VM Image Builder untuk mendistribusikan gambar
Agar VM Image Builder dapat mendistribusikan gambar, layanan harus diizinkan untuk memasukkan gambar ke grup sumber daya. Untuk memberikan izin yang diperlukan, Anda perlu membuat identitas terkelola yang ditetapkan pengguna, dan memberikannya hak pada grup sumber daya tempat gambar dibangun. VM Image Builder tidak memiliki izin untuk mengakses sumber daya di grup sumber daya lain dalam langganan. Anda perlu mengambil tindakan nyata untuk mengizinkan akses, agar pembangunan Anda tidak gagal.
Anda tidak perlu memberikan hak kontributor identitas terkelola yang ditetapkan pengguna pada grup sumber daya untuk mendistribusikan citra. Namun, identitas terkelola yang ditetapkan pengguna memerlukan izin Actions
Azure berikut ini dalam grup sumber daya distribusi:
Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete
Jika Anda ingin mendistribusikan ke Azure Compute Gallery, Anda juga memerlukan:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write
Izin untuk mengkustomisasi citra yang sudah ada
Agar VM Image Builder membangun gambar dari gambar kustom sumber, layanan harus diizinkan untuk memasukkan gambar ke dalam grup sumber daya ini. Untuk memberikan izin yang diperlukan, Anda perlu membuat identitas terkelola yang ditetapkan pengguna, dan memberikannya hak pada grup sumber daya tempat gambar berada.
Berikut adalah cara Anda membangun dari gambar kustom yang sudah ada:
Microsoft.Compute/images/read
Berikut adalah cara Anda membangun dari versi Azure Compute Gallery yang sudah ada:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Izin untuk menyesuaikan gambar pada jaringan virtual Anda
VM Image Builder memiliki kemampuan untuk menyebarkan dan menggunakan jaringan virtual yang ada di langganan Anda, sehingga memungkinkan akses kustomisasi ke sumber daya yang tersambung.
Anda tidak perlu memberikan hak kontributor identitas terkelola yang ditetapkan pengguna pada grup sumber daya untuk menyebarkan mesin virtual ke jaringan virtual yang sudah ada. Namun, identitas terkelola yang ditetapkan pengguna memerlukan izin Azure Actions
berikut ini pada grup sumber daya jaringan:
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action
Membuat definisi peran Azure
Contoh berikut ini membuat definisi peran Azure dari tindakan yang dijelaskan di bagian sebelumnya. Contoh diterapkan di tingkat grup sumber daya. Evaluasi dan uji apakah contohnya cukup terperinci untuk kebutuhan Anda.
Tindakan citra memungkinkan baca dan tulis. Tentukan apa yang sesuai untuk lingkungan Anda. Contohnya, buat peran untuk mengizinkan VM Image Builder membaca gambar dari grup sumber daya example-rg-1 dan menulis gambar ke grup sumber daya example-rg-2.
Contoh peran Azure citra kustom
Contoh berikut membuat peran Azure untuk menggunakan dan mendistribusikan citra kustom sumber. Anda kemudian memberikan peran kustom ke identitas terkelola yang ditetapkan pengguna untuk VM Image Builder.
Untuk menyederhanakan penggantian nilai dalam contoh, atur variabel berikut terlebih dahulu. Ganti pengaturan tempat penampung untuk mengatur variabel Anda.
Pengaturan | Deskripsi |
---|---|
<ID Langganan> | ID langganan Azure Anda. |
<Grup sumber daya> | Grup sumber daya untuk gambar kustom. |
$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
Contoh peran Azure jaringan virtual yang sudah ada
Contoh berikut membuat peran Azure untuk menggunakan dan mendistribusikan gambar jaringan virtual yang sudah ada. Anda kemudian memberikan peran kustom ke identitas terkelola yang ditetapkan pengguna untuk VM Image Builder.
Untuk menyederhanakan penggantian nilai dalam contoh, atur variabel berikut terlebih dahulu. Ganti pengaturan tempat penampung untuk mengatur variabel Anda.
Pengaturan | Deskripsi |
---|---|
<ID Langganan> | ID langganan Azure Anda. |
<Grup sumber daya> | Grup sumber daya jaringan virtual. |
$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