إنشاء اشتراكات Azure لاتفاقية عملاء Microsoft برمجياً مع أحدث واجهات برمجة التطبيقات

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

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

إذا كنت بحاجة إلى إنشاء اشتراك Azure MCA عبر مستأجري Microsoft Entra، فشاهد إنشاء اشتراكات MCA برمجيا عبر مستأجري Microsoft Entra.

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

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

لا يمكنك إنشاء خطط الدعم برمجيا. يمكنك شراء خطة دعم جديدة أو ترقية خطة في مدخل Microsoft Azure. انتقل إلى Help + support ثم في أعلى الصفحة، حدد Choose the right support plan.

المتطلبات الأساسية

يجب أن يكون لديك دور مالك أو مساهم أو منشئ اشتراك Azure في قسم الفاتورة أو دور المالك أو المساهم في ملف تعريف الفوترة أو حساب الفوترة لإنشاء اشتراكات. يمكنك أيضا إعطاء نفس الدور إلى اسم الخدمة الأساسي (SPN). لمزيد من المعلومات حول الأدوار وتعيين الإذن لها، راجع أدوار الفوترة والمهام الخاصة بالاشتراك.

إذا كنت تستخدم SPN لإنشاء اشتراكات، فاستخدم ObjectId لتطبيق Microsoft Entra Enterprise كمعرف أساسي باستخدام Microsoft Graph PowerShell أو Azure CLI.

إشعار

تختلف الأذونات بين واجهة برمجة التطبيقات القديمة (api-version=2018-03-01-preview) وأحدث واجهة برمجة تطبيقات (api-version=2020-05-01). على الرغم من أنه قد يكون لديك دور كاف لاستخدام واجهة برمجة التطبيقات القديمة، فقد تحتاج إلى مسؤول EA لتفويضك بدور لاستخدام أحدث واجهة برمجة تطبيقات.

إذا كنت لا تعرف ما إذا كان لديك حق الوصول إلى حساب اتفاقية عملاء Microsoft أم لا، فراجع التحقق من الوصول إلى اتفاقية عملاء Microsoft.

البحث عن حسابات الفوترة التي يمكنك الوصول إليها

قم بإجراء الطلب التالي لسرد جميع حسابات الفواتير.

GET https://management.azure.com/providers/Microsoft.Billing/billingaccounts/?api-version=2020-05-01

تسرد استجابة واجهة برمجة التطبيقات حسابات الفواتير التي لديك حق الوصول إليها.

{
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx",
      "name": "5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx",
      "properties": {
        "accountStatus": "Active",
        "accountType": "Enterprise",
        "agreementType": "MicrosoftCustomerAgreement",
        "billingProfiles": {
          "hasMoreResults": false
        },
        "displayName": "Contoso",
        "hasReadAccess": false
      },
      "type": "Microsoft.Billing/billingAccounts"
    }
  ]
}

استخدم الخاصية displayName لتحديد حساب الفوترة الذي تريد إنشاء اشتراكات له. تأكد من أن نوع اتفاقية الحساب هو اتفاقية عملاء Microsoft . انسخ name الحساب. على سبيل المثال، لإنشاء اشتراك في Contoso حساب الفواتير، انسخ 5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx. الصق القيمة في مكان ما بحيث يمكنك استخدامها في الخطوة التالية.

البحث عن ملفات تعريف الفوترة ومقاطع الفواتير لإنشاء اشتراكات

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

أولاً، ستحصل على قائمة بملفات تعريف الفوترة ضمن حساب الفوترة الذي يمكنك الوصول إليه (استخدم القائمة name التي حصلت عليها من الخطوة السابقة)

GET https://management.azure.com/providers/Microsoft.Billing/billingaccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingprofiles/?api-version=2020-05-01

تسرد استجابة واجهة برمجة التطبيقات جميع ملفات تعريف الفوترة التي يمكنك الوصول إليها لإنشاء اشتراكات:

{
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx",
      "name": "AW4F-xxxx-xxx-xxx",
      "properties": {
        "billingRelationshipType": "Direct",
        "billTo": {
          "addressLine1": "One Microsoft Way",
          "city": "Redmond",
          "companyName": "Contoso",
          "country": "US",
          "email": "kenny@contoso.com",
          "phoneNumber": "425xxxxxxx",
          "postalCode": "98052",
          "region": "WA"
        },
        "currency": "USD",
        "displayName": "Contoso Billing Profile",
        "enabledAzurePlans": [
          {
            "skuId": "0002",
            "skuDescription": "Microsoft Azure Plan for DevTest"
          },
          {
            "skuId": "0001",
            "skuDescription": "Microsoft Azure Plan"
          }
        ],
        "hasReadAccess": true,
        "invoiceDay": 5,
        "invoiceEmailOptIn": false,
        "invoiceSections": {
          "hasMoreResults": false
        },
        "poNumber": "001",
        "spendingLimit": "Off",
        "status": "Active",
        "systemId": "AW4F-xxxx-xxx-xxx",
        "targetClouds": []
      },
      "type": "Microsoft.Billing/billingAccounts/billingProfiles"
    }
  ]
}

نسخ id إلى التالي تحديد مقاطع الفاتورة أسفل ملف تعريف الفوترة. على سبيل المثال، نسخ /providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx واستدعاء واجهة برمجة التطبيقات التالية.

GET https://management.azure.com/providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoicesections?api-version=2020-05-01

استجابة

{
  "totalCount": 1,
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx",
      "name": "SH3V-xxxx-xxx-xxx",
      "properties": {
        "displayName": "Development",
        "state": "Active",
        "systemId": "SH3V-xxxx-xxx-xxx"
      },
      "type": "Microsoft.Billing/billingAccounts/billingProfiles/invoiceSections"
    }
  ]
}

استخدم الخاصية id لتحديد قسم الفاتورة الذي تريد إنشاء اشتراكات له. انسخ السلسلة بأكملها. على سبيل المثال، /providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx

إنشاء اشتراك لقسم الفاتورة

ينشئ المثال التالي اشتراكاً باسم اشتراك Dev Team في قسم فاتورة التطوير. يتم إرسال فاتورة الاشتراك إلى ملف الفوترة ملف فوترة Contoso ويظهر في قسم التطوير من فاتورته. يمكنك استخدام نطاق الفوترة المنسوخ من الخطوة السابقة: /providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx.

PUT  https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01

نص الطلب

{
  "properties":
    {
        "billingScope": "/providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx",
        "DisplayName": "Dev Team subscription",
        "Workload": "Production"
    }
}

الرد

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Accepted"
  }
}

يمكنك القيام بـ GET على نفس عنوان URL للحصول على حالة الطلب.

Request

GET https://management.azure.com/providers/Microsoft.Subscription/aliases/sampleAlias?api-version=2021-10-01

استجابة

{
  "id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
  "name": "sampleAlias",
  "type": "Microsoft.Subscription/aliases",
  "properties": {
    "subscriptionId": "b5bab918-e8a9-4c34-a2e2-ebc1b75b9d74",
    "provisioningState": "Succeeded"
  }
}

يتم إرجاع حالة قيد التقدم كحالة Accepted ضمن provisioningState.

استخدم قالب ARM أو العضلة ذات الرأسين

أظهر القسم السابق كيفية إنشاء اشتراك باستخدام PowerShell أو CLI أو واجهة برمجة تطبيقات REST. إذا كنت بحاجة إلى أتمتة إنشاء الاشتراكات، ففكر في استخدام قالب Azure Resource Manager (قالب ARM) أو ملف Bicep.

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

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "subscriptionAliasName": {
            "type": "string",
            "metadata": {
                "description": "Provide a name for the alias. This name will also be the display name of the subscription."
            }
        },
        "billingScope": {
            "type": "string",
            "metadata": {
                "description": "Provide the full resource ID of billing scope to use for subscription creation."
            }
        }
    },
    "resources": [
        {
            "scope": "/",
            "name": "[parameters('subscriptionAliasName')]",
            "type": "Microsoft.Subscription/aliases",
            "apiVersion": "2021-10-01",
            "properties": {
                "workLoad": "Production",
                "displayName": "[parameters('subscriptionAliasName')]",
                "billingScope": "[parameters('billingScope')]"
            }
        }
    ],
    "outputs": {}
}

أو استخدم ملف Bicep لإنشاء الاشتراك.

targetScope = 'managementGroup'

@description('Provide a name for the alias. This name will also be the display name of the subscription.')
param subscriptionAliasName string

@description('Provide the full resource ID of billing scope to use for subscription creation.')
param billingScope string

resource subscriptionAlias 'Microsoft.Subscription/aliases@2021-10-01' = {
  scope: tenant()
  name: subscriptionAliasName
  properties: {
    workload: 'Production'
    displayName: subscriptionAliasName
    billingScope: billingScope
  }
}

انشر القالب على مستوى مجموعة الإدارة. تظهر الأمثلة التالية نشر قالب ARM JSON ولكن يمكنك نشر ملف Bicep بدلاً من ذلك.

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/mg1/providers/Microsoft.Resources/deployments/exampledeployment?api-version=2020-06-01

مع نص الطلب:

{
  "location": "eastus",
  "properties": {
    "templateLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json"
    },
    "parameters": {
      "subscriptionAliasName": {
        "value": "sampleAlias"
      },
      "billingScope": {
        "value": "/providers/Microsoft.Billing/billingAccounts/5e98e158-xxxx-xxxx-xxxx-xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_xxxx-xx-xx/billingProfiles/AW4F-xxxx-xxx-xxx/invoiceSections/SH3V-xxxx-xxx-xxx"
      }
    },
    "mode": "Incremental"
  }
}

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

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "targetMgId": {
            "type": "string",
            "metadata": {
                "description": "Provide the ID of the management group that you want to move the subscription to."
            }
        },
        "subscriptionId": {
            "type": "string",
            "metadata": {
                "description": "Provide the ID of the existing subscription to move."
            }
        }
    },
    "resources": [
        {
            "scope": "/",
            "type": "Microsoft.Management/managementGroups/subscriptions",
            "apiVersion": "2020-05-01",
            "name": "[concat(parameters('targetMgId'), '/', parameters('subscriptionId'))]",
            "properties": {
            }
        }
    ],
    "outputs": {}
}

أو ملف Bicep التالي.

targetScope = 'managementGroup'

@description('Provide the ID of the management group that you want to move the subscription to.')
param targetMgId string

@description('Provide the ID of the existing subscription to move.')
param subscriptionId string

resource subToMG 'Microsoft.Management/managementGroups/subscriptions@2020-05-01' = {
  scope: tenant()
  name: '${targetMgId}/${subscriptionId}'
}

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