تعيين أدوار Azure باستخدام Azure PowerShell

Azure role based access control (Azure RBAC) هو نظام التخويل الذي تستخدمه لإدارة الوصول إلى موارد Azure. لمنح حق الوصول، يمكنك تعيين أدوار للمستخدمين أو المجموعات أو كيانات الخدمة أو الهويات المدارة في نطاق معين. توضح هذه المقالة كيفية تعيين الأدوار باستخدام Azure CLI.

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

لتعيين الأدوار، يجب أن يكون لديك:

خطوات تعيين دور Azure

يتكون تعيين دور من ثلاثة عناصر: مبدأ الأمان وتعريف الدور والنطاق.

الخطوة 1: تحديد من يحتاج إلى الوصول

يمكنك تعيين دور لمستخدم أو مجموعة أو أصل خدمة أو هوية مدارة. لتعيين دور، قد تحتاج إلى تحديد المعرف الفريد للكائن. يحتوي المعرف على التنسيق: 11111111-1111-1111-1111-111111111111. يمكنك الحصول على المعرف باستخدام مدخل Azure أو Azure CLI.

⁩المستخدم⁧

بالنسبة لمستخدم Azure AD، احصل على الاسم الأساسي للمستخدم، مثل patlong@contoso.com معرف كائن المستخدم. للحصول على معرف الكائن، يمكنك استخدام عرض مستخدم الإعلان az.

az ad user show --id "{principalName}" --query "objectId" --output tsv

⁩مجموعة⁧

بالنسبة لمجموعة Azure AD، تحتاج إلى معرف كائن المجموعة. للحصول على معرف الكائن، يمكنك استخدام عرض المجموعة الإعلانية az أو قائمة المجموعة الإعلانية az.

az ad group show --group "{groupName}" --query "objectId" --output tsv

كيان الخدمة

بالنسبة إلى أصل خدمة Azure AD (الهوية المستخدمة بواسطة تطبيق)، تحتاج إلى معرف كائن أساسي للخدمة. للحصول على معرف الكائن، يمكنك استخدام قائمة az ad sp. بالنسبة لأصل خدمة، استخدم معرف الكائن وليس معرف التطبيق.

az ad sp list --all --query "[].{displayName:displayName, objectId:objectId}" --output tsv
az ad sp list --display-name "{displayName}"

⁩الهوية المُدارة⁧

بالنسبة إلى هوية مدارة تم تعيينها من قبل النظام أو من قبل المستخدم، تحتاج إلى معرف الكائن. للحصول على معرف الكائن، يمكنك استخدام قائمة az ad sp.

az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"

لسرد الهويات المدارة المعينة من قبل المستخدم فقط، يمكنك استخدام قائمة هوية az.

az identity list

الخطوة 2: حدد الدور المناسب

يتم تجميع الأذونات معا في أدوار. يمكنك الاختيار من قائمة تضم العديد من أدوار Azure المضمنة أو يمكنك استخدام الأدوار المخصصة الخاصة بك. من أفضل الممارسات منح حق الوصول بأقل قدر من الامتيازات المطلوبة، لذا تجنب تعيين دور أوسع.

لسرد الأدوار والحصول على معرف الدور الفريد، يمكنك استخدام قائمة تعريف الدور az.

az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv

إليك كيفية سرد تفاصيل دور معين.

az role definition list --name "{roleName}"

لمزيد من المعلومات، راجع سرد تعريفات دور Azure.

الخطوة 3: تحديد النطاق المطلوب

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

نطاق المورد

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

/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}

نطاق مجموعة الموارد

بالنسبة لنطاق مجموعة الموارد، تحتاج إلى اسم مجموعة الموارد. يمكنك العثور على الاسم في صفحة مجموعات الموارد في مدخل Azure أو يمكنك استخدام قائمة مجموعات az.

az group list --query "[].{name:name}" --output tsv

نطاق الاشتراك

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

az account list --query "[].{name:name, id:id}" --output tsv

نطاق مجموعة الإدارة

بالنسبة لنطاق مجموعة الإدارة، تحتاج إلى اسم مجموعة الإدارة. يمكنك العثور على الاسم في صفحة مجموعات الإدارة في مدخل Azure أو يمكنك استخدام قائمة مجموعات إدارة حساب az.

az account management-group list --query "[].{name:name, id:id}" --output tsv

الخطوة 4: تعيين دور

لتعيين دور، استخدم الأمر إنشاء تعيين دور az . اعتمادا على النطاق، يحتوي الأمر عادة على أحد التنسيقات التالية.

نطاق المورد

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"

نطاق مجموعة الموارد

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--resource-group "{resourceGroupName}"

نطاق الاشتراك

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--subscription "{subscriptionNameOrId}"

نطاق مجموعة الإدارة

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"

يوضح ما يلي مثالا على الإخراج عند تعيين دور "مساهم الجهاز الظاهري " لمستخدم في نطاق مجموعة موارد.

{
  "canDelegate": null,
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
  "name": "{roleAssignmentId}",
  "principalId": "{principalId}",
  "principalType": "User",
  "resourceGroup": "{resourceGroupName}",
  "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
  "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
  "type": "Microsoft.Authorization/roleAssignments"
}

تعيين أمثلة للأدوار

تعيين دور لجميع حاويات blob في نطاق مورد حساب التخزين

يعين دور "مساهم بيانات نقطة التخزين" إلى مدير خدمة مع معرف كائن 55555555-5555-5555-5555-55555555555555555555 في نطاق مورد لحساب تخزين يسمى storage12345.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"

تعيين دور لنطاق مورد حاوية نقطة معين

يعين دور "مساهم بيانات نقطة التخزين" إلى مدير خدمة مع معرف كائن 55555555-5555-5555-5555-555555555555555555555 في نطاق مورد لحاوية blob تسمى blob-container-01.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"

تعيين دور لمجموعة في نطاق مورد شبكة ظاهرية محدد

يعين دور المساهم في الجهاز الظاهري لمجموعة فريق آن ماك باستخدام المعرف 22222222-2222-2222-2222-2222222222222-2222222-22222-22222-222222-22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"

تعيين دور لمستخدم في نطاق مجموعة موارد

يعين دور "مساهم الجهاز الظاهري" للمستخدم patlong@contoso.com في نطاق مجموعة موارد مبيعات الأدوية .

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

تعيين دور لمستخدم باستخدام معرف الدور الفريد في نطاق مجموعة موارد

هناك عدة مرات قد يتغير فيها اسم الدور، على سبيل المثال:

  • أنت تستخدم دورك المخصص وتقرر تغيير الاسم.
  • أنت تستخدم دور معاينة يحتوي على (معاينة) في الاسم. عند تحرير الدور، تتم إعادة تسمية الدور.

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

يعين المثال التالي دور "مساهم الجهاز الظاهري" للمستخدم patlong@contoso.com في نطاق مجموعة موارد مبيعات الأدوية .

az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--resource-group "pharma-sales"

تعيين دور لجميع حاويات blob في نطاق مجموعة موارد

يعين دور "مساهم بيانات نقطة التخزين" إلى مدير خدمة مع معرف كائن 55555555-5555-5555-5555-55555555555555555 في نطاق مجموعة موارد Example-Storage-rg.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--resource-group "Example-Storage-rg"

بدلا من ذلك، يمكنك تحديد مجموعة الموارد المؤهلة بالكامل باستخدام المعلمة --scope :

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg"

تعيين دور لتطبيق في نطاق مجموعة موارد

يعين دور "مساهم الجهاز الظاهري" إلى تطبيق مع معرف كائن الخدمة الأساسي 44444444-4444-4444-4444-44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

تعيين دور لمدير خدمة جديد في نطاق مجموعة موارد

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

لتعيين دور، استخدم إنشاء تعيين دور az، وحدد قيمة ل --assignee-object-id، ثم قم بتعيينه --assignee-principal-type إلى ServicePrincipal.

az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--resource-group "{resourceGroupName}" \
--scope "/subscriptions/{subscriptionId}"

يعين المثال التالي دور "مساهم الجهاز الظاهري " إلى الهوية المدارة لاختبار msi في نطاق مجموعة موارد مبيعات الأدوية :

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

تعيين دور لمستخدم في نطاق اشتراك

يعين دور القارئ للمستخدم annm@example.com في نطاق اشتراك.

az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--subscription "00000000-0000-0000-0000-000000000000"

تعيين دور لمجموعة في نطاق اشتراك

يعين دور القارئ لمجموعة فريق آن ماك باستخدام المعرف 2222222-2222-2222-2222-2222-22222222222-22222222-222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--subscription "00000000-0000-0000-0000-000000000000"

تعيين دور لجميع حاويات blob في نطاق اشتراك

يعين دور "قارئ بيانات نقطة التخزين " للمستخدم alain@example.com في نطاق اشتراك.

az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

تعيين دور لمستخدم في نطاق مجموعة إدارة

يعين دور قارئ الفوترة للمستخدم alain@example.com في نطاق مجموعة إدارة.

az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"

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