Программное создание подписок Azure для Соглашения Enterprise с помощью новейших API

Эта статья поможет вам создать подписки Azure для учетной записи выставления счетов по Соглашению Enterprise программными средствами с помощью новейших версий API. Если вы по-прежнему используете старую предварительную версию, см . статью "Программное создание подписок Azure" устаревших API.

В этой статье Вы узнаете как создавать подписки программно с помощью Azure Resource Manager.

При программном создании подписки Azure она попадает в условия соглашения, в котором вы получаете службы Azure от Корпорации Майкрософт или сертифицированного продавца. Дополнительные сведения можно найти на странице Юридическая информация Службы Microsoft Azure.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Вы не можете создавать планы поддержки программным способом. Вы можете приобрести новый план поддержки или обновить его в портал Azure. Перейдите в раздел "Справка и поддержка ", а затем в верхней части страницы выберите нужный план поддержки.

Необходимые компоненты

Для создания подписки пользователь должен иметь роль корпоративного Администратор istrator или роль владельца учетной записи регистрации. Существует два способа получения роли владельца учетной записи регистрации.

Чтобы использовать субъект-службу для создания подписки EA, владелец учетной записи регистрации должен предоставить субъекту-службе возможность создавать подписки.

При использовании субъекта-службы для создания подписок используйте ObjectId приложения Microsoft Entra Enterprise в качестве идентификатора субъекта-службы с помощью Microsoft Graph PowerShell или Azure CLI. Чтобы найти идентификатор объекта в портал Azure для существующего субъекта-службы, можно также выполнить инструкции по поиску идентификатора субъекта-службы и клиента.

Дополнительные сведения о запросе API назначения роли EA см. в статье "Назначение ролей именам субъектов-служб Соглашения Enterprise Azure". В статье содержится список ролей (и идентификаторов определений ролей), которые можно назначить субъекту-службе.

Примечание.

  • Убедитесь, что вы используете правильную версию API, чтобы предоставить учетной записи регистрации права владельца. При изучении этой статьи и для интерфейсов API, приведенных в ней, используйте API версии 2019-10-01-preview.
  • При переходе на более новые версии API предыдущая конфигурация, созданная с помощью версии 2015-07-01, не преобразуется автоматически для использования этих версий.
  • Сведения об учетной записи регистрации отображаются только в том случае, если пользователь имеет роль владельца учетной записи. Если у пользователя несколько ролей, API использует наименее ограничивающую роль этого пользователя.

Поиск учетных записей, к которым у вас есть доступ

После того как вы будете добавлены в учетную запись регистрации, связанную с владельцем учетной записи, платформа Azure использует связь между регистрацией и учетной записью, чтобы определить целевой объект для выставления счетов за подписки. Все подписки, созданные с учетной записью, оплачиваются в рамках регистрации EA, к которой относится эта учетная запись. Чтобы создать подписки, необходимо в значениях передать о регистрации учетной записи и субъектов-пользователя — владельца подписки.

Чтобы выполнить следующие команды, войдите в домашний каталог владельца учетной записи, в котором по умолчанию создаются подписки.

Запросите вывод списка всех учетных записей регистрации, к которым у вас есть доступ.

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

В ответе API будет выведен список всех учетных записей регистрации, к которым у вас есть доступ.

{
  "value": [
    {
      "id": "/providers/Microsoft.Billing/billingAccounts/1234567",
      "name": "1234567",
      "properties": {
        "accountStatus": "Unknown",
        "accountType": "Enterprise",
        "agreementType": "EnterpriseAgreement",
        "soldTo": {
          "companyName": "Contoso",
          "country": "US "
        },
        "billingProfiles": {
          "hasMoreResults": false
        },
        "displayName": "Contoso",
        "enrollmentAccounts": [
          {
            "id": "/providers/Microsoft.Billing/billingAccounts/1234567/enrollmentAccounts/7654321",
            "name": "7654321",
            "type": "Microsoft.Billing/enrollmentAccounts",
            "properties": {
              "accountName": "Contoso",
              "accountOwnerEmail": "kenny@contoso.onmicrosoft.com",
              "costCenter": "Test",
              "isDevTest": false
            }
          }
        ],
        "hasReadAccess": false
      },
      "type": "Microsoft.Billing/billingAccounts"
    }
  ]
}

Значение для области выставления счетов и id — это одно и то же. id для учетной записи регистрации — это область выставления счетов, в рамках которой инициируется запрос на подписку. Важно знать идентификатор, так как это обязательный параметр, который вы используете позже в статье для создания подписки.

Создание подписок с помощью определенной учетной записи регистрации

В следующем примере в учетной записи регистрации, выбранной на предыдущем шаге, создается подписка с именем Dev Team Subscription.

Используя один из следующих методов, вы создадите псевдоним подписки. При создании имени псевдонима рекомендуется:

  • использовать буквенно-цифровые символы и дефисы;
  • начинать с буквы и заканчивать буквенно-цифровым символом;
  • не использовать точки.

Псевдоним используется для простой подстановки определяемой пользователем строки вместо GUID подписки. Другими словами, его можно использовать в качестве ярлыка. Дополнительные сведения об псевдонимах см. в статье Псевдоним — создание. В следующих примерах создается sampleAlias, но вы можете использовать любую строку.

Если помимо роли владельца учетной записи вам назначено еще несколько ролей пользователя, вам необходимо получить идентификатор учетной записи на портале Azure. После этого вы сможете использовать этот идентификатор для создания подписок программным путем.

Вызовите API PUT, чтобы создать запрос или псевдоним для создания подписки.

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

В тексте запроса в качестве billingScope укажите id одной из учетных записей enrollmentAccounts.

{
  "properties": {
        "billingScope": "/providers/Microsoft.Billing/BillingAccounts/1234567/enrollmentAccounts/7654321",
        "DisplayName": "Dev Team Subscription", //Subscription Display Name
        "Workload": "Production"
  }
}

Разрешены следующие значения для Workload: Production и DevTest.

Response

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

Чтобы получить состояние запроса, можно отправить запрос GET для того же URL-адреса.

Запросить

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

Response

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

Состояние "Выполняется" возвращается в виде состояния Accepted в разделе provisioningState.

Создание подписок в другом клиенте

С помощью REST API псевдонима подписки можно создать подписку в другом клиенте с помощью subscriptionTenantId параметра в тексте запроса. Субъект-служба Azure (SPN) должен получить маркер из своего домашнего клиента, чтобы создать подписку. После создания подписки необходимо получить маркер от целевого клиента, чтобы принять передачу с помощью API принятия прав владения .

Дополнительные сведения о создании подписок EA в другом клиенте см. в статье "Создание подписки в другом клиенте" и просмотр запросов на передачу.

Использование шаблона ARM или BICEP

В предыдущем разделе было показано, как создать подписку с помощью PowerShell, CLI или REST API. Если вам необходимо автоматизировать создание подписок, рассмотрите возможность использования шаблона Azure Resource Manager (шаблона ARM) или BICEP-файла.

Следующий шаблон ARM используется для создания подписки. Для параметра 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/1234567/enrollmentAccounts/7654321"
      }
    },
    "mode": "Incremental"
  }
}

Чтобы переместить подписку в другую группу управления, используйте следующий шаблон ARM.

{
    "$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}'
}

Ограничения API создания подписок Azure Enterprise

  • С помощью этого API создаются только подписки Azure Enterprise.
  • Существует ограничение в 5 000 подписок на учетную запись регистрации. После этого дополнительные подписки для учетной записи можно создать только на портале Azure. Чтобы создать дополнительные подписки с помощью API, создайте другую учетную запись регистрации. Отмененные, удаленные и перенесенные подписки учитываются в пределах 5000.
  • Пользователи, которые не являются владельцами учетных записей, но были добавлены в учетную запись регистрации с помощью управления доступом на основе ролей Azure, не могут создавать подписки в портал Azure.

Следующие шаги