Программное создание подписок Azure для Соглашения Enterprise с помощью новейших API
Эта статья поможет вам создать подписки Azure для учетной записи выставления счетов по Соглашению Enterprise программными средствами с помощью новейших версий API. Если вы все еще используете более раннюю предварительную версию, см. статью Программное создание подписок Azure с помощью предварительных версий API.
В этой статье Вы узнаете как создавать подписки программно с помощью Azure Resource Manager.
При программном создании подписки Azure она подпадает под условия соглашения, по которому вы получаете службы Azure от Корпорации Microsoft или сертифицированного продавца. Дополнительные сведения можно найти на странице Юридическая информация Службы Microsoft Azure.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Вы не можете создавать планы поддержки программным способом. Вы можете приобрести новый план поддержки или обновить его на портале Azure. Перейдите в раздел Справка и поддержка, а затем в верхней части страницы выберите Выбрать нужный план поддержки.
Необходимые компоненты
Для создания подписки пользователь должен иметь роль администратора предприятия или роль владельца учетной записи по Соглашению о регистрации. Существует два способа получения роли владельца учетной записи по Соглашению о регистрации.
- Администратор регистрации, отвечающий за вашу регистрацию, может назначить роль владельца учетной записи (требуется вход в систему), что сделает вас владельцем учетной записи регистрации.
- Текущий владелец учетной записи регистрации может предоставить вам права доступа.
Чтобы использовать субъект-службу для создания подписки с 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/{{guid}}?api-version=2021-10-01api-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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"provisioningState": "Accepted"
}
}
Чтобы получить состояние запроса, можно отправить запрос GET для того же URL-адреса.
Запросить
GET https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01
Response
{
"id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
"name": "sampleAlias",
"type": "Microsoft.Subscription/aliases",
"properties": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"provisioningState": "Succeeded"
}
}
Состояние "Выполняется" возвращается в виде состояния Accepted
в разделе provisioningState
.
Создание подписки и владельца subscriptionOwnerId
Когда субъект-служба использует API псевдонима подписки для создания новой подписки и не указывает additionalProperties
в запросе, субъект-служба автоматически становится владельцем новой подписки. Если вы не хотите, чтобы субъект-служба была владельцем, можно указать subscriptionTenantId
и subscriptionOwnerId
в поле additionalProperties
. Этот процесс делает указанного subscriptionOwnerId
владельцем новой подписки вместо субъекта-службы.
Пример текста запроса:
{
"properties": {
"billingScope": "/providers/Microsoft.Billing/billingAccounts/{EABillingAccountId}/enrollmentAccounts/{EnrollmentAccountId}",
"displayName": "{SubscriptionName}",
"workLoad": "Production",
"resellerId": null,
"additionalProperties": {
"managementGroupId": "",
"subscriptionTenantId": "{SubscriptionTenantId}", // Here you input the tenant GUID where the subscription resides after creation
"subscriptionOwnerId": "{ObjectId that becomes the owner of the subscription}", // Here you input the objectId which is set as the subscription owner when it gets created.
"tags": {}
}
}
}
Создание подписок в другом клиенте
С помощью 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.
- Для учетной записи по Соглашению о регистрации действует ограничение в 5000 подписок. После этого дополнительные подписки для учетной записи можно создать только на портале Azure. Чтобы создать дополнительные подписки с помощью API, создайте другую учетную запись регистрации. Отмененные, удаленные и перенесенные подписки учитываются в пределах 5000.
- Пользователи, которые не являются владельцами учетной записи, но были добавлены в учетную запись по Соглашению о регистрации с помощью управления доступа на основе ролей Azure, не могут создавать подписки на портале Azure.
Следующие шаги
- Теперь, когда вы создали подписку, вы можете предоставить эту возможность другим пользователям и субъектам-службам. Дополнительные сведения см. статье Предоставление доступа к созданию подписок Azure Enterprise (предварительная версия).
- Дополнительные сведения о переносе большого числа подписок с помощью групп управления см. в руководстве по упорядочиванию ресурсов с помощью групп управления Azure.
- Сведения об изменении группы управления для подписки см. в разделе Перемещение подписок.
- Дополнительные сценарии создания подписок с помощью REST API см. в разделе "Псевдоним — создание".