تعيين أدوار Azure باستخدام واجهة برمجة تطبيقات REST
Azure role based access control (Azure RBAC) هو نظام التخويل الذي تستخدمه لإدارة الوصول إلى موارد Azure. لمنح حق الوصول، يمكنك تعيين أدوار للمستخدمين أو المجموعات أو كيانات الخدمة أو الهويات المدارة في نطاق معين. توضح هذه المقالة كيفية تعيين الأدوار باستخدام واجهة برمجة تطبيقات REST.
المتطلبات الأساسية
لتعيين أدوار Azure، يجب أن يكون لديك:
Microsoft.Authorization/roleAssignments/writeالأذونات، مثل مسؤول وصول المستخدم أو المالك
تعيين دور Azure
لتعيين دور، استخدم تعيينات الدور - إنشاء واجهة برمجة تطبيقات REST وحدد أصل الأمان وتعريف الدور والنطاق. لاستدعاء واجهة برمجة التطبيقات هذه، يجب أن يكون لديك حق الوصول إلى الإجراء Microsoft.Authorization/roleAssignments/write . من بين الأدوار المضمنة، يتم منح المالكومسؤول وصول المستخدم فقط حق الوصول إلى هذا الإجراء.
استخدم تعريفات الدور - واجهة برمجة تطبيقات REST أو راجع الأدوار المضمنة للحصول على معرف تعريف الدور الذي تريد تعيينه.
استخدم أداة GUID لإنشاء معرف فريد سيتم استخدامه لمعرف تعيين الدور. يحتوي المعرف على التنسيق:
00000000-0000-0000-0000-000000000000ابدأ بالطلب والنص التاليين:
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2015-07-01{ "properties": { "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", "principalId": "{principalId}" } }داخل عنوان URI، استبدل {scope} بنطاق تعيين الدور.
النطاق النوع providers/Microsoft.Management/managementGroups/{groupId1}مجموعة الإدارة subscriptions/{subscriptionId1}الاشتراك subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1مجموعة الموارد subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1المورد في المثال السابق، microsoft.web هو موفر موارد يشير إلى مثيل خدمة التطبيق. وبالمثل، يمكنك استخدام أي موفري موارد آخرين وتحديد النطاق. لمزيد من المعلومات، راجع موفري موارد Azure وأنواعها وعملياتموفر موارد Azure المدعومة.
استبدل {roleAssignmentId} بمعرف المعرف الفريد العمومي لتعيين الدور.
ضمن نص الطلب، استبدل {scope} بنطاق تعيين الدور.
النطاق النوع providers/Microsoft.Management/managementGroups/{groupId1}مجموعة الإدارة subscriptions/{subscriptionId1}الاشتراك subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1مجموعة الموارد subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1المورد استبدل {roleDefinitionId} بمعرف تعريف الدور.
استبدل {principalId} بمعرف الكائن الخاص بالمستخدم أو المجموعة أو أصل الخدمة الذي سيتم تعيين الدور له.
يقوم الطلب والنص الأساسي التاليان بتعيين دور " قارئ النسخ الاحتياطي" لمستخدم في نطاق الاشتراك:
PUT https://management.azure.com/subscriptions/{subscriptionId1}/providers/microsoft.authorization/roleassignments/{roleAssignmentId1}?api-version=2015-07-01
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}"
}
}
يوضح ما يلي مثالا على الإخراج:
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}",
"scope": "/subscriptions/{subscriptionId1}",
"createdOn": "2020-05-06T23:55:23.7679147Z",
"updatedOn": "2020-05-06T23:55:23.7679147Z",
"createdBy": null,
"updatedBy": "{updatedByObjectId1}"
},
"id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}",
"type": "Microsoft.Authorization/roleAssignments",
"name": "{roleAssignmentId1}"
}
مدير الخدمة الجديد
إذا قمت بإنشاء مدير خدمة جديد وحاولت على الفور تعيين دور لمدير الخدمة هذا، فقد يفشل تعيين الدور هذا في بعض الحالات. على سبيل المثال، إذا قمت بإنشاء هوية مدارة جديدة ثم حاولت تعيين دور لأصل الخدمة هذا، فقد يفشل تعيين الدور. من المحتمل أن يكون سبب هذا الفشل هو تأخير النسخ المتماثل. يتم إنشاء مبدأ الخدمة في منطقة واحدة. ومع ذلك، قد يحدث تعيين الدور في منطقة مختلفة لم تقم بنسخ أصل الخدمة بعد.
لمعالجة هذا السيناريو، استخدم تعيينات الدور - إنشاء واجهة برمجة تطبيقات REST وقم بتعيين principalType الخاصية إلى ServicePrincipal. يجب عليك أيضا تعيين apiVersion إلى 2018-09-01-preview أو أحدث.
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2018-09-01-preview
{
"properties": {
"roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"principalId": "{principalId}",
"principalType": "ServicePrincipal"
}
}