استكشاف أخطاء Azure RBAC وإصلاحها
تجيب هذه المقالة على بعض الأسئلة الشائعة حول التحكم في الوصول المستند إلى دور Azure (Azure RBAC)، بحيث تعرف ما يمكن توقعه عند استخدام الأدوار ويمكنك استكشاف مشكلات الوصول وإصلاحها.
حد تعيينات دور Azure
يدعم Azure ما يصل إلى 2000 تعيين دور لكل اشتراك. يتضمن هذا الحد تعيينات الأدوار في الاشتراك ومجموعة الموارد ونطاقات الموارد، ولكن ليس في نطاق مجموعة الإدارة. إذا تلقيت رسالة الخطأ "لا يمكن إنشاء المزيد من تعيينات الأدوار (التعليمات البرمجية: RoleAssignmentLimitExceeded)" عند محاولة تعيين دور، فحاول تقليل عدد تعيينات الأدوار في الاشتراك.
ملاحظة
بدءا من نوفمبر 2021، تتم زيادة حد تعيينات الأدوار لجميع اشتراكات Azure تلقائيا من عام 2000 إلى عام 4000. لا يوجد أي إجراء تحتاج إلى اتخاذه لاشتراكك. ستستغرق زيادة الحد عدة أشهر.
إذا كنت تقترب من هذا الحد، فإليك بعض الطرق التي يمكنك من خلالها تقليل عدد تعيينات الأدوار:
- أضف مستخدمين إلى المجموعات وقم بتعيين أدوار للمجموعات بدلا من ذلك.
- الجمع بين أدوار مضمنة متعددة مع دور مخصص.
- قم بإجراء تعيينات أدوار مشتركة على نطاق أعلى، مثل الاشتراك أو مجموعة الإدارة.
- إذا كان لديك Azure AD Premium P2، فاجعل تعيينات الأدوار مؤهلة في Azure AD إدارة الهويات المتميزة بدلا من تعيينها نهائيا.
- إضافة اشتراك إضافي.
للحصول على عدد تعيينات الأدوار، يمكنك عرض المخطط في صفحة التحكم في الوصول (IAM) في مدخل Azure. يمكنك أيضا استخدام أوامر Azure PowerShell التالية:
$scope = "/subscriptions/<subscriptionId>"
$ras = Get-AzRoleAssignment -Scope $scope | Where-Object {$_.scope.StartsWith($scope)}
$ras.Count
حد تعيينات دور Azure لمجموعات الإدارة
يدعم Azure ما يصل إلى 500 تعيين دور لكل مجموعة إدارة. يختلف هذا الحد عن حد تعيينات الأدوار لكل اشتراك.
ملاحظة
يتم إصلاح حد تعيينات الدور البالغ 500 لكل مجموعة إدارة ولا يمكن زيادته.
مشاكل في تعيينات دور Azure
إذا لم تتمكن من تعيين دور في مدخل Azure على التحكم في الوصول (IAM) بسبب تعطيل الخيار تعيين دور AddAdd أو بسبب ظهور خطأ الأذونات "العميل الذي لديه معرف كائن ليس لديه تفويض لتنفيذ إجراء"، فتحقق من تسجيل الدخول حاليا باستخدام مستخدم تم تعيين> دور له
Microsoft.Authorization/roleAssignments/writeإذن مثل المالك أو مسؤول وصول المستخدم في النطاق الذي تقوم به محاولة تعيين الدور.إذا كنت تستخدم مبدأ خدمة لتعيين أدوار، فقد تظهر لك رسالة الخطأ "امتيازات غير كافية لإكمال العملية". على سبيل المثال، لنفترض أن لديك مدير خدمة تم تعيينه لدور المالك وتحاول إنشاء تعيين الدور التالي كأصل خدمة باستخدام Azure CLI:
az login --service-principal --username "SPNid" --password "password" --tenant "tenantid" az role assignment create --assignee "userupn" --role "Contributor" --scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"إذا تلقيت الخطأ "امتيازات غير كافية لإكمال العملية"، فمن المحتمل أن يكون ذلك بسبب محاولة Azure CLI البحث عن هوية المحال إليه في Azure AD ولا يمكن لمدير الخدمة قراءة Azure AD بشكل افتراضي.
هناك طريقتان لحل هذا الخطأ المحتمل. تتمثل الطريقة الأولى في تعيين دور " قراء الدليل" إلى مدير الخدمة حتى يتمكن من قراءة البيانات في الدليل.
الطريقة الثانية لحل هذا الخطأ هي إنشاء تعيين الدور باستخدام المعلمة
--assignee-object-idبدلا من--assignee. باستخدام--assignee-object-id، سوف يتخطى Azure CLI بحث Azure AD. ستحتاج إلى الحصول على معرف الكائن للمستخدم أو المجموعة أو التطبيق الذي تريد تعيين الدور إليه. لمزيد من المعلومات، راجع تعيين أدوار Azure باستخدام Azure CLI.az role assignment create --assignee-object-id 11111111-1111-1111-1111-111111111111 --role "Contributor" --scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"إذا قمت بإنشاء مدير خدمة جديد وحاولت على الفور تعيين دور لمدير الخدمة هذا، فقد يفشل تعيين الدور هذا في بعض الحالات.
لمعالجة هذا السيناريو، يجب تعيين الخاصية إلى
ServicePrincipalعند إنشاء تعيينprincipalTypeالدور. يجب عليك أيضا تعيين تعيينapiVersionالدور إلى2018-09-01-previewأو أحدث. لمزيد من المعلومات، راجع تعيين أدوار Azure إلى أصل خدمة جديد باستخدام واجهة برمجة تطبيقات REST أو تعيين أدوار Azure إلى مدير خدمة جديد باستخدامقوالب Azure Resource Managerإذا حاولت إزالة آخر تعيين دور للمالك لاشتراك، فقد يظهر لك الخطأ "لا يمكن حذف آخر تعيين لمسؤول RBAC". لا يتم دعم إزالة آخر تعيين لدور المالك لاشتراك لتجنب عزل الاشتراك. إذا كنت تريد إلغاء اشتراكك، فراجع إلغاء اشتراكك في Azure.
يسمح لك بإزالة آخر تعيين دور للمالك (أو مسؤول وصول المستخدم) في نطاق الاشتراك، إذا كنت المسؤول العمومي للمستأجر. في هذه الحالة ، لا يوجد قيد للحذف. ومع ذلك، إذا كانت المكالمة تأتي من مدير آخر، فلن تتمكن من إزالة آخر تعيين لدور المالك في نطاق الاشتراك.
مشاكل في الأدوار المخصصة
- إذا كنت بحاجة إلى خطوات حول كيفية إنشاء دور مخصص، فراجع البرامج التعليمية المخصصة للدور باستخدام مدخل Azure أو Azure PowerShell أو Azure CLI.
- إذا لم تتمكن من تحديث دور مخصص موجود، فتحقق من تسجيل الدخول حاليا باستخدام مستخدم تم تعيين دور له
Microsoft.Authorization/roleDefinition/writeإذن مثل المالك أو مسؤول وصول المستخدم. - إذا لم تتمكن من حذف دور مخصص وتلقيت رسالة الخطأ "هناك تعيينات دور موجودة تشير إلى الدور (التعليمات البرمجية: RoleDefinitionHasAssignments)"، فهناك تعيينات دور لا تزال تستخدم الدور المخصص. أزل تعيينات الأدوار هذه وحاول حذف الدور المخصص مرة أخرى.
- إذا تلقيت رسالة الخطأ "تم تجاوز حد تعريف الدور. لا يمكن إنشاء المزيد من تعريفات الأدوار (التعليمات البرمجية: RoleDefinitionLimitExceed)" عند محاولة إنشاء دور مخصص جديد، احذف أي أدوار مخصصة لم يتم استخدامها. يدعم Azure ما يصل إلى 5000 دور مخصص في الدليل. (بالنسبة إلى Azure Germany وAzure China 21Vianet، يكون الحد الأقصى هو 2000 دور مخصص.)
- إذا تلقيت خطأ مشابها ل "العميل لديه إذن لتنفيذ الإجراء 'Microsoft.Authorization/roleDefinitions/write' على النطاق '/subscriptions/{subscriptionid}'، ومع ذلك لم يتم العثور على الاشتراك المرتبط" عند محاولة تحديث دور مخصص، تحقق مما إذا كان قد تم حذف نطاق واحد أو أكثر قابل للتخصيص في الدليل. إذا تم حذف النطاق ، فقم بإنشاء تذكرة دعم حيث لا يوجد حل خدمة ذاتية متاح في الوقت الحالي.
الأدوار المخصصة ومجموعات الإدارة
- يمكنك تعريف مجموعة إدارة واحدة فقط في
AssignableScopesدور مخصص. إضافة مجموعة إدارة إلى AssignableScopes قيد المعاينة حاليًا - لا يمكن تعيين الأدوار المخصصة في
DataActionsنطاق مجموعة الإدارة. - لا يتحقق Azure Resource Manager من وجود مجموعة الإدارة في نطاق تعريف الدور القابل للتعيين.
- لمزيد من المعلومات حول الأدوار المخصصة ومجموعات الإدارة، راجع تنظيم مواردك باستخدام مجموعات إدارة Azure.
نقل اشتراك إلى دليل مختلف
- إذا كنت بحاجة إلى خطوات حول كيفية نقل اشتراك إلى دليل Azure AD مختلف، فراجع نقل اشتراك Azure إلى دليل Azure AD مختلف.
- إذا قمت بنقل اشتراك إلى دليل Azure AD مختلف، حذف جميع تعيينات الأدوار نهائيا من دليل Azure AD المصدر ولا يتم ترحيلها إلى دليل Azure AD الهدف. يجب إعادة إنشاء تعيينات الأدوار في الدليل الهدف. يجب عليك أيضا إعادة إنشاء الهويات المدارة يدويا لموارد Azure. لمزيد من المعلومات، راجع الأسئلة المتداولة والمشكلات المعروفة المتعلقة بالهويات المدارة.
- إذا كنت مسؤولا عاما في Azure AD ولم يكن لديك حق الوصول إلى اشتراك بعد نقله بين الأدلة، فاستخدم مفتاح التبديل إدارة الوصول لموارد Azure لرفعمستوى وصولك مؤقتا للوصول إلى الاشتراك.
مشاكل مع مسؤولي الخدمة أو المسؤولين المشاركين
- إذا كنت تواجه مشكلات مع مسؤول الخدمة أو المسؤولين المشاركين، فراجع إضافة أو تغيير مسؤولي اشتراك Azure وأدوار مسؤول الاشتراك الكلاسيكي وأدوار Azure وأدوار Azure AD.
رفض الوصول أو أخطاء الأذونات
- إذا تلقيت خطأ الأذونات "العميل الذي لديه معرف كائن ليس لديه تفويض لتنفيذ إجراء عبر النطاق (التعليمات البرمجية: AuthorizationFailed)" عند محاولة إنشاء مورد، تحقق من تسجيل الدخول حاليا باستخدام مستخدم تم تعيين دور له إذن كتابة إلى المورد في النطاق المحدد. على سبيل المثال، لإدارة الأجهزة الظاهرية في مجموعة موارد، يجب أن يكون لديك دور "مساهم الجهاز الظاهري " في مجموعة الموارد (أو النطاق الأصل). للحصول على قائمة بالأذونات لكل دور مضمن، راجع أدوار Azure المضمنة.
- إذا تلقيت خطأ الأذونات "ليس لديك إذن لإنشاء طلب دعم" عند محاولة إنشاء تذكرة دعم أو تحديثها، فتحقق من تسجيل الدخول حاليا باستخدام مستخدم تم تعيين دور له الإذن
Microsoft.Support/supportTickets/write، مثل "مساهم طلب الدعم".
نقل الموارد باستخدام تعيينات الأدوار
إذا قمت بنقل مورد يحتوي على دور Azure تم تعيينه مباشرة إلى المورد (أو مورد تابع)، فلن يتم نقل تعيين الدور ويصبح معزولا. بعد النقل، يجب إعادة إنشاء تعيين الدور. في نهاية المطاف، ستتم إزالة تعيين الدور المعزول تلقائيا، ولكن من أفضل الممارسات إزالة تعيين الدور قبل نقل المورد.
للحصول على معلومات حول كيفية نقل الموارد، راجع نقل الموارد إلى مجموعة موارد جديدة أو اشتراك جديد.
تعيينات الأدوار مع عدم العثور على الهوية
في قائمة تعيينات الأدوار لمدخل Azure، قد تلاحظ أن مدير الأمان (المستخدم أو المجموعة أو أصل الخدمة أو الهوية المدارة) مدرج كهوية غير موجودة بنوع غير معروف .

قد لا يتم العثور على الهوية لسببين:
- قمت مؤخرا بدعوة مستخدم عند إنشاء تعيين دور
- حذف مدير أمان يحتوي على تعيين دور
إذا قمت مؤخرا بدعوة مستخدم عند إنشاء تعيين دور، فقد يظل مبدأ الأمان هذا في عملية النسخ المتماثل عبر المناطق. إذا كان الأمر كذلك، فانتظر بضع لحظات وقم بتحديث قائمة تعيينات الأدوار.
ومع ذلك، إذا لم يكن مدير الأمان هذا مستخدما تمت دعوته مؤخرا، فقد يكون مبدأ أمان محذوفا. إذا قمت بتعيين دور لمدير أمان ثم قمت لاحقا بحذف مدير الأمان هذا دون إزالة تعيين الدور أولا، إدراج مدير الأمان كهوية لم يتم العثور عليها ونوع غير معروف .
إذا قمت بإدراج تعيين الدور هذا باستخدام Azure PowerShell، فقد ترى قيمة فارغة DisplayName و ، أو قيمة ل ObjectTypeUnknown.SignInName على سبيل المثال، يقوم Get-AzRoleAssignment بإرجاع تعيين دور مشابه للإخراج التالي:
RoleAssignmentId : /subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/22222222-2222-2222-2222-222222222222
Scope : /subscriptions/11111111-1111-1111-1111-111111111111
DisplayName :
SignInName :
RoleDefinitionName : Storage Blob Data Contributor
RoleDefinitionId : ba92f5b4-2d11-453d-a403-e96b0029c9fe
ObjectId : 33333333-3333-3333-3333-333333333333
ObjectType : User
CanDelegate : False
وبالمثل، إذا قمت بإدراج تعيين الدور هذا باستخدام Azure CLI، فقد ترى فراغا principalName. على سبيل المثال، ترجع قائمة تعيين دور az تعيين دور مشابه للإخراج التالي:
{
"canDelegate": null,
"id": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/22222222-2222-2222-2222-222222222222",
"name": "22222222-2222-2222-2222-222222222222",
"principalId": "33333333-3333-3333-3333-333333333333",
"principalName": "",
"roleDefinitionId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleDefinitions/ba92f5b4-2d11-453d-a403-e96b0029c9fe",
"roleDefinitionName": "Storage Blob Data Contributor",
"scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
"type": "Microsoft.Authorization/roleAssignments"
}
لا توجد مشكلة في ترك تعيينات الأدوار هذه حيث تم حذف مبدأ الأمان. إذا أردت، يمكنك إزالة تعيينات الأدوار هذه باستخدام خطوات مشابهة لتعيينات الأدوار الأخرى. للحصول على معلومات حول كيفية إزالة تعيينات الأدوار، راجع إزالة تعيينات دور Azure.
في PowerShell، إذا حاولت إزالة تعيينات الدور باستخدام معرف الكائن واسم تعريف الدور، وتطابق أكثر من تعيين دور واحد مع معلماتك، فستتلقى رسالة الخطأ: "لا يتم تعيين المعلومات المقدمة إلى تعيين دور". يعرض الإخراج التالي مثالا على رسالة الخطأ:
PS C:\> Remove-AzRoleAssignment -ObjectId 33333333-3333-3333-3333-333333333333 -RoleDefinitionName "Storage Blob Data Contributor"
Remove-AzRoleAssignment : The provided information does not map to a role assignment.
At line:1 char:1
+ Remove-AzRoleAssignment -ObjectId 33333333-3333-3333-3333-333333333333 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Remove-AzRoleAssignment], KeyNotFoundException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.RemoveAzureRoleAssignmentCommand
إذا تلقيت رسالة الخطأ هذه، فتأكد أيضا من تحديد المعلمات أو -ResourceGroupName المعلمات-Scope.
PS C:\> Remove-AzRoleAssignment -ObjectId 33333333-3333-3333-3333-333333333333 -RoleDefinitionName "Storage Blob Data Contributor" - Scope /subscriptions/11111111-1111-1111-1111-111111111111
لا يتم الكشف عن تغييرات تعيين الدور
يقوم Azure Resource Manager أحيانا بتخزين التكوينات والبيانات مؤقتا لتحسين الأداء. عند تعيين أدوار أو إزالة تعيينات الأدوار، قد يستغرق الأمر ما يصل إلى 30 دقيقة حتى تصبح التغييرات سارية المفعول. إذا كنت تستخدم مدخل Azure أو Azure PowerShell أو Azure CLI، فيمكنك فرض تحديث تغييرات تعيين الدور عن طريق تسجيل الخروج وتسجيل الدخول. إذا كنت تجري تغييرات في تعيين الدور باستخدام مكالمات واجهة برمجة تطبيقات REST، فيمكنك فرض تحديث عن طريق تحديث رمز الوصول المميز الخاص بك.
إذا قمت بإضافة تعيين دور أو إزالته في نطاق مجموعة الإدارة وكان الدور يحتوي عليه DataActions، فقد لا يتم تحديث الوصول على مستوى البيانات لعدة ساعات. ينطبق هذا فقط على نطاق مجموعة الإدارة ومستوى البيانات.
ميزات تطبيق الويب التي تتطلب الوصول إلى الكتابة
إذا منحت مستخدما حق الوصول للقراءة فقط إلى تطبيق ويب واحد، تعطيل بعض الميزات التي قد لا تتوقعها. تتطلب إمكانات الإدارة التالية الوصول للكتابة إلى تطبيق ويب (إما مساهم أو مالك)، ولا تتوفر في أي سيناريو للقراءة فقط.
- الأوامر (مثل البدء والإيقاف وما إلى ذلك)
- تغيير الإعدادات مثل التكوين العام وإعدادات المقياس وإعدادات النسخ الاحتياطي وإعدادات المراقبة
- الوصول إلى بيانات اعتماد النشر والأسرار الأخرى مثل إعدادات التطبيق وسلاسل الاتصال
- سجلات الدفق
- تكوين سجلات الموارد
- وحدة التحكم (موجه الأوامر)
- عمليات النشر النشطة والحديثة (للنشر المستمر ل git المحلي)
- الإنفاق المقدر
- اختبارات الويب
- شبكة ظاهرية (مرئية فقط للقارئ إذا تم تكوين شبكة افتراضية مسبقا بواسطة مستخدم لديه حق الوصول إلى الكتابة).
إذا لم تتمكن من الوصول إلى أي من هذه اللوحات، فستحتاج إلى مطالبة المسؤول بوصول المساهم إلى تطبيق الويب.
موارد تطبيقات الويب التي تتطلب الوصول إلى الكتابة
تطبيقات الويب معقدة بسبب وجود عدد قليل من الموارد المختلفة التي تتفاعل. فيما يلي مجموعة موارد نموذجية تحتوي على موقعين على الويب:

ونتيجة لذلك، إذا منحت شخصا ما حق الوصول إلى تطبيق الويب فقط، تعطيل الكثير من الوظائف الموجودة على شفرة موقع الويب في مدخل Azure.
تتطلب هذه العناصر الوصول الكتابي إلى خطة خدمة التطبيقات التي تتوافق مع موقع الويب الخاص بك:
- عرض طبقة تسعير تطبيق الويب (مجاني أو قياسي)
- تكوين المقياس (عدد المثيلات، حجم الجهاز الظاهري، إعدادات القياس التلقائي)
- الحصص (التخزين ، عرض النطاق الترددي ، وحدة المعالجة المركزية)
تتطلب هذه العناصر الوصول الكتابي إلى مجموعة الموارد بأكملها التي تحتوي على موقع الويب الخاص بك:
- شهادات TLS/SSL وارتباطاتها (يمكن مشاركة شهادات TLS/SSL بين المواقع في نفس مجموعة الموارد والموقع الجغرافي)
- قواعد التنبيه
- إعدادات التحجيم التلقائي
- مكونات رؤى التطبيق
- اختبارات الويب
ميزات الجهاز الظاهري التي تتطلب الوصول إلى الكتابة
على غرار تطبيقات الويب، تتطلب بعض الميزات الموجودة على شفرة الجهاز الظاهري الوصول إلى الكتابة إلى الجهاز الظاهري أو إلى موارد أخرى في مجموعة الموارد.
ترتبط الأجهزة الظاهرية بأسماء النطاقات والشبكات الظاهرية وحسابات التخزين وقواعد التنبيه.
تتطلب هذه العناصر الوصول للكتابة إلى الجهاز الظاهري:
- نقاط النهاية
- عناوين IP
- الأقراص
- ملحقات
تتطلب هذه الوصول إلى الكتابة إلى كل من الجهاز الظاهريومجموعة الموارد (جنبا إلى جنب مع اسم المجال) التي توجد فيها:
- مجموعة التوفّر
- مجموعة متوازنة الحمل
- قواعد التنبيه
إذا لم تتمكن من الوصول إلى أي من هذه اللوحات، فاطلب من المسؤول وصول المساهم إلى مجموعة الموارد.
Azure Functions والوصول إلى الكتابة
تتطلب بعض ميزات وظائف Azure الوصول إلى الكتابة. على سبيل المثال، إذا تم تعيين دور القارئ لمستخدم، فلن يتمكن من عرض الوظائف داخل تطبيق الوظائف. سيتم عرض البوابة الإلكترونية (لا يوجد وصول).

يمكن للقارئ النقر فوق علامة التبويب ميزات النظام الأساسي ثم النقر فوق كافة الإعدادات لعرض بعض الإعدادات المتعلقة بتطبيق وظيفة (على غرار تطبيق ويب)، ولكن لا يمكنه تعديل أي من هذه الإعدادات. للوصول إلى هذه الميزات، ستحتاج إلى دور المساهم .