إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
التحكم في الوصول المستند إلى الدور Azure (Azure RBAC) هو نظام التخويل الذي تستخدمه لإدارة الوصول إلى موارد Azure. لمنح حق الوصول، يمكنك تعيين أدوار للمستخدمين أو المجموعات أو كيانات الخدمة أو الهويات المدارة في نطاق معين. بالإضافة إلى استخدام Azure PowerShell أو Azure CLI، يمكنك تعيين أدوار باستخدام قوالب Azure Resource Manager. يمكن أن تكون القوالب مفيدة إذا كنت بحاجة إلى نشر الموارد باستمرار وبشكل متكرر. توضح هذه المقالة كيفية تعيين الأدوار باستخدام القوالب.
ملاحظة
Bicep هي لغة جديدة لتعريف موارد Azure. يتمتع بتجربة تأليف أبسط من JSON، بالإضافة إلى الميزات الأخرى التي تساعد على تحسين جودة البنية الأساسية كتعليل برمجي. نوصي بأن يستخدم أي شخص جديد في البنية الأساسية كتعلم برمجي على Azure Bicep بدلا من JSON.
للتعرف على كيفية تعريف تعيينات الأدوار باستخدام Bicep، راجع إنشاء موارد Azure RBAC باستخدام Bicep. للحصول على مثال التشغيل السريع، راجع التشغيل السريع: تعيين دور Azure باستخدامBicep .
المتطلبات الأساسية
لتعيين أدوار Azure، يجب أن يكون لديك:
-
Microsoft.Authorization/roleAssignments/writeأذونات، مثل مسؤول التحكم في الوصول استنادا إلى الدور أو مسؤول وصول المستخدم
يجب استخدام الإصدارات التالية:
-
2018-09-01-previewأو أحدث لتعيين دور Azure إلى كيان خدمة جديد -
2020-04-01-previewأو أحدث لتعيين دور Azure في نطاق المورد -
2022-04-01هو أول إصدار مستقر
لمزيد من المعلومات، راجع إصدارات واجهة برمجة التطبيقات من واجهات برمجة تطبيقات AZURE RBAC REST.
الحصول على معرفات الكائن
لتعيين دور، تحتاج إلى تحديد معرف المستخدم أو المجموعة أو التطبيق الذي تريد تعيين الدور إليه. يحتوي المعرف على التنسيق: 11111111-1111-1111-1111-111111111111. يمكنك الحصول على المعرف باستخدام مدخل Microsoft Azure أو Azure PowerShell أو Azure CLI.
المستخدم
للحصول على معرف مستخدم، يمكنك استخدام Get-AzADUser أو az ad user show commands.
$objectid = (Get-AzADUser -DisplayName "{name}").id
objectid=$(az ad user show --id "{email}" --query id --output tsv)
مجموعة
للحصول على معرف مجموعة، يمكنك استخدام Get-AzADGroup أو az ad group إظهار أوامر.
$objectid = (Get-AzADGroup -DisplayName "{name}").id
objectid=$(az ad group show --group "{name}" --query id --output tsv)
الهويات المُدارة
للحصول على معرف هوية مدارة، يمكنك استخدام Get-AzAdServiceprincipal أو أوامر az ad sp.
$objectid = (Get-AzADServicePrincipal -DisplayName <Azure resource name>).id
objectid=$(az ad sp list --display-name <Azure resource name> --query [].id --output tsv)
Application
للحصول على معرف كيان الخدمة (الهوية المستخدمة من قبل أحد التطبيقات)، يمكنك استخدام Get-AzADServicePrincipal أو قائمة az ad sp الأوامر. بالنسبة إلى كيان الخدمة، استخدم معرف الكائن لا معرف التطبيق.
$objectid = (Get-AzADServicePrincipal -DisplayName "{name}").id
objectid=$(az ad sp list --display-name "{name}" --query [].id --output tsv)
تعيين دور Azure
في Azure RBAC، لمنح حق الوصول، يمكنك تعيين دور.
نطاق مجموعة الموارد (بدون معلمات)
يوضح القالب التالي طريقة أساسية لتعيين دور. يتم تحديد بعض القيم داخل القالب. يوضح القالب التالي:
- كيفية تعيين دور قارئ لمستخدم أو مجموعة أو تطبيق في نطاق مجموعة موارد
لاستخدام القالب، يجب عليك القيام بما يلي:
- إنشاء ملف JSON جديد ونسخ القالب
- استبدل
<your-principal-id>بمعرف مستخدم أو مجموعة أو هوية مدارة أو تطبيق لتعيين الدور إلى
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(resourceGroup().id)]",
"properties": {
"roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"principalId": "<your-principal-id>"
}
}
]
}
فيما يلي مثال New-AzResourceGroupDeployment وaz deployment group إنشاء أوامر لكيفية بدء النشر في مجموعة موارد تسمى ExampleGroup.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json
يعرض التالي مثالا لتعيين دور القارئ لمستخدم لمجموعة موارد بعد نشر القالب.
مجموعة الموارد أو نطاق الاشتراك
القالب السابق غير مرن جدا. يستخدم القالب التالي المعلمات ويمكن استخدامه في نطاقات مختلفة. يوضح القالب التالي:
- كيفية تعيين دور لمستخدم أو مجموعة أو تطبيق في مجموعة موارد أو نطاق اشتراك
- كيفية تحديد أدوار المالك والمساهم والقارئ كمعلمة
لاستخدام القالب، يجب تحديد المدخلات التالية:
- معرف مستخدم أو مجموعة أو هوية مدارة أو تطبيق لتعيين الدور إليه
- معرف فريد سيتم استخدامه لتعيين الدور، أو يمكنك استخدام المعرف الافتراضي
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
ملاحظة
هذا القالب غير متكرر ما لم يتم توفير نفس قيمة roleNameGuid كمعلمة لكل نشر للقالب. إذا لم يتم توفير أي roleNameGuid، يتم إنشاء GUID جديد بشكل افتراضي على كل عملية نشر وستفشل عمليات النشر اللاحقة مع حدوث خطأ Conflict: RoleAssignmentExists.
يتم تحديد نطاق تعيين الدور من مستوى النشر. فيما يلي مثال New-AzResourceGroupDeployment وaz deployment group إنشاء أوامر لكيفية بدء النشر في نطاق مجموعة موارد.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Reader
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader
فيما يلي مثال New-AzDeploymentaz deployment sub create commands لكيفية بدء النشر في نطاق اشتراك وتحديد الموقع.
New-AzDeployment -Location centralus -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Reader
az deployment sub create --location centralus --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Reader
نطاق المورد
إذا كنت بحاجة إلى تعيين دور على مستوى مورد، فقم بتعيين الخاصية scope على تعيين الدور إلى اسم المورد.
يوضح القالب التالي:
- كيفية إنشاء حساب تخزين جديد
- كيفية تعيين دور لمستخدم أو مجموعة أو تطبيق في نطاق حساب التخزين
- كيفية تحديد أدوار المالك والمساهم والقارئ كمعلمة
لاستخدام القالب، يجب تحديد المدخلات التالية:
- معرف مستخدم أو مجموعة أو هوية مدارة أو تطبيق لتعيين الدور إليه
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalId": {
"type": "string",
"metadata": {
"description": "The principal to assign the role to"
}
},
"builtInRoleType": {
"type": "string",
"allowedValues": [
"Owner",
"Contributor",
"Reader"
],
"metadata": {
"description": "Built-in role to assign"
}
},
"roleNameGuid": {
"type": "string",
"defaultValue": "[newGuid()]",
"metadata": {
"description": "A new GUID used to identify the role assignment"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"Owner": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')]",
"Contributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
"Reader": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]",
"storageName": "[concat('storage', uniqueString(resourceGroup().id))]"
},
"resources": [
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[parameters('roleNameGuid')]",
"scope": "[concat('Microsoft.Storage/storageAccounts', '/', variables('storageName'))]",
"dependsOn": [
"[variables('storageName')]"
],
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[parameters('principalId')]"
}
}
]
}
لنشر القالب السابق، يمكنك استخدام أوامر مجموعة الموارد. فيما يلي مثال New-AzResourceGroupDeployment وaz deployment group إنشاء أوامر لكيفية بدء النشر في نطاق مورد.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup -TemplateFile rbac-test.json -principalId $objectid -builtInRoleType Contributor
az deployment group create --resource-group ExampleGroup --template-file rbac-test.json --parameters principalId=$objectid builtInRoleType=Contributor
يعرض التالي مثالا على تعيين دور المساهم لمستخدم لحساب تخزين بعد نشر القالب.
كيان خدمة جديد
إذا قمت بإنشاء كيان خدمة جديد وحاولت على الفور تعيين دور إلى كيان الخدمة هذا، فقد يفشل تعيين الدور هذا في بعض الحالات. على سبيل المثال، إذا قمت بإنشاء هوية مدارة جديدة ثم حاولت تعيين دور إلى كيان الخدمة هذا في نفس قالب Azure Resource Manager، فقد يفشل تعيين الدور. من المحتمل أن يكون سبب هذا الفشل هو تأخير النسخ المتماثل. يتم إنشاء كيان الخدمة في منطقة واحدة؛ ومع ذلك، قد يحدث تعيين الدور في منطقة مختلفة لم تقم بنسخ كيان الخدمة نسخا متماثلا حتى الآن.
لمعالجة هذا السيناريو، يجب تعيين الخاصية principalType إلى ServicePrincipal عند إنشاء تعيين الدور. يجب أيضا تعيين apiVersion تعيين الدور إلى 2018-09-01-preview أو أحدث.
2022-04-01 هو الإصدار المستقر الأول.
يوضح القالب التالي:
- كيفية إنشاء كيان خدمة هوية مدار جديد
- كيفية تحديد
principalType - كيفية تعيين دور المساهم إلى كيان الخدمة هذا في نطاق مجموعة الموارد
لاستخدام القالب، يجب تحديد المدخلات التالية:
- الاسم الأساسي للهوية المدارة، أو يمكنك استخدام السلسلة الافتراضية
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"baseName": {
"type": "string",
"defaultValue": "msi-test"
}
},
"variables": {
"identityName": "[concat(parameters('baseName'), '-bootstrap')]",
"bootstrapRoleAssignmentId": "[guid(concat(resourceGroup().id, 'contributor'))]",
"contributorRoleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]"
},
"resources": [
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"name": "[variables('identityName')]",
"apiVersion": "2018-11-30",
"location": "[resourceGroup().location]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[variables('bootstrapRoleAssignmentId')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
],
"properties": {
"roleDefinitionId": "[variables('contributorRoleDefinitionId')]",
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName')), '2018-11-30').properties.principalId]",
"principalType": "ServicePrincipal"
}
}
]
}
فيما يلي مثال New-AzResourceGroupDeployment وaz deployment group إنشاء أوامر لكيفية بدء النشر في نطاق مجموعة موارد.
New-AzResourceGroupDeployment -ResourceGroupName ExampleGroup2 -TemplateFile rbac-test.json
az deployment group create --resource-group ExampleGroup2 --template-file rbac-test.json
يعرض التالي مثالا على تعيين دور المساهم إلى كيان خدمة هوية مدار جديد بعد نشر القالب.