次の方法で共有


関連付けられている Microsoft Entra テナント間で MCA サブスクリプションをプログラムで作成する

この記事は、関連付けられている課金テナントをまたぐ Microsoft 顧客契約 (MCA) サブスクリプションをプログラムで作成する場合に役立ちます。 状況によっては、Microsoft Entra テナントをまたいで MCA サブスクリプションを作成し、それらを 1 つの課金アカウントに関連付けることが必要になる場合があります。 このような状況の例を次に示します:

  • ホストされている顧客サービスを内部 IT サービスから分離する SaaS プロバイダー
  • 多くのポートフォリオ企業を持つ持ち株会社やベンチャーキャピタル企業
  • 支払いカード業界 (PCI) などの厳格な規制コンプライアンス要件を持つ内部環境

MCA サブスクリプションを関連付けられている課金テナント内で作成するプロセスでは、送信元および送信先の Microsoft Entra テナントでアクションを実行する必要があります。 この記事では、次の用語を使用しています。

  • 契約元の Microsoft Entra テナント (source.onmicrosoft.com)。 これは、MCA 課金アカウントが存在する元のテナントを表します。
  • デスティネーション クラウドの Microsoft Entra テナント (destination.onmicrosoft.com)。 これは、新しい MCA サブスクリプションが作成される移行先テナントを表します。

プログラムでサポート プランを作成することはできません。 新しいサポート プランを購入するか、Azure portal でアップグレードすることができます。 ヘルプとサポートに移動します。 ページの上部にある [適切なサポート プランの選択] を選択します。

ノート

Microsoft Entra テナントをまたがる MCA サブスクリプションをプログラムによって作成する方法は 2 つあります。 この記事で説明する方法は、管理オーバーヘッドを最小限に抑え、MCA サブスクリプションを作成するアクセス許可を移行先テナントに完全に転送することで、サブスクリプションの作成プロセスを効率化する簡略化されたバージョンです。 もう 1 つの方法には、移行先テナントで作成されたサブスクリプションに対するソース テナント ガバナンスを提供する、2 フェーズのプロセスが含まれます。 移行先テナントでのサブスクリプションの作成をより厳密に制御する必要がある場合は、この方法をお勧めします。

前提条件

関連付けられている課金テナント間で MCA サブスクリプションをプログラムで作成できるようにするには、次の環境が必要です:

  • アクティブな Microsoft 顧客契約の課金アカウントがある、契約元の Microsoft Entra テナント。 アクティブな MCA を持っていない場合は、作成できます。 詳細については、Azure のサインアップに関するページを参照してください
  • MCA が属しているテナントとは別の、対象となる Microsoft Entra テナント。 新しい Microsoft Entra テナントを作成するには、Microsoft Entra テナントのセットアップに関する記事をご覧ください。
  • ソース Microsoft Entra テナント内で宛先の Microsoft Entra テナントを関連付けられた課金テナントとして追加し、宛先の Microsoft Entra テナントからのユーザーに課金ロールを割り当てます。

アプリケーションのセットアップ

次のセクションの情報を使用して、移行先テナントで必要なアプリケーションを設定および構成します。

移行先テナントにアプリケーションを登録する

プログラムによって MCA サブスクリプションを作成するには、Microsoft Entra アプリケーションを登録し、適切な Azure ロールベースのアクセス制御 (RBAC) アクセス許可を付与する必要があります。 このステップでは、Microsoft Entra アプリケーションを登録するためのアクセス許可を持つアカウントで、関連付けるテナント (destination.onmicrosoft.com) にサインインするようにします。 また、前提条件の一部として、ソース テナント (source.onmicrosoft.com) に課金ロールが割り当てられていることを確認します。

クイック スタート:Microsoft ID プラットフォームにアプリケーションを登録する」の手順に従います。

このプロセスで従う必要があるのは、「アプリケーションの登録」セクションと「資格情報の追加」セクションのみです。

次の情報を保存して、環境をテストして構成します。

  • ディレクトリ (テナント) ID
  • アプリケーション (クライアント) ID
  • オブジェクト ID
  • 生成されたアプリ シークレット値。 値は作成時にのみ表示されます。

宛先テナントでアプリケーションのために課金ロールの割り当てを作成する

アプリケーションの適切なスコープと課金ロールを決定するには、「Azure での Microsoft 顧客契約の管理ロールを理解する」の情報を確認してください。

所有者アクセス権を持つユーザーは、関連付けられているテナントで Azure portal にサインインすることで、アプリケーションにロールを割り当てることができます。 所有者アクセスには次のものが含まれます:

  • 課金アカウント所有者
  • 課金プロファイル所有者
  • 請求書セクション所有者

スコープとロールを決定したら、「Azure portal での課金ロールを管理する」の情報を使用して、アプリケーションのロール割り当てを作成します。 先のセクションでアプリケーションを登録したときに使用した名前を使用して、アプリケーションを検索します。

プログラムによる Azure サブスクリプションの作成

アプリケーションとアクセス許可が既に設定されている場合は、次の情報を使用して、プログラムによってサブスクリプションを作成します。

サブスクリプションを作成する

次の情報を使用して、関連付けるテナントにサブスクリプションを作成します。

移行先アプリケーションのアクセス トークンを取得する

この {{placeholders}} を、実際のテナント ID、アプリケーション (クライアント) ID、および以前に移行先テナント アプリケーションを作成したときに保存したアプリ シークレットの値に置き換えます。

要求を呼び出し、応答の access_token 値を保存して、次の手順で使用します。

POST https://login.microsoftonline.com/{{tenant_id}}/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id={{client_id}}&client_secret={{app_secret}}&resource=https%3A%2F%2Fmanagement.azure.com%2F

課金アカウント、プロファイル、請求書セクションの ID を取得する

アクセスできる課金アカウントを検索する」と「サブスクリプションを作成するための課金プロファイルと請求書のセクションを検索する」の情報を使用して、課金アカウント、プロファイル、請求書セクションの ID を取得します。

ノート

先に取得したアクセス トークンと共に REST メソッドを使用して、「アプリケーション のセットアップ」セクションでアプリケーション課金ロールの割り当てが正常に作成されたことを確認することをお勧めします。

サブスクリプションエイリアスを作成する

課金アカウント、プロファイル、請求書セクションの ID を使用すると、サブスクリプションの作成に必要なすべての情報が得られます。

  • {{guid}}: 有効な GUID を指定できます。
  • {{access_token}}: 以前に取得した関連付けるテナント アプリケーションのアクセス トークン。
  • {{billing_account}}: 以前に取得した課金アカウントの ID。
  • {{billing_profile}}: 以前に取得した課金プロファイルの ID。
  • {{invoice_section}}: 以前に取得した請求書セクションの ID。
  • {{destination_tenant_id}}: 以前に移行先テナント アプリケーションを作成したときに示された移行先テナントの ID。
  • {{destination_service_principal_object_id}}: 前の「宛先アプリケーションアクセス トークンの取得」セクションで取得した宛先テナントサービスプリンシパルのID。
PUT https://management.azure.com/providers/Microsoft.Subscription/aliases/{{guid}}?api-version=2021-10-01
Authorization: Bearer {{access_token}}
Content-Type: application/json

{
  "properties": {
    "displayName": "{{subscription_name}}",
    "workload": "Production",
    "billingScope": "/billingAccounts/{{billing_account}}/billingProfiles/{{billing_profile}}/invoiceSections/{{invoice_section}}",
    "subscriptionId": null,
    "additionalProperties": {
      "managementGroupId": null,
      "subscriptionTenantId": "{{destination_tenant_id}}",
      "subscriptionOwnerId": "{{destination_service_principal_object_id}}"
    }
  }
}

次のステップ