عمليات نشر مجموعة الإدارة مع قوالب 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، استخدم az deployment 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"
              }
            }
          ]
        }
      }
    }
  ]
}

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