عمليات توزيع مجموعة الموارد باستخدام الملفات Bicep

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

مع نضوج مؤسستك، يمكنك نشر ملف Bicep لإنشاء موارد على مستوى مجموعة الإدارة. على سبيل المثال: قد تحتاج إلى تحديد وتعيين ⁧⁩ النُهج ⁧⁩، أو ⁧⁩ التحكم في الوصول استنادًا إلى الدور Azure (Azure RBAC) ⁧⁩ لمجموعة إدارة. باستخدام قوالب مستوى مجموعة الإدارة، يمكنك تطبيق النُهج بشكل إعلاني، وتعيين الأدوار على مستوى مجموعة الإدارة.

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

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

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

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

بخصوص Azure Blueprints، استخدم:

بالنسبة إلى نهج Azure، استخدم:

للتحكم في الوصول، استخدم:

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

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

مجموعات الإدارة هي موارد مستوى المستأجر. ومع ذلك، يمكنك إنشاء مجموعات إدارة في نشر مجموعة إدارة عن طريق تعيين نطاق مجموعة الإدارة الجديدة إلى المستأجر. راجع ⁧⁩ مجموعة الإدارة ⁧⁩.

عين نطاق

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

targetScope = 'managementGroup'

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

للنشر إلى مجموعة إدارة، استخدم أوامر نشر مجموعة الإدارة.

بالنسبة إلى Azure CLI، استخدم ⁧⁩ توزيع azure mg create ⁧⁩:

az deployment mg create \
  --name demoMGDeployment \
  --location WestUS \
  --management-group-id myMG \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/management-level-deployment/azuredeploy.json"

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

موقع النشر واسمه

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

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

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

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

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

  • مجموعة الإدارة المستهدفة من هذه العملية
  • مجموعة الإدارة الأخرى في المستأجر
  • اشتراكات في مجموعة الإدارة
  • مجموعات الموارد داخل مجموعة الإدارة
  • مستأجر مجموعة الموارد

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

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

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

لتوزيع الموارد إلى مجموعة الإدارة المستهدفة، أضف هذه الموارد باستخدام الكلمة الرئيسية ⁧resource⁩.

targetScope = 'managementGroup'

// policy definition created in the management group
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  ...
}

لاستهداف مجموعة إدارة أخرى، أضف ⁧⁩"وحدة نمطية"⁧⁩. واستخدم ⁧⁩الوظيفة ManagementGroup⁧⁩ لكي تعين الخاصية ⁧scope⁩ الخاصة بها. أدخل اسم مجموعة الإدارة.

targetScope = 'managementGroup'

param otherManagementGroupName string

// module deployed at management group level but in a different management group
module exampleModule 'module.bicep' = {
  name: 'deployToDifferentMG'
  scope: managementGroup(otherManagementGroupName)
}

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

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

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

targetScope = 'managementGroup'

param subscriptionID string

// module deployed to subscription in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(subscriptionID)
}

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

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

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

targetScope = 'managementGroup'

param subscriptionID string
param resourceGroupName string

// module deployed to resource group in the management group
module exampleModule 'module.bicep' = {
  name: 'deployToRG'
  scope: resourceGroup(subscriptionID, resourceGroupName)
}

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

لإنشاء موارد في المستأجر، أضف الوحدة النمطية. استخدم ⁧⁩الوظيفة tenant⁧⁩ لتعيين الخاصية ⁧scope⁩ الخاصة بها. يجب أن يكون لدى المستخدم الذي يقوم بتوزيع القالب ⁧⁩حق الوصول المطلوب للتوزيع لدى المستأجر⁧⁩.

targetScope = 'managementGroup'

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

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

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

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

ينشئ المثال التالي مجموعة الإدارة الجديدة في مجموعة إدارة الجذر.

targetScope = 'managementGroup'

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

resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output newManagementGroup string = mgName

ينشئ المثال التالي مجموعة إدارة جديدة في مجموعة الإدارة المستهدفة للتوزيع. يستخدم ⁧⁩ الوظيفة لمجموعة الإدارة ⁧⁩.

targetScope = 'managementGroup'

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

resource newMG 'Microsoft.Management/managementGroups@2021-04-01' = {
  scope: tenant()
  name: mgName
  properties: {
    details: {
      parent: {
        id: managementGroup().id
      }
    }
  }
}

output newManagementGroup string = mgName

الاشتراكات

لاستخدام قالب ARM لإنشاء اشتراك Azure جديد في مجموعة الإدارة، راجع:

لنشر قالب ينقل اشتراك Azure الحالي إلى مجموعة إدارة جديدة، راجع ⁧⁩ نقل الاشتراكات في قالب ARM ⁧

نهج Azure

تعد تعريفات النهج المخصصة التي يتم توزيعها في مجموعة الإدارة ملحقات لمجموعة الإدارة. للحصول على معرف تعريف نهج مخصص، استخدم ⁧⁩الوظيفة extensionResourceId()⁧⁩. تعريفات النهج المضمنة هي موارد على مستوى المستأجر. للحصول على معرف تعريف نهج مضمن، استخدم الوظيفة ⁧⁩ tenantResourceId () ⁧⁩.

يوضح المثال التالي كيفية ⁧⁩ تحديد ⁧⁩ نهج على مستوى مجموعة الإدارة، وتعيينها.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2021-06-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2022-06-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

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

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