عمليات توزيع المستأجر مع قوالب ARM

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

تلميح

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

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

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

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

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

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

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

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

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

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

مخطط

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

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

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

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

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

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

يجب أن يكون للمدير الأساسي الذي يوزع القالب أذونات لإنشاء موارد في نطاق المستأجر. يجب أن يكون لدى الحساب الأساسي إذن لتنفيذ إجراءات التوزيع (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-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/tenant-deployments/new-mg/azuredeploy.json"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

لاستهداف مجموعة إدارة داخل المستأجر، قم بإضافة توزيع متداخل وحدد scope الخاصية.

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

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

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

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-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/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-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
            }
          ]
        }
      }
    }
  ]
}

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

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

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "mgName": {
        "type": "string",
        "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
      }
    },
    "resources": [
      {
        "type": "Microsoft.Management/managementGroups",
        "apiVersion": "2020-02-01",
        "name": "[parameters('mgName')]",
        "properties": {
        }
      }
    ]
  }

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

تعيين دور

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "17107802581699825924"
    }
  },
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "principalId if the user that will be given contributor access to the tenant"
      }
    },
    "roleDefinitionId": {
      "type": "string",
      "defaultValue": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
      "metadata": {
        "description": "roleDefinition for the assignment - default is owner"
      }
    }
  },
  "variables": {
    "roleAssignmentName": "[guid('/', parameters('principalId'), parameters('roleDefinitionId'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2020-03-01-preview",
      "name": "[variables('roleAssignmentName')]",
      "properties": {
        "roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
        "principalId": "[parameters('principalId')]"
      }
    }
  ]
}

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