إنشاء أو تحديث الدور المخصص لـ Azure باستخدام Azure PowerShell
إذا لم تلبِّ الأدوار المضمنة في Azureالاحتياجات المحددة لمؤسستك، يمكنك إنشاء أدوار مخصصة خاصة بك. توضح هذه المقالة كيفية سرد الأدوار المخصصة أو إنشاؤها أو تحديثها أو حذفها باستخدام Azure PowerShell.
للحصول على برنامج تعليمي خطوة بخطوة حول كيفية إنشاء دور مخصص، راجع البرنامج التعليمي: إنشاء دور مخصص ل Azure باستخدام Azure PowerShell.
إشعار
نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.
المتطلبات الأساسية
لإنشاء أدوار مخصصة، تحتاج إلى:
- أذونات إنشاء أدوار مخصصة، مثل المستخدم Access مسؤول istrator
- Azure Cloud ShellأوAzure PowerShell
الأدوار المخصصة بالقائمة
لسرد الأدوار المتوفرة للتعيين في نطاق، استخدم الأمر 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"
حذف الدور المخصص
قم بإزالة أي تعيينات دور تستخدم الدور المخصص. لمزيد من المعلومات، راجع البحث عن تعيينات الأدوار لحذف دور مخصص.
استخدم الأمر 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