إنشاء أو تحديث الدور المخصص لـ Azure باستخدام Azure PowerShell

إذا لم تلبِّ الأدوار المضمنة في Azureالاحتياجات المحددة لمؤسستك، يمكنك إنشاء أدوار مخصصة خاصة بك. توضح هذه المقالة كيفية سرد الأدوار المخصصة أو إنشاؤها أو تحديثها أو حذفها باستخدام Azure PowerShell.

للحصول على برنامج تعليمي خطوة بخطوة حول كيفية إنشاء دور مخصص، راجع البرنامج التعليمي: إنشاء دور مخصص ل Azure باستخدام Azure PowerShell.

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

المتطلبات الأساسية

لإنشاء أدوار مخصصة، تحتاج إلى:

الأدوار المخصصة بالقائمة

لسرد الأدوار المتوفرة للتعيين في نطاق، استخدم الأمر Get-AzRoleDefinition . يسرد المثال التالي جميع الأدوار المتوفرة للتعيين في الاشتراك المحدد.

Get-AzRoleDefinition | FT Name, IsCustom
Name                                              IsCustom
----                                              --------
Virtual Machine Operator                              True
AcrImageSigner                                       False
AcrQuarantineReader                                  False
AcrQuarantineWriter                                  False
API Management Service Contributor                   False
...

يسرد المثال التالي فقط الأدوار المخصصة المتوفرة للتعيين في الاشتراك المحدد.

Get-AzRoleDefinition -Custom | FT Name, IsCustom
Name                     IsCustom
----                     --------
Virtual Machine Operator     True

إذا لم يكن الاشتراك المحدد في AssignableScopes الدور، فلن يتم سرد الدور المخصص.

سرد تعريف دور مخصص

لسرد تعريف دور مخصص، استخدم Get-AzRoleDefinition. هذا هو نفس الأمر الذي تستخدمه لدور مضمن.

Get-AzRoleDefinition <role_name> | ConvertTo-Json
PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | ConvertTo-Json

{
  "Name": "Virtual Machine Operator",
  "Id": "00000000-0000-0000-0000-000000000000",
  "IsCustom": true,
  "Description": "Can monitor and restart virtual machines.",
  "Actions": [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.ResourceHealth/availabilityStatuses/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/11111111-1111-1111-1111-111111111111"
  ]
}

يسرد المثال التالي إجراءات الدور فقط:

(Get-AzRoleDefinition <role_name>).Actions
PS C:\> (Get-AzRoleDefinition "Virtual Machine Operator").Actions

"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"

إنشاء دور مخصص

لإنشاء دور مخصص، استخدم الأمر New-AzRoleDefinition . هناك طريقتان لهيكلة الدور، باستخدام PSRoleDefinition كائن أو قالب JSON.

الحصول على عمليات لموفر موارد

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

Get-AzProviderOperation <operation> | FT OperationName, Operation, Description -AutoSize
PS C:\> Get-AzProviderOperation "Microsoft.Compute/virtualMachines/*" | FT OperationName, Operation, Description -AutoSize

OperationName                                  Operation                                                      Description
-------------                                  ---------                                                      -----------
Get Virtual Machine                            Microsoft.Compute/virtualMachines/read                         Get the propertie...
Create or Update Virtual Machine               Microsoft.Compute/virtualMachines/write                        Creates a new vir...
Delete Virtual Machine                         Microsoft.Compute/virtualMachines/delete                       Deletes the virtu...
Start Virtual Machine                          Microsoft.Compute/virtualMachines/start/action                 Starts the virtua...
...

إنشاء دور مخصص باستخدام كائن PSRoleDefinition

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

يبدأ المثال التالي بدور مساهم الجهاز الظاهري المضمن لإنشاء دور مخصص يسمى عامل تشغيل الجهاز الظاهري. يمنح الدور الجديد حق الوصول إلى جميع إجراءات القراءة الخاصة بموفري موارد Microsoft.Compute وMicrosoft.Storage وMicrosoft.Network ويمنح حق الوصول إلى بدء تشغيل الأجهزة الظاهرية وإعادة تشغيلها ومراقبتها. يمكن استخدام الدور المخصص في اشتراكين.

$role = Get-AzRoleDefinition "Virtual Machine Contributor"
$role.Id = $null
$role.Name = "Virtual Machine Operator"
$role.Description = "Can monitor and restart virtual machines."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/*/read")
$role.Actions.Add("Microsoft.Network/*/read")
$role.Actions.Add("Microsoft.Compute/*/read")
$role.Actions.Add("Microsoft.Compute/virtualMachines/start/action")
$role.Actions.Add("Microsoft.Compute/virtualMachines/restart/action")
$role.Actions.Add("Microsoft.Authorization/*/read")
$role.Actions.Add("Microsoft.ResourceHealth/availabilityStatuses/read")
$role.Actions.Add("Microsoft.Resources/subscriptions/resourceGroups/read")
$role.Actions.Add("Microsoft.Insights/alertRules/*")
$role.Actions.Add("Microsoft.Support/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/00000000-0000-0000-0000-000000000000")
$role.AssignableScopes.Add("/subscriptions/11111111-1111-1111-1111-111111111111")
New-AzRoleDefinition -Role $role

يوضح المثال التالي طريقة أخرى لإنشاء دور مخصص لعامل تشغيل الجهاز الظاهري. يبدأ بإنشاء كائن جديد PSRoleDefinition . يتم تحديد الإجراءات في perms المتغير وتعيينها إلى الخاصية Actions . NotActions يتم تعيين الخاصية عن طريق قراءة NotActions من الدور المضمن مساهم الجهاز الظاهري. نظرا لأن Virtual Machine Contributor ليس لديه أي NotActions، فإن هذا السطر غير مطلوب، ولكنه يوضح كيف يمكن استرداد المعلومات من دور آخر.

$role = [Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition]::new()
$role.Name = 'Virtual Machine Operator 2'
$role.Description = 'Can monitor and restart virtual machines.'
$role.IsCustom = $true
$perms = 'Microsoft.Storage/*/read','Microsoft.Network/*/read','Microsoft.Compute/*/read'
$perms += 'Microsoft.Compute/virtualMachines/start/action','Microsoft.Compute/virtualMachines/restart/action'
$perms += 'Microsoft.Authorization/*/read'
$perms += 'Microsoft.ResourceHealth/availabilityStatuses/read'
$perms += 'Microsoft.Resources/subscriptions/resourceGroups/read'
$perms += 'Microsoft.Insights/alertRules/*','Microsoft.Support/*'
$role.Actions = $perms
$role.NotActions = (Get-AzRoleDefinition -Name 'Virtual Machine Contributor').NotActions
$subs = '/subscriptions/00000000-0000-0000-0000-000000000000','/subscriptions/11111111-1111-1111-1111-111111111111'
$role.AssignableScopes = $subs
New-AzRoleDefinition -Role $role

إنشاء دور مخصص باستخدام قالب JSON

يمكن استخدام قالب JSON كتعريف مصدر للدور المخصص. ينشئ المثال التالي دورا مخصصا يسمح بالوصول للقراءة إلى موارد التخزين والحوسبة، والوصول إلى الدعم، ويضيف هذا الدور إلى اشتراكين. أنشئ ملفا C:\CustomRoles\customrole1.json جديدا بالمثال التالي. يجب تعيين المعرف إلى null عند إنشاء الدور الأولي حيث يتم إنشاء معرف جديد تلقائيا.

{
  "Name": "Custom Role 1",
  "Id": null,
  "IsCustom": true,
  "Description": "Allows for read access to Azure storage and compute resources and access to support",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Storage/*/read",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/00000000-0000-0000-0000-000000000000",
    "/subscriptions/11111111-1111-1111-1111-111111111111"
  ]
}

لإضافة الدور إلى الاشتراكات، قم بتشغيل أمر PowerShell التالي:

New-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"

تحديث الدور المخصص

على غرار إنشاء دور مخصص، يمكنك تعديل دور مخصص موجود باستخدام العنصر PSRoleDefinition أو قالب JSON.

تحديث دور مخصص باستخدام كائن PSRoleDefinition

لتعديل دور مخصص، أولا، استخدم الأمر Get-AzRoleDefinition لاسترداد تعريف الدور. ثانيا، قم بإجراء التغييرات المطلوبة على تعريف الدور. وأخيرا، استخدم الأمر Set-AzRoleDefinition لحفظ تعريف الدور المعدل.

يضيف Microsoft.Insights/diagnosticSettings/* المثال التالي الإجراء إلى الدور المخصص لعامل تشغيل الجهاز الظاهري.

$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
Set-AzRoleDefinition -Role $role
PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.Actions.Add("Microsoft.Insights/diagnosticSettings/*")
PS C:\> Set-AzRoleDefinition -Role $role

Name             : Virtual Machine Operator
Id               : 88888888-8888-8888-8888-888888888888
IsCustom         : True
Description      : Can monitor and restart virtual machines.
Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                   Microsoft.Compute/virtualMachines/start/action...}
NotActions       : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                   /subscriptions/11111111-1111-1111-1111-111111111111}

يضيف المثال التالي اشتراك Azure إلى النطاقات القابلة للتعيين للدور المخصص لعامل تشغيل الجهاز الظاهري.

Get-AzSubscription -SubscriptionName Production3

$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/subscriptions/22222222-2222-2222-2222-222222222222")
Set-AzRoleDefinition -Role $role
PS C:\> Get-AzSubscription -SubscriptionName Production3

Name     : Production3
Id       : 22222222-2222-2222-2222-222222222222
TenantId : 99999999-9999-9999-9999-999999999999
State    : Enabled

PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.AssignableScopes.Add("/subscriptions/22222222-2222-2222-2222-222222222222")
PS C:\> Set-AzRoleDefinition -Role $role

Name             : Virtual Machine Operator
Id               : 88888888-8888-8888-8888-888888888888
IsCustom         : True
Description      : Can monitor and restart virtual machines.
Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                   Microsoft.Compute/virtualMachines/start/action...}
NotActions       : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                   /subscriptions/11111111-1111-1111-1111-111111111111,
                   /subscriptions/22222222-2222-2222-2222-222222222222}

يضيف المثال التالي مجموعة إدارة إلى AssignableScopesالدور المخصص لعامل تشغيل الجهاز الظاهري.

Get-AzManagementGroup

$role = Get-AzRoleDefinition "Virtual Machine Operator"
$role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/{groupId1}")
Set-AzRoleDefinition -Role $role
PS C:\> Get-AzManagementGroup

Id          : /providers/Microsoft.Management/managementGroups/marketing-group
Type        : /providers/Microsoft.Management/managementGroups
Name        : marketing-group
TenantId    : 99999999-9999-9999-9999-999999999999
DisplayName : Marketing group

PS C:\> $role = Get-AzRoleDefinition "Virtual Machine Operator"
PS C:\> $role.AssignableScopes.Add("/providers/Microsoft.Management/managementGroups/marketing-group")
PS C:\> Set-AzRoleDefinition -Role $role

Name             : Virtual Machine Operator
Id               : 88888888-8888-8888-8888-888888888888
IsCustom         : True
Description      : Can monitor and restart virtual machines.
Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                   Microsoft.Compute/virtualMachines/start/action...}
NotActions       : {}
AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                   /subscriptions/11111111-1111-1111-1111-111111111111,
                   /subscriptions/22222222-2222-2222-2222-222222222222,
                   /providers/Microsoft.Management/managementGroups/marketing-group}

تحديث دور مخصص باستخدام قالب JSON

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

{
  "Name": "Custom Role 1",
  "Id": "acce7ded-2559-449d-bcd5-e9604e50bad1",
  "IsCustom": true,
  "Description": "Allows for read access to Azure storage and compute resources and access to support",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/00000000-0000-0000-0000-000000000000",
    "/subscriptions/11111111-1111-1111-1111-111111111111"
  ]
}

لتحديث الدور الموجود، قم بتشغيل أمر PowerShell التالي:

Set-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"

حذف الدور المخصص

  1. قم بإزالة أي تعيينات دور تستخدم الدور المخصص. لمزيد من المعلومات، راجع البحث عن تعيينات الأدوار لحذف دور مخصص.

  2. استخدم الأمر Remove-AzRoleDefinition لحذف الدور المخصص.

    يزيل المثال التالي الدور المخصص لعامل تشغيل الجهاز الظاهري.

    Get-AzRoleDefinition "Virtual Machine Operator"
    Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
    
    PS C:\> Get-AzRoleDefinition "Virtual Machine Operator"
    
    Name             : Virtual Machine Operator
    Id               : 88888888-8888-8888-8888-888888888888
    IsCustom         : True
    Description      : Can monitor and restart virtual machines.
    Actions          : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
                       Microsoft.Compute/virtualMachines/start/action...}
    NotActions       : {}
    AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
                       /subscriptions/11111111-1111-1111-1111-111111111111}
    
    PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
    
    Confirm
    Are you sure you want to remove role definition with name 'Virtual Machine Operator'.
    [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y
    

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