مشاركة عبر


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

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

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

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

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

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

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

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

User

بالنسبة لمستخدم Microsoft Entra، احصل على اسم المستخدم الأساسي، مثل patlong@contoso.com أو معرف عنصر المستخدم. للحصول على معرف العنصر، يمكنك استخدام az ad user show.

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

مجموعة

بالنسبة لمجموعة Microsoft Entra، تحتاج إلى معرف كائن المجموعة. للحصول على معرف العنصر، يمكنك استخدام az ad group show أو az ad group list.

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

كيان الخدمة

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

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

الهوية المدارة

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

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

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

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 أربعة مستويات من النطاق: المورد ومجموعة موارد والاشتراك ومجموعة إدارة . من أفضل الممارسات منح الوصول بأقل امتياز مطلوب، لذا تجنب تعيين دور في نطاق أوسع. لمزيد من المعلومات حول النطاق، انظر فهم النطاق.

نطاق الموارد

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

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

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

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

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

نطاق اشتراك

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

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

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

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

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

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

لتعيين دور، استخدم الأمر az role assignment create. اعتمادا على النطاق، يحتوي الأمر عادة على أحد التنسيقات التالية.

نطاق الموارد

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}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

نطاق اشتراك

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"

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

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

يظهر التالي مثالا على الإخراج عند تعيين دور Virtual Machine Contributor لمستخدم في نطاق مجموعة موارد.

{
  "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"
}

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

تعيين دور لكافة حاويات الكائن الثنائي كبير الحجم في نطاق مورد حساب التخزين

تعيين دور Storage Blob Data Contributor إلى كيان خدمة بمعرف الكائن 5555555-5555-5555-5555-555555555 في نطاق مورد لحساب تخزين يسمى 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"

تعيين دور لنطاق مورد حاوية كائن ثنائي كبير الحجم محدد

تعيين دور مساهم بيانات الكائن الثنائي كبير الحجم للتخزين إلى كيان خدمة بمعرف الكائن 5555555-5555-5555-5555-555555555 في نطاق مورد لحاوية كائن ثنائي كبير الحجم تسمى 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"

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

تعيين دور مساهم الجهاز الظاهري إلى مجموعة فريق Ann Mack ذات المعرف 22222222-2222-2222-2222-2222222222 في نطاق موارد لشبكة ظاهرية تسمى pharma-sales-project-network.

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"

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

تعيين دور Virtual Machine Contributor للمستخدم patlong@contoso.com في نطاق مجموعة موارد مبيعات.

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

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

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

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

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

يعين المثال التالي دور Virtual Machine Contributor للمستخدم patlong@contoso.com في نطاق مجموعة موارد pharma-sales.

az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

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

تعيين دور Storage Blob Data Contributor إلى كيان خدمة بمعرف الكائن 5555555-5555-5555-5555-555555555 في نطاق مجموعة موارد Example-Storage-rg.

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"

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

تعيين دور Virtual Machine Contributor إلى تطبيق ذي معرف كائن كيان الخدمة 44444444-4444-4444-4444-444444444 في نطاق مجموعة موارد pharma-sales.

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

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

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

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

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

يعين المثال التالي دور Virtual Machine Contributor إلى الهوية المدارة msi-test في نطاق مجموعة موارد pharma-sales:

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

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

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

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

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

تعيين دور قارئ لمجموعة فريق Ann Mack بالمعرف 22222222-2222-2222-2222-222222222 في نطاق اشتراك.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

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

تعيين دور Storage Blob Data Reader للمستخدم 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"

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