مشاركة عبر


تكوين أذونات Azure VM Image Builder باستخدام PowerShell

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات مقياس مرنة

عند التسجيل في Azure VM Image Builder، يمنح هذا إذن الخدمة لإنشاء مجموعة موارد مرحلية وإدارتها وحذفها. تمتلك الخدمة أيضا حقوق إضافة موارد إلى مجموعة موارد مطلوبة لإنشاء الصورة. أثناء التسجيل الناجح، يحصل اشتراكك على حق الوصول إلى الاسم الأساسي لخدمة VM Image Builder (SPN).

‏‫ملاحظة‬

إذا كنت تستخدم مجموعة موارد مرحلية مخصصة، فإن الهوية المدارة المعينة من قبل المستخدم تتطلب أيضا أذونات إضافية من المساهم عبر مجموعة الموارد هذه، لتتمكن من نشر الجهاز الظاهري القالب أثناء العملية.

إذا كنت تريد أن يقوم VM Image Builder بتوزيع الصور، فأنت بحاجة إلى إنشاء هوية معينة من قبل المستخدم في Azure، مع أذونات لقراءة الصور وكتابتها. على سبيل المثال، قد ترغب في توزيع الصور على الصور المدارة أو إلى Azure Compute Gallery. إذا كنت تقوم بالوصول إلى Azure Storage، فإن الهوية المعينة من قبل المستخدم التي تقوم بإنشائها تحتاج إلى أذونات لقراءة الحاويات الخاصة أو العامة.

يجب إعداد الأذونات والامتيازات قبل إنشاء صورة. توضح الأقسام التالية بالتفصيل كيفية تكوين السيناريوهات المحتملة باستخدام PowerShell.

إنشاء هوية مُدارة يعينها المستخدم

يتطلب منك منشئ صور الجهاز الظاهري إنشاء هوية مدارة معينة من قبل مستخدم Azure. يستخدم VM Image Builder هذه الهوية لقراءة الصور وكتابة الصور والوصول إلى حسابات Azure Storage. يمكنك منح إذن الهوية للقيام بإجراءات محددة في اشتراكك.

‏‫ملاحظة‬

الهوية المدارة المعينة من قبل المستخدم هي الطريقة الصحيحة لمنح الأذونات لمجموعات موارد الصور. تم إهمال SPN لهذا الغرض.

يوضح لك المثال التالي كيفية إنشاء هوية مدارة معينة من قبل مستخدم Azure. استبدل إعدادات العنصر النائب لتعيين المتغيرات.

الإعداد Description
<مجموعة الموارد> مجموعة الموارد حيث تريد إنشاء الهوية المدارة المعينة من قبل المستخدم.
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity

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

لمزيد من المعلومات، راجع الهوية المدارة المعينة من قبل مستخدم Azure.

السماح ل VM Image Builder بتوزيع الصور

لكي يقوم VM Image Builder بتوزيع الصور، يجب السماح للخدمة بحقن الصور في مجموعات الموارد. لمنح الأذونات المطلوبة، قم بإنشاء هوية مدارة معينة من قبل المستخدم، وامنحها حقوقا على مجموعة الموارد حيث تم إنشاء الصورة. لا يمتلك منشئ صور الجهاز الظاهري إذنا للوصول إلى الموارد في مجموعات الموارد الأخرى في الاشتراك. تحتاج إلى اتخاذ إجراءات صريحة للسماح بالوصول ، لمنع فشل الإصدارات الخاصة بك.

لا تحتاج إلى منح حقوق مساهم الهوية المدارة المعين من قبل المستخدم في مجموعة الموارد لتوزيع الصور. ومع ذلك، تحتاج الهوية المدارة المعينة من قبل المستخدم إلى أذونات Azure Actions التالية في مجموعة موارد التوزيع:

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

إذا كنت ترغب في التوزيع على Azure Compute Gallery، فأنت بحاجة أيضا إلى:

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

إذن تخصيص الصور الموجودة

لكي يقوم VM Image Builder بإنشاء صور من الصور المخصصة المصدر، يجب السماح للخدمة بقراءة الصور في مجموعات الموارد هذه. لمنح الأذونات المطلوبة، قم بإنشاء هوية مدارة معينة من قبل المستخدم، وامنحها حقوقا على مجموعة الموارد حيث توجد الصورة.

إليك كيفية الإنشاء من صورة مخصصة موجودة:

Microsoft.Compute/images/read

فيما يلي كيفية الإنشاء من إصدار Azure Compute Gallery موجود:

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

إذن لتخصيص الصور على شبكاتك الظاهرية

يتمتع VM Image Builder بالقدرة على نشر واستخدام شبكة ظاهرية موجودة في اشتراكك، مما يسمح بالوصول إلى التخصيصات إلى الموارد المتصلة.

لا تحتاج إلى منح حقوق مساهم الهوية المدارة المعين من قبل المستخدم على مجموعة الموارد لنشر جهاز ظاهري على شبكة ظاهرية موجودة. ومع ذلك، تحتاج الهوية المدارة المعينة من قبل المستخدم إلى أذونات Azure Actions التالية على مجموعة موارد الشبكة الظاهرية:

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

إنشاء تعريف دور Azure

تنشئ الأمثلة التالية تعريف دور Azure من الإجراءات الموضحة في الأقسام السابقة. يتم تطبيق الأمثلة على مستوى مجموعة الموارد. قم بتقييم واختبار ما إذا كانت الأمثلة دقيقة بما يكفي لمتطلباتك.

تسمح إجراءات الصورة بالقراءة والكتابة. قرر ما هو مناسب لبيئتك. على سبيل المثال، قم بإنشاء دور للسماح ل VM Image Builder بقراءة الصور من مجموعة الموارد example-rg-1، وكتابة الصور إلى مجموعة الموارد example-rg-2.

مثال على دور Azure للصورة المخصصة

ينشئ المثال التالي دور Azure لاستخدام صورة مخصصة مصدر وتوزيعها. ثم تمنح الدور المخصص للهوية المدارة المعينة من قبل المستخدم ل VM Image Builder.

لتبسيط استبدال القيم في المثال، قم بتعيين المتغيرات التالية أولا. استبدل إعدادات العنصر النائب لتعيين المتغيرات.

الإعداد Description
<معرف الاشتراك> معرّف اشتراك Azure.
<مجموعة الموارد> مجموعة الموارد للصورة المخصصة.
$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 للشبكة الظاهرية الحالية

ينشئ المثال التالي دور Azure لاستخدام صورة شبكة ظاهرية موجودة وتوزيعها. ثم تمنح الدور المخصص للهوية المدارة المعينة من قبل المستخدم ل VM Image Builder.

لتبسيط استبدال القيم في المثال، قم بتعيين المتغيرات التالية أولا. استبدل إعدادات العنصر النائب لتعيين المتغيرات.

الإعداد Description
<معرف الاشتراك> معرّف اشتراك Azure.
<مجموعة الموارد> مجموعة موارد الشبكة الظاهرية.
$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

الخطوات التالية

نظرة عامة على Azure VM Image Builder