تعيين أدوار 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 list. بالنسبة إلى كيان الخدمة، استخدم معرف الكائن وليس معرف التطبيق.

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

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

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

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}

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

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

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

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

{
  "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 إلى كيان خدمة بمعرف الكائن 55555555-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"

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

تعيين دور Storage Blob Data Contributor إلى كيان خدمة بمعرف الكائن 55555555-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-222222222 في نطاق مورد لشبكة ظاهرية تسمى 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"

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

تعيين دور 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"

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

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

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

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

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

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 إلى كيان خدمة بمعرف الكائن 55555555-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"

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

تعيين دور مساهم الجهاز الظاهري إلى تطبيق بمعرف كائن كيان الخدمة 444444444-4444-4444-4444-4444444444 في نطاق مجموعة موارد مبيعات دارما.

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

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

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-222222222222 في نطاق اشتراك.

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

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

تعيين دور alain@example.com Storage Blob Data Reader للمستخدم في نطاق الاشتراك.

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"

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