サービス プリンシパルに Enterprise Agreement ロールを割り当てる
Azure portal では、Enterprise Agreement (EA) の登録を管理できます。 さまざまなロールを作成して、組織を管理したり、コストを表示したり、サブスクリプションを作成したりすることができます。 この記事は、Microsoft Entra ID サービス プリンシパルで Azure PowerShell と REST API を使用して、これらのタスクの一部を自動化するのに役立ちます。
Note
組織内に複数の EA 課金アカウントがある場合は、EA ロールを各 EA 課金アカウントで Microsoft Entra ID サービス プリンシパルに個別に付与する必要があります。
始める前に、次の記事の内容を理解しておいてください。
REST API を呼び出す方法が必要です。 API にクエリを実行する一般的な方法は次のとおりです。
- Visual Studio
- Insomnia
- Bruno
- PowerShell の Invoke-RestMethod
- Curl
サービス プリンシパルを作成および認証する
サービス プリンシパルを使用して EA アクションを自動化するには、Microsoft Entra アプリ ID を作成する必要があります。これにより、自動化された方法で認証できます。
これらの記事の手順に従って、サービス プリンシパルを作成し、使用して認証します。
アプリケーション登録ページの例を次に示します。
サービス プリンシパルとテナント ID を検索する
サービス プリンシパルのオブジェクト ID とテナント ID が必要です。 この情報は、この記事で後述するアクセス許可の割り当て操作に必要になります。 すべてのアプリケーションは、テナント内の Microsoft Entra ID に登録されます。 アプリの登録が完了すると、2 種類のオブジェクトが作成されます。
- アプリケーション オブジェクト - アプリケーション ID は [エンタープライズ アプリケーション] に表示されます。 EA ロールを付与するために ID を使用しないでください。
- サービス プリンシパル オブジェクト - サービス プリンシパル オブジェクトは、Microsoft Entra ID の [エンタープライズ登録] ウィンドウに表示されるものです。 オブジェクト ID は、EA ロールをサービス プリンシパルに付与するために使用されます。
Microsoft Entra ID を開き、[エンタープライズ アプリケーション] を選択します。
一覧内で対象のアプリを見つけます。
アプリを選択して、アプリケーション ID とオブジェクト ID を見つけます。
Microsoft Entra ID の [概要] ページに移動して、テナント ID を見つけます。
Note
Microsoft Entra テナント ID の値は、aaaabbbb-0000-cccc-1111-dddd2222eeee
形式の GUID のようになります。
サービス プリンシパルに割り当てることができるアクセス許可
この記事の後半では、EA ロールを使用して動作するためのアクセス許可を Microsoft Entra アプリに付与します。 サービス プリンシパルには、次のロールのみを割り当てることができます。また、示されているとおりのロール定義 ID が必要になります。
ロール | 許可されるアクション | ロール定義 ID |
---|---|---|
EnrollmentReader | 登録閲覧者は、登録、部署、およびアカウントのスコープでデータを表示できます。 データには、テナント間を含め、スコープ内のすべてのサブスクリプションの料金が含まれます。 登録に関連付けられている Azure 前払い (旧称: 年額コミットメント) の残高を確認できます。 | 24f8edb6-1668-4659-b5e2-40bb5f3a7d7e |
EA 購入者 | 予約注文を購入し、予約トランザクションを表示できます。 EnrollmentReader のすべてのアクセス許可を持ち、これには DepartmentReader のすべてのアクセス許可があります。 あらゆるアカウントとサブスクリプションの使用状況と料金を確認できます。 登録に関連付けられている Azure 前払い (旧称: 年額コミットメント) の残高を確認できます。 | da6647fb-7651-49ee-be91-c43c4877f0c4 |
DepartmentReader | 管理している部署について、使用状況の詳細をダウンロードできます。 自分の部署に関連付けられている使用状況と料金を確認できます。 | db609904-a47f-4794-9be8-9bd86fbffd8a |
SubscriptionCreator | 一定範囲のアカウントで、新しいサブスクリプションを作成できます。 | a0bcee42-bf30-4d1b-926a-48d21664ef71 |
- サービス プリンシパルに EnrollmentReader ロールを割り当てることができるのは、登録ライター ロールが割り当てられているユーザーのみです。 サービス プリンシパルに割り当てられた EnrollmentReader ロールは、EA ポータルには表示されません。 これは、プログラムによって作成され、プログラムでのみ使用されます。
- サービス プリンシパルに DepartmentReader ロールを割り当てることができるのは、登録ライター ロールまたは部署ライター ロールが割り当てられているユーザーのみです。
- サービス プリンシパルに SubscriptionCreator ロールを割り当てることができるのは、登録アカウントの所有者となっているユーザーのみです (EA 管理者)。 このロールは Azure portal に表示されません。 これは、プログラムによって作成され、プログラムでのみ使用されます。
- EA 購入者ロールは Azure portal に表示されません。 これは、プログラムによって作成され、プログラムでのみ使用されます。
EA ロールをサービス プリンシパルに付与するときは、必須のプロパティ billingRoleAssignmentName
を使う必要があります。 このパラメーターは、ユーザーが指定する必要がある一意の GUID です。 GUID は、PowerShell コマンド New-Guid を使って生成できます。 Online GUID / UUID Generator Web サイトを使って一意の GUID を生成することもできます。
サービス プリンシパルは、1 つのロールのみを持つことができます。
サービス プリンシパルに登録アカウントのロールのアクセス許可を割り当てる
REST API に関する記事「ロールの割り当て - Put」をお読みください。 記事を読んでいる間に、[使ってみる] を選択して、サービス プリンシパルの使用を開始します。
自分のアカウント資格情報を使用して、割り当てる登録アクセス権があるテナントにサインインします。
API 要求の一環として、次のパラメーターを指定します。
billingAccountName
: このパラメーターは、課金アカウント ID です。 これは、Azure portal の [コストの管理と請求] の [概要] ページで見つけることができます。billingRoleAssignmentName
: このパラメーターは一意の GUID であり、指定が必要です。 GUID は、PowerShell コマンド New-Guid を使って生成できます。 Online GUID / UUID Generator Web サイトを使って一意の GUID を生成することもできます。api-version
: 2019-10-01-preview バージョンを使用します。 「ロールの割り当て - Put」の「例」のところにある要求本文のサンプルを使用します。要求の本文には、使用する必要のある 3 つのパラメーターを含む JSON コードが含まれています。
パラメーター 参照先 properties.principalId
オブジェクト ID の値です。 「サービス プリンシパルとテナント ID を検索する」を参照してください。 properties.principalTenantId
「サービス プリンシパルとテナント ID を検索する」を参照してください。 properties.roleDefinitionId
/providers/Microsoft.Billing/billingAccounts/{BillingAccountName}/billingRoleDefinitions/24f8edb6-1668-4659-b5e2-40bb5f3a7d7e
課金アカウント名は、API のパラメーターで使用したパラメーターと同じです。 これは、Azure portal で確認できる登録 ID です。
24f8edb6-1668-4659-b5e2-40bb5f3a7d7e
は EnrollmentReader の請求先のロール定義 ID であることに注意してください。
[実行] を選択してコマンドを起動します。
200 OK
という応答は、サービス プリンシパルが正常に追加されたことを示します。
これで、サービス プリンシパルを使用して EA API シリーズに自動的にアクセスできます。 サービス プリンシパルには EnrollmentReader ロールがあります。
サービス プリンシパルに EA 購入者ロールのアクセス許可を割り当てる
EA 購入者ロールについては、登録リーダーのものと同じ手順を使用します。 次の例を使用して、roleDefinitionId
を指定します。
"/providers/Microsoft.Billing/billingAccounts/1111111/billingRoleDefinitions/ da6647fb-7651-49ee-be91-c43c4877f0c4"
サービス プリンシパルに部門閲覧者ロールを割り当てる
REST API に関する記事「登録部署のロールの割り当て - Put」をお読みください。 記事を読んでいる間に、 [使ってみる] を選択します。
自分のアカウント資格情報を使用して、割り当てる登録アクセス権があるテナントにサインインします。
API 要求の一環として、次のパラメーターを指定します。
billingAccountName
: このパラメーターは、課金アカウント ID です。 これは、Azure portal の [コストの管理と請求] の [概要] ページで見つけることができます。billingRoleAssignmentName
: このパラメーターは一意の GUID であり、指定が必要です。 GUID は、PowerShell コマンド New-Guid を使って生成できます。 Online GUID / UUID Generator Web サイトを使って一意の GUID を生成することもできます。departmentName
: このパラメーターは部署 ID です。 部署 ID は、Azure portal の [コストの管理と請求]>[部門] ページで確認できます。この例では、ACE 部署を使用しました。 この例の ID は
84819
です。api-version
: 2019-10-01-preview バージョンを使用します。 「登録部署のロールの割り当て - Put」にあるサンプルを使用します。要求の本文には、使用する必要のある 3 つのパラメーターを含む JSON コードが含まれています。
パラメーター 参照先 properties.principalId
オブジェクト ID の値です。 「サービス プリンシパルとテナント ID を検索する」を参照してください。 properties.principalTenantId
「サービス プリンシパルとテナント ID を検索する」を参照してください。 properties.roleDefinitionId
/providers/Microsoft.Billing/billingAccounts/{BillingAccountName}/billingRoleDefinitions/db609904-a47f-4794-9be8-9bd86fbffd8a
課金アカウント名は、API のパラメーターで使用したパラメーターと同じです。 これは、Azure portal で確認できる登録 ID です。
請求先のロール定義 ID
db609904-a47f-4794-9be8-9bd86fbffd8a
は、部署リーダーのものです。
[実行] を選択してコマンドを起動します。
200 OK
という応答は、サービス プリンシパルが正常に追加されたことを示します。
これで、サービス プリンシパルを使用して EA API シリーズに自動的にアクセスできます。 サービス プリンシパルには DepartmentReader ロールがあります。
サービス プリンシパルにサブスクリプション作成者ロールを割り当てる
記事「登録アカウントのロールの割り当て - Put」をお読みください。 読んでいる間に、[使ってみる] を選択して、サービス プリンシパルにサブスクリプション作成者ロールを割り当てます。
自分のアカウント資格情報を使用して、割り当てる登録アクセス権があるテナントにサインインします。
API 要求の一環として、次のパラメーターを指定します。 記事「登録アカウントのロールの割り当て - Put」の「URI パラメーター」をお読みください。
billingAccountName
: このパラメーターは、課金アカウント ID です。 これは、Azure portal の [コストの管理と請求] の [概要] ページで見つけることができます。billingRoleAssignmentName
: このパラメーターは一意の GUID であり、指定が必要です。 GUID は、PowerShell コマンド New-Guid を使って生成できます。 Online GUID/UUID Generator Web サイトを使って一意の GUID を生成することもできます。enrollmentAccountName
: このパラメーターは、アカウント ID です。 Azure portal の [コストの管理と請求] ページで、対象のアカウント名のアカウント ID を見つけます。この例では、
GTM Test Account
を使用します。 ID は196987
です。api-version
: 2019-10-01-preview バージョンを使用します。 「登録部署のロールの割り当て - Put」の「例」のところにあるサンプルを使用します。要求の本文には、使用する必要のある 3 つのパラメーターを含む JSON コードが含まれています。
パラメーター 参照先 properties.principalId
オブジェクト ID の値です。 「サービス プリンシパルとテナント ID を検索する」を参照してください。 properties.principalTenantId
「サービス プリンシパルとテナント ID を検索する」を参照してください。 properties.roleDefinitionId
/providers/Microsoft.Billing/billingAccounts/{BillingAccountID}/enrollmentAccounts/{enrollmentAccountID}/billingRoleDefinitions/a0bcee42-bf30-4d1b-926a-48d21664ef71
課金アカウント名は、API のパラメーターで使用したパラメーターと同じです。 これは、Azure portal で確認できる登録 ID です。
請求先のロール定義 ID
a0bcee42-bf30-4d1b-926a-48d21664ef71
は、サブスクリプション作成者ロールのものです。
[実行] を選択してコマンドを起動します。
200 OK
という応答は、サービス プリンシパルが正常に追加されたことを示します。
これで、サービス プリンシパルを使用して EA API シリーズに自動的にアクセスできます。 サービス プリンシパルには SubscriptionCreator ロールが割り当てられています。
サービス プリンシパルのロールの割り当てを確認する
サービス プリンシパルのロールの割り当ては、Azure portal に表示されません。 サブスクリプション作成者ロールを含む登録アカウント ロールの割り当てを表示するには、Billing Role Assignments - List By Enrollment Account - REST API (Azure Billing) API を使用します。 この API を使用して、ロールの割り当てが成功したことを確認します。
トラブルシューティング
EA ロールを付与したエンタープライズ アプリケーションのオブジェクト ID を特定して使用する必要があります。 他のアプリケーションのオブジェクト ID を使用すると、API 呼び出しは失敗します。 正しいエンタープライズ アプリケーションのオブジェクト ID を使用していることを確認します。
API 呼び出し時に次のエラーが発生した場合は、[アプリの登録] にあるサービス プリンシパル オブジェクト ID の値が正しく使用されていない可能性があります。 このエラーを解決するには、アプリ登録ではなく、エンタープライズ アプリケーションのサービス プリンシパル オブジェクト ID を使用していることを確認します。
The provided principal Tenant Id = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and principal Object Id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are not valid