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

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

تلميح

نوصي باستخدام Bicep لأنها تقدم نفس الإمكانات التي توفرها قوالب ARM ولأن بناء الجملة أسهل في الاستخدام. لمعرفة المزيد، راجع عمليات توزيع مجموعة الإدارة.

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

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

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

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

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

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

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

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

المخطط

يختلف المخطط الذي تستخدمه لعمليات نشر مجموعة الإدارة عن المخطط الخاص بعمليات نشر مجموعة الموارد.

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  ...
}

مخطط ملف المعلمة هو نفسه لجميع نطاقات التوزيع. بالنسبة لملفات المعلمات، قم باستخدام:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

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

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

بالنسبة إلى 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، فاستخدم اسماً مختلفاً أو نفس موقع النشر السابق لذلك الاسم.

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

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

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

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

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

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

النطاق لاستهداف مجموعة الإدارة

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    management-group-resources-default
  ],
  "outputs": {}
}

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

لاستهداف مجموعة إدارة أخرى، أضف عملية نشر متداخلة وحدد الخاصية scope. قم بتعيين الخاصية scope على قيمة بالتنسيق Microsoft.Management/managementGroups/<mg-name>.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string"
    }
  },
  "variables": {
    "mgId": "[format('Microsoft.Management/managementGroups/{0}', parameters('mgName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "nestedDeployment",
      "scope": "[variables('mgId')]",
      "location": "eastus",
      "properties": {
        "mode": "Incremental",
        "template": {
          management-group-resources-non-default
        }
      }
    }
  ],
  "outputs": {}
}

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

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

لاستهداف اشتراك داخل مجموعة الإدارة، استخدم النشر المتداخل والخاصية subscriptionId.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "nestedSub",
      "location": "westus2",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              subscription-resources
            }
          ]
        }
      }
    }
  ]
}

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

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

لاستهداف مجموعة موارد داخل مجموعة الإدارة، استخدم عملية نشر متداخلة. تعيين خصائص subscriptionId وresourceGroup. لا تقم بتعيين موقع للنشر المتداخل لأنه منشور في موقع مجموعة الموارد.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "nestedRGDeploy",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              resource-group-resources
            }
          ]
        }
      }
    }
  ]
}

لاستخدام نشر مجموعة الإدارة لإنشاء مجموعة موارد ضمن اشتراك ونشر حساب تخزين لمجموعة الموارد هذه، راجع النشر إلى مجموعة الموارد والاشتراك.

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

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

لاستخدام نشر متداخل، قم بتعيين scope وlocation.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "nestedDeployment",
      "location": "centralus",
      "scope": "/",
      "properties": {
        "mode": "Incremental",
        "template": {
          tenant-resources
        }
      }
    }
  ],
  "outputs": {}
}

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

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

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

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('mgName')]",
      "scope": "/",
      "location": "eastus",
      "properties": {}
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

يقوم المثال التالي بإنشاء مجموعة إدارة جديدة في مجموعة الإدارة المحددة على أنها الأصل. لاحظ أنه تم تعيين النطاق على /.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
    },
    "parentMG": {
      "type": "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('mgName')]",
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "scope": "/",
      "location": "eastus",
      "properties": {
        "details": {
          "parent": {
            "id": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('parentMG'))]"
          }
        }
      }
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

الاشتراكات

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

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

نهج Azure

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

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "targetMG": {
      "type": "string",
      "metadata": {
        "description": "Target Management Group"
      }
    },
    "allowedLocations": {
      "type": "array",
      "defaultValue": [
        "australiaeast",
        "australiasoutheast",
        "australiacentral"
      ],
      "metadata": {
        "description": "An array of the allowed locations, all other locations will be denied by the created policy."
      }
    }
  },
  "variables": {
    "mgScope": "[tenantResourceId('Microsoft.Management/managementGroups', parameters('targetMG'))]",
    "policyDefinition": "LocationRestriction"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyDefinitions",
      "name": "[variables('policyDefinition')]",
      "apiVersion": "2020-09-01",
      "properties": {
        "policyType": "Custom",
        "mode": "All",
        "parameters": {
        },
        "policyRule": {
          "if": {
            "not": {
              "field": "location",
              "in": "[parameters('allowedLocations')]"
            }
          },
          "then": {
            "effect": "deny"
          }
        }
      }
    },
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "name": "location-lock",
      "apiVersion": "2020-09-01",
      "dependsOn": [
        "[variables('policyDefinition')]"
      ],
      "properties": {
        "scope": "[variables('mgScope')]",
        "policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', variables('policyDefinition'))]"
      }
    }
  ]
}

نشر في الاشتراك ومجموعة الموارد

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nestedsubId": {
      "type": "string"
    },
    "nestedRG": {
      "type": "string"
    },
    "storageAccountName": {
      "type": "string"
    },
    "nestedLocation": {
      "type": "string"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedSub",
      "location": "[parameters('nestedLocation')]",
      "subscriptionId": "[parameters('nestedSubId')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
          },
          "variables": {
          },
          "resources": [
            {
              "type": "Microsoft.Resources/resourceGroups",
              "apiVersion": "2021-04-01",
              "name": "[parameters('nestedRG')]",
              "location": "[parameters('nestedLocation')]"
            }
          ]
        }
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedRG",
      "subscriptionId": "[parameters('nestedSubId')]",
      "resourceGroup": "[parameters('nestedRG')]",
      "dependsOn": [
        "nestedSub"
      ],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2021-04-01",
              "name": "[parameters('storageAccountName')]",
              "location": "[parameters('nestedLocation')]",
              "kind": "StorageV2",
              "sku": {
                "name": "Standard_LRS"
              }
            }
          ]
        }
      }
    }
  ]
}

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