この記事は、最新の API バージョンを使用してプログラムで Enterprise Agreement (EA) 課金アカウントの Azure EA サブスクリプションを作成する場合に役に立ちます。 以前のプレビュー バージョンをまだ使用している場合は、「 プログラムによって Azure サブスクリプションのレガシ API を作成する」を参照してください。
この記事では、Azure Resource Manager を使用してプログラムからサブスクリプションを作成する方法について説明します。
Azure サブスクリプションをプログラムで作成すると、Microsoft または認定販売者から Azure サービスを受けるサブスクリプション条件が適用されます。 詳細については、「 Microsoft Azure の法的情報」を参照してください。
注意
Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 開始するには、 Azure PowerShell のインストールに関するページを参照してください。 Az PowerShell モジュールに移行する方法については、「 Azure PowerShell を AzureRM から Az に移行する」を参照してください。
プログラムでサポート プランを作成することはできません。 新しいサポート プランを購入するか、Azure portal でアップグレードすることができます。 [ヘルプとサポート] に移動し、ページの上部にある [適切なサポート プランの選択] を選択します。
前提条件
サブスクリプションを作成するには、ユーザーはエンタープライズ管理者ロールか登録アカウントの所有者ロールのどちらかを持っている必要があります。 登録アカウントで所有者ロールを取得するには、以下の 2 つの方法があります。
- あなたの登録のエンタープライズ管理者は、サインインを必要とする操作によってあなたをアカウント所有者にすることができ、それにより登録アカウントの所有者になります。
- 登録アカウントの既存の所有者が アクセス権を付与できます。
サービス プリンシパルを使用して EA サブスクリプションを作成するには、登録アカウントの所有者 がそのサービス プリンシパルにサブスクリプションを作成する権限を付与する必要があります。
サービス プリンシパルを使用してサブスクリプションを作成する場合は、Microsoft Graph PowerShell または Azure CLI を使用して、サービス プリンシパル ID として Microsoft Entra Enterprise アプリケーションの ObjectId を使用します。 また、「 サービス プリンシパル ID とテナント ID を検索する」の手順を使用して、既存のサービス プリンシパルのオブジェクト ID を Azure portal で検索することもできます。
EA ロールの割り当て API 要求の詳細については、「 Azure Enterprise Agreement サービス プリンシパル名へのロールの割り当て」を参照してください。 この記事には、サービス プリンシパルに割り当てることができるロール (およびロール定義 ID) の一覧が記載されています。
注意
- 登録アカウントに対する所有者アクセス許可の付与には、必ず正しい API バージョンを使用してください。 この記事とその記事に記載されている API については、 2019-10-01-preview API を使用してください。
- 新しい API を使用するように移行する場合、 2015-07-01 バージョン で行われた以前の構成では、新しい API で使用するために自動的に変換されません。
- 登録アカウント情報は、ユーザーのロールがアカウント所有者であるときにのみ表示されます。 ユーザーが複数のロールを持っているときは、ユーザーの最も制限の厳しいロールが API によって使用されます。
アクセスできるアカウントを検索する
アカウント所有者に関連付けられた登録アカウントに追加されると、アカウントと登録の関係を使用してサブスクリプション料金の請求先が決定されます。 このアカウント内で作成されたすべてのサブスクリプションは、アカウントが含まれる 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
は、サブスクリプション要求が開始される課金スコープです。 ID は、サブスクリプションを作成するために記事の後半で使用する必須パラメーターであるため、知っておくことが重要です。
特定の登録アカウントの中にサブスクリプションを作成する
次の例では、前の手順で選択した登録アカウントに Dev Team Subscription という名前のサブスクリプションを作成します。
次のいずれかの方法を使って、サブスクリプションのエイリアス名を作成します。 エイリアス名を作成するときは、以下を考慮することをお勧めします。
- 英数字、およびハイフンを使用する
- 先頭は文字、末尾は英数字にする
- ピリオドを使用しない
エイリアスは、サブスクリプション GUID ではなく、ユーザー定義文字列の単純な置換に使用されます。 つまり、ショートカットとして使用できます。 エイリアスの詳細については、「 エイリアス - 作成」を参照してください。 次の例では、sampleAlias
が作成されますが、任意の文字列を使用できます。
アカウント所有者ロールに加えて複数のユーザー ロールがある場合は、Azure portal からアカウント ID を取得する必要があります。 次に、その ID を使用してプログラムでサブスクリプションを作成できます。
PUT API を呼び出して、サブスクリプション作成の要求と別名を作成します。
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
です。
[応答]
{
"id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
"name": "sampleAlias",
"type": "Microsoft.Subscription/aliases",
"properties": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"provisioningState": "Accepted"
}
}
同じ URL で GET を実行して、要求の状態を取得できます。
リクエスト
GET https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01
[応答]
{
"id": "/providers/Microsoft.Subscription/aliases/sampleAlias",
"name": "sampleAlias",
"type": "Microsoft.Subscription/aliases",
"properties": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"provisioningState": "Succeeded"
}
}
進行中の状態は、Accepted
で provisioningState
状態として返されます。
サブスクリプションを作成し、subscriptionOwnerId を所有者にする
サービス プリンシパルが Subscription Alias 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
には、登録アカウント ID を指定します。 サブスクリプションはルート管理グループに作成されます。 サブスクリプションを作成した後、それを別の管理グループに移動できます。
{
"$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
}
}
管理グループ レベルでテンプレートをデプロイします。 次の例では、JSON ARM テンプレートのデプロイを示しますが、代わりに 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}'
}
Azure Enterprise のサブスクリプション作成 API の制限事項
- API を使用して作成されるのは、Azure Enterprise サブスクリプションのみです。
- 登録アカウントあたりのサブスクリプションの上限数は 5,000 です。 その後、アカウントの追加のサブスクリプションは、Azure portal でのみ作成することができます。 API を使用してさらにサブスクリプションを作成するには、別の登録アカウントを作成します。 キャンセル、削除、および譲渡されたサブスクリプションもカウントされ、5000 件の制限の対象となります。
- アカウント所有者ではないが、Azure ロールベースのアクセス制御経由で登録アカウントに追加されたユーザーは、Azure portal でサブスクリプションを作成することはできません。
次のステップ
- サブスクリプションを作成し終えたら、他のユーザーおよびサービス プリンシパルでその機能を利用できるようになります。 詳細については、「 Azure Enterprise サブスクリプションを作成するためのアクセス権の付与 (プレビュー)」を参照してください。
- 管理グループを使用して多数のサブスクリプションを管理する方法の詳細については、「 Azure 管理グループを使用してリソースを整理する」を参照してください。
- サブスクリプションの管理グループを変更するには、「サブスクリプションの 移動」を参照してください。
- REST API を使用した高度なサブスクリプション作成シナリオについては、「 エイリアス - 作成」を参照してください。