عمليات نشر المستأجر مع ملف Bicep

مع نضوج مؤسستك، قد تحتاج إلى تحديد النهج وتعيينها أو التحكم في الوصول المستند إلى دور Azure (Azure RBAC) عبر مستأجر Microsoft Entra. باستخدام قوالب مستوى المستأجر، يمكنك تطبيق النهج بشكل مصرح به وتعيين الأدوار على مستوى عمومي.

موارد التدريب

إذا كنت تفضل معرفة نطاقات التوزيع من خلال إرشادات عملية، راجع توزيع الموارد للاشتراكات ومجموعات الإدارة والمستأجرين باستخدام Bicep.

الموارد المدعومة

لا يمكن توزيع كافة أنواع الموارد إلى مستوى المستأجر. يسرد هذا المقطع أنواع الموارد المعتمدة.

بالنسبة إلى عنصر تحكم الوصول استناداً إلى دور Azure (Azure RBAC)، استخدم:

بالنسبة للقوالب المتداخلة التي يتم توزيعها في مجموعات الإدارة أو الاشتراكات أو مجموعات الموارد، استخدم:

بالنسبة لإنشاء مجموعات الإدارة، استخدم:

لإنشاء الاشتراكات، استخدم:

لإدارة تكاليف، استخدم:

لتكوين المدخل، قم باستخدام:

تعد تعريفات النُّهج المضمنة موارد على مستوى المستأجر، ولكن لا يمكنك توزيع تعريفات نهج مخصصة عند المستأجر. للحصول على مثال لتعيين تعريف نهج مضمن إلى مورد، راجع مثال tenantResourceId.

عين نطاق

لتعيين النطاق إلى المستأجر، استخدم:

targetScope = 'tenant'

الوصول المطلوب

يجب أن يكون للمدير الأساسي الذي يوزع القالب أذونات لإنشاء موارد في نطاق المستأجر. يجب أن يكون لدى الحساب الأساسي إذن لتنفيذ إجراءات التوزيع (Microsoft.Resources/deployments/*) وإنشاء الموارد المعرفة في القالب. على سبيل المثال، لإنشاء مجموعة إدارة، يجب أن يحصل المدير على إذن المساهم في نطاق المستأجر. لإنشاء مهام الدور، يجب أن يكون لدى الحساب الأساسي إذن المالك.

لا يملك مسؤول istrator العمومي لمعرف Microsoft Entra الإذن تلقائيا لتعيين الأدوار. لتمكين توزيع القالب في نطاق المستأجر، يجب على المسؤول العام القيام بالخطوات التالية:

  1. رفع مستوى الوصول إلى الحساب بحيث يمكن للمسؤول العام تعيين الأدوار. لمزيد من المعلومات، راجع رفع مستوى الوصول لإدارة كافة اشتراكات Azure ومجموعات الإدارة.

  2. تعيين مالك أو مساهم للحساب الأساسي الذي يحتاج إلى توزيع القوالب.

    New-AzRoleAssignment -SignInName "[userId]" -Scope "/" -RoleDefinitionName "Owner"
    
    az role assignment create --assignee "[userId]" --scope "/" --role "Owner"
    

يمتلك الحساب الأساسي الآن الأذونات المطلوبة لتوزيع القالب.

أوامر التوزيع

تختلف أوامر عمليات توزيع المستأجر عن الأوامر الخاصة بعمليات توزيع مجموعة الموارد.

بالنسبة إلى Azure CLI، استخدم إنشاء مستأجر التوزيع من az :

az deployment tenant create \
  --name demoTenantDeployment \
  --location WestUS \
  --template-file main.bicep

للحصول على مزيد من المعلومات التفصيلية حول أوامر النشر وخيارات نشر قوالب ARM، راجع:

موقع التوزيع والاسم

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

يمكنك توفير اسم لعملية التوزيع، أو استخدام اسم التوزيع الافتراضي. يكون الاسم الافتراضي هو اسم ملف القالب. على سبيل المثال، يؤدي نشر ملف باسم main.bicep إلى إنشاء اسم نشر افتراضي يسمى main.

يكون الموقع غير قابل للتغيير لكل اسم عملية توزيع. ولا يمكنك إنشاء عملية توزيع في أحد المواقع عندما يكون هناك توزيع موجود بنفس الاسم في موقع آخر. على سبيل المثال، إذا قمت بإنشاء توزيع للمستأجر باسم deployment1 في الموقع centralus، فلا يمكنك لاحقًا إنشاء توزيع آخر بالاسم deployment1 في الموقع westus. إذا تلقيت رمز الخطأ InvalidDeploymentLocation، فاستخدم اسمًا مختلفًا أو نفس موقع التوزيع السابق لذلك الاسم.

نطاقات التوزيع

عند التوزيع إلى مستأجر، يمكنك توزيع الموارد إلى:

  • المستأجر
  • مجموعات إدارة داخل المستأجر
  • اشتراكات
  • مجموعات موارد

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

يجب أن يكون لدى المستخدم الذي يقوم بتوزيع القالب حق الوصول إلى النطاق المحدد.

يوضح هذا القسم كيفية تحديد النطاقات المختلفة. يمكنك دمج هذه النطاقات المختلفة في قالب واحد.

نطاق للمستأجر

يتم تطبيق الموارد المعرفة داخل ملف Bicep على المستأجر.

targetScope = 'tenant'

// create resource at tenant
resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  ...
}

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

لاستهداف مجموعة إدارة داخل المستأجر، أضف module. واستخدم الدالة ManagementGroup لتعيين الخاصية scope الخاصة بها. أدخل اسم مجموعة الإدارة.

targetScope = 'tenant'

param managementGroupName string

// create resources at management group level
module  'module.bicep' = {
  name: 'deployToMG'
  scope: managementGroup(managementGroupName)
}

نطاق للاشتراك

لاستهداف اشتراك داخل المستأجر، أضف وحدة نمطية. استخدم الدالة subscription لتعيين الخاصية scope الخاصة بها. وقم بتوفير معرف الاشتراك.

targetScope = 'tenant'

param subscriptionID string

// create resources at subscription level
module  'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

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

لاستهداف مجموعة موارد داخل المستأجر، أضف وحدة نمطية. واستخدم الدالة resourceGroup لتعيين الخاصية scope الخاصة بها. ادخل معرف الاشتراك، واسم مجموعة الموارد.

targetScope = 'tenant'

param resourceGroupName string
param subscriptionID string

// create resources at resource group level
module  'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

إنشاء مجموعة الإدارة

يقوم القالب التالي بإنشاء مجموعة الإدارة.

targetScope = 'tenant'
param mgName string = 'mg-${uniqueString(newGuid())}'

resource mgName_resource 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: mgName
  properties: {}
}

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

تعيين دور

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

targetScope = 'tenant'

@description('principalId of the user that will be given contributor access to the resourceGroup')
param principalId string

@description('roleDefinition for the assignment - default is owner')
param roleDefinitionId string = '8e3af657-a8ff-443c-a75c-2fe8c4bcb635'

var roleAssignmentName = guid(principalId, roleDefinitionId)

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: tenantResourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
    principalId: principalId
  }
}

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

للتعرف على النطاقات الأخرى، راجع: