この記事では、きめ細かくスケーラブルなリソース スコープのアクセス制御を使用する方法について説明します: Exchange Online のアプリケーション用の Role Based Access Control (RBAC)。
概要
Exchange Online のアプリケーション用 RBAC を使用すると、管理者は Exchange Online のデータに個別にアクセスしているアプリケーションにアクセス許可を付与できます。 この許可は、アクセス スコープ (リソース スコープ) と組み合わせて、アプリがアクセスできるメールボックスを指定できます。 この機能は、Exchange Online の現在の RBAC モデルを拡張し、アプリケーション アクセス ポリシーを置き換えます。 これらのアクセス許可の付与は、Microsoft Entra ID の範囲外の付与とは独立しています。
このシステムの中核となるのは、管理ロールの割り当て構成であり、これはプリンシパルがデータにアクセスできるようにする管理者の意図を表します。 この場合は、アプリが一連のターゲット リソースに対して何らかの役割を実行できるようにします。 たとえば、管理者は 管理スコープを使用して、特定の地域の予定表データにのみアクセスできる会議室予約システムを構成する場合があります。 次の図に、ロール割り当てモデルを示します。
構成手順
次の手順では、これらのアプリケーション RBAC 割り当てを作成する手順を示します。
- 新しいリソース スコープの作成 (省略可能)
- Microsoft Entra サービス プリンシパルへのポインターを作成する
- 適切なアプリケーション ロールを選択する
- 新しいロールの割り当てを作成する
- 新しいサービス プリンシパルをテストする
要件
Organization Management 役割グループには、新しいアプリケーション RBAC 役割の委任役割の割り当てがあります。 これらのアクセス許可を割り当てるには、Organization Management 役割グループのメンバーである必要があります。 または、Exchange Online RBAC を使用して、必要に応じてこれらのアプリケーション ロールに委任割り当てを付与することもできます。 Microsoft Entra ID では、これらのアクセス許可を割り当てるには Exchange 管理者ロールが必要です。
リソース スコープの定義
- 管理スコープ: メールボックスのプロパティに対するフィルター式を使用して、一連のメールボックスを表す Exchange エンティティ 。
- 管理単位: ユーザー、グループ、またはデバイスのみを含む他の Microsoft Entra リソースのコンテナーとなり得る Microsoft Entra リソース。 詳細については、「Microsoft Entra ID の管理単位」と「管理単位の作成または削除」を参照してください。
管理スコープ
管理スコープを使用すると、管理者はこれらのオブジェクトのプロパティに基づいて一連のメールボックスのスコープを設定できます。 追加、削除、設定については、管理スコープのドキュメントを参照してください。 管理スコープ内の フィルター可能なプロパティ の一覧を次に示します。
注:
[管理単位] というプロパティがありますが、スコープを中間ポインター オブジェクトとして作成しないように、ロールの割り当てでネイティブの管理単位パラメーターを使用することをお勧めします。
サービス プリンシパル
サービス プリンシパルは、organization 内のアプリケーションのインスタンスを表します。 Exchange のサービス プリンシパルは、Microsoft Entra ID の既存のサービス プリンシパルへのポインターと見なす必要があります。 サービス プリンシパルは、Exchange Online ツールを使用して直接作成することはできません。 Microsoft Entra ツールは、組織内のサービス プリンシパル登録を管理するために使用されます。 Exchange は、無効なポインターの作成を防止し、Microsoft Entra ID のサービス プリンシパルの削除を自動的に反映します。
新しいサービス プリンシパル
New-ServicePrincipal -AppId <Client Application ID in AAD> -ObjectId <Service principal object ID in AAD> -DisplayName <name>
次のスクリーンショットは、Microsoft Entra ID でこれらの ID を見つけるのに役立ちます:
注:
[アプリの登録] ページの ID は使用しないでください。異なる値が表示されるためです。 赤枠の「アプリケーション ID」は AppID で、「オブジェクト ID」は ServiceID です。
Get-MgServicePrincipal を使用してこれらの ID を検索するには、別の方法を使用できます。
サービス プリンシパルの削除
Remove-ServicePrincipal -Identity <ObjectID, AppID, or DisplayName>
サービス プリンシパルの設定
Set-ServicePrincipal -Identity <ObjectID, AppID, or DisplayName > -DisplayName <Updated name>
アプリケーション ロール
アプリケーション ロールは、Exchange Online の特別な種類の管理ロールであり、アプリケーションにのみ割り当てることができます。 これらのロールは、 Get-ManagementRole を使用して列挙できます。
ロールの割り当て
管理ロールの割り当てによって、プリンシパル、ロール、およびカスタム リソースのアクセス スコープが結び付けられます。 この割り当ては、スコープ全体でロールを実行するサービス プリンシパルのアクセス許可の割り当てとして機能します。
新しいロールの割り当て
New-ManagementRoleAssignment [[-Name] <String>] -Role <RoleIdParameter> -App <ObjectID, AppID, or DisplayName> -CustomResourceScope <Management Scope> (or -RecipientAdministrativeUnitScope)
ロールの割り当ての設定
Set-ManagementRoleAssignment [-Identity] <RoleAssignmentIdParameter> -CustomResourceScope <Management Scope> (or -RecipientAdministrativeUnitScope)
ロールの割り当てを削除する
ロールの割り当てを削除するには、「 管理の割り当ての削除」を参照してください。
承認のテスト
テスト コマンドレットを使用して、特定のサービス プリンシパルの RBAC 割り当てによって有効になる動作をシミュレートできます。
注:
この方法では、Microsoft Entra ID で個別に付与される可能性のあるアクセス許可が除外されます。
承認をテストするときに、オプションのリソース パラメーターを含めて、そのターゲット メールボックスに適用されるスコープを指定されたアクセス許可を評価することができます。
InScope will = true or false そのアクセス許可がそのサービス プリンシパルのメールボックスに適用される場合に True、またはサービス プリンシパルがそのアクセス許可を持つが、その特定のメールボックスには適用されていないことを False に表します。 このフラグを省略すると、"実行されません" になります。
テスト結果には、割り当てられた特定のアクセス許可に対して許可されたリソース スコープが常に含まれます。
サービス プリンシパル アクセスのテスト
Test-ServicePrincipalAuthorization -Identity <ObjectID, AppID, or DisplayName> [-Resource] <target mailbox>
例
PowerShell で Connect-ExchangeOnline を使用した後、次の手順を実行します。
例 1: 管理スコープを使用してカナダのユーザーの予定表の読み取りアクセス権を構成する
New-ServicePrincipal -AppId 71487acd-ec93-476d-bd0e-6c8b31831053 -ObjectId 6233fba6-0198-4277-892f-9275bf728bcc -DisplayName "example"
DisplayName ObjectId AppId
----------- --------- -----
example 6233fba6-0198-4277-892f-9275bf728bcc 71487acd-ec93-476d-bd0e-6c8b3183105
New-ManagementScope -Name "Canadian users" -RecipientRestrictionFilter "CustomAttribute1 -eq '012332'"
Name ScopeRestrictionType Exclusive RecipientRoot RecipientFilter
---- -------------------- --------- ------------- ---------------
Canadian users RecipientScope False CustomAttribute1 -eq '012332'
New-ManagementRoleAssignment -App 6233fba6-0198-4277-892f-9275bf728bcc -Role "Application Calendars.Read" -CustomResourceScope "Canadian users"
Name Role RoleAssigneeName RoleAssigneeType AssignmentMethod
---- ---- ---------------- ---------------- ----------------
Application Calendar... Application Ca... 6233fba6-0198-... ServicePrincipal Direct
例 2: すべてのヨーロッパの管理単位のメールボックスに対する Mail.Read の構成
New-ServicePrincipal -AppId eb19847b-5563-42ea-b719-ea47cb0cf4b3 -ObjectId 59b7c6cb-58d3-4ee8-a409-8c1f9dbb5d36 -DisplayName "example"
DisplayName ObjectId AppId
----------- --------- -----
example 59b7c6cb-58d3-4ee8-a409-8c1f9dbb5d36 eb19847b-5563-42ea-b719-ea47cb0cf4b3
New-ManagementRoleAssignment -App 59b7c6cb-58d3-4ee8-a409-8c1f9dbb5d36 -Role "Application Mail.Read" -RecipientAdministrativeUnitScope 4d819ce9-9257-44d7-af20-68a49e6697f4
Name Role RoleAssigneeName RoleAssigneeType AssignmentMethod
---- ---- ---------------- ---------------- ----------------
Application Mail.Rea... Application Ma... 59b7c6cb-58d3-... ServicePrincipal Direct
例 3: サービス プリンシパルに割り当てられたアクセス許可のテスト
Test-ServicePrincipalAuthorization -Resource b -Identity "DemoB" |Format-Table
RoleName GrantedPermissions AllowedResourceScope ScopeType InScope
-------- ------------------ -------------------- --------- ------
Application Mail.Read Mail.Read Scope-MESGaDN CustomRecipientScope False
Application Calendars.Read Calendars.Read Scope-DL1 CustomRecipientScope False
Application Contacts.Read Contacts.Read Scope-MESGa CustomRecipientScope False
制限事項
- アプリケーションは役割グループのメンバーになることはできません。
- アプリケーション ロールは、サービス プリンシパルにのみ割り当てることができます。
- アプリケーション ロールのコピーや派生はできません。
- 排他的管理スコープでは、アプリのアクセスは制限されません。
- アプリのアクセス許可の変更は、アプリの最近の使用状況に応じて 30 分から 2 時間のキャッシュ メンテナンスの対象となります。 構成をテストする場合、test コマンドはこのキャッシュをバイパスします。 API への受信呼び出しがないアプリのキャッシュは、30 分後にリセットされます。 アクティブなアプリのキャッシュは最大 2 時間保持されます。
サポートされているプロトコル
- MS Graph
- EWS
サポートされているアプリケーション ロール
| 名前 | プロトコル | アクセス許可リスト | 説明 |
|---|---|---|---|
Application Mail.Read |
MS Graph | Mail.Read |
アプリがサインイン ユーザーなしですべてのメールボックスのメールを読み取ることを許可します。 |
Application Mail.ReadBasic |
MS Graph | Mail.ReadBasic |
アプリで、サインイン ユーザーなしですべてのメールボックスの本文、previewBody、添付ファイル、および拡張プロパティを除くメールを読み取ることを許可します |
Application Mail.ReadWrite |
MS Graph | Mail.ReadWrite |
アプリが、サインインしているユーザーなしで、すべてのメールボックスのメールを作成、読み取り、更新、削除することを許可します。 メールを送信する権限は含まれません。 |
Application Mail.Send |
MS Graph | Mail.Send |
サインインしているユーザーなしで、任意のユーザーとしてアプリでメールを送信できるようにします。 |
Application MailboxSettings.Read |
MS Graph | MailboxSettings.Read |
アプリが、サインイン ユーザーなしですべてのメールボックスのユーザーのメールボックス設定を読み取ることを許可します。 |
Application MailboxSettings.ReadWrite |
MS Graph | MailboxSettings.ReadWrite |
アプリが、サインインしているユーザーがいなくても、すべてのメールボックスでユーザーのメールボックス設定を作成、読み取り、更新、削除できるようにします。 |
Application Calendars.Read |
MS Graph | Calendars.Read |
サインインしているユーザーなしで、すべてのカレンダーのイベントをアプリで読み取れるようにします。 |
Application Calendars.ReadWrite |
MS Graph | Calendars.ReadWrite |
サインインしているユーザーなしで、すべての予定表のイベントをアプリで作成、読み取り、更新、および削除できるようにします。 |
Application Contacts.Read |
MS Graph | Contacts.Read |
サインインしているユーザーなしで、すべてのメールボックス内のすべての連絡先をアプリで読み取りできるようにします。 |
Application Contacts.ReadWrite |
MS Graph | Contacts.ReadWrite |
サインインしているユーザーなしで、すべてのメールボックス内のすべての連絡先をアプリで作成、読み取り、更新、および削除できるようにします。 |
Application MailboxFolder.Read |
MS Graph | MailboxFolder.Read.All |
アプリが、サインイン ユーザーなしですべてのユーザーのメールボックス フォルダーを読み取ることを許可します。 |
Application MailboxFolder.ReadWrite |
MS Graph | MailboxFolder.ReadWrite.All |
アプリがサインイン ユーザーなしですべてのユーザーのメールボックス フォルダーを読み書きすることを許可します。 |
Application MailboxItem.Read |
MS Graph | MailboxItem.Read.All |
アプリがサインイン ユーザーなしですべてのユーザーのメールボックス アイテムを読み取ることを許可します。 |
Application MailboxItem.Export |
MS Graph | MailboxItem.Export.All |
アプリで、サインイン ユーザーなしですべてのユーザーのメールボックス アイテムをエクスポートできるようにします。 |
Application MailboxItem.ImportExport |
MS Graph | MailboxItem.ImportExport.All |
アプリで、サインイン ユーザーなしですべてのユーザーのメールボックス アイテムをエクスポートおよびインポートできるようにします。 |
Application Mail Full Access |
MS Graph |
Mail.ReadWrite, Mail.Send |
アプリですべてのメールボックスのメールを作成、読み取り、更新、削除し、サインインしていないユーザーのいない任意のユーザーとしてメールを送信できるようにします。 |
Application Exchange Full Access |
MS Graph |
Mail.ReadWrite, Mail.Send, MailboxSettings.ReadWrite, Calendars.ReadWrite, Contacts.ReadWrite |
サインインしていないユーザーなし: アプリがすべてのメールボックスでメールを作成、読み取り、更新、削除し、任意のユーザーとしてメールを送信できるようにします。 アプリがすべてのメールボックスでユーザーのメールボックス設定を作成、読み取り、更新、削除できるようにします。 アプリがすべてのカレンダーのイベントを作成、読み取り、更新、削除できるようにします。 アプリがすべてのメールボックス内のすべての連絡先を作成、読み取り、更新、削除できるようにします。 |
Application EWS.AccessAsApp |
EWS | EWS.AccessAsApp |
アプリですべてのメールボックスへのフル アクセス権を持つ Exchange Web サービスを使用できるようにします。 |
Application SMTP.SendAsApp |
MS Graph | SMTP.SendAsApp |
アプリで SMTP クライアント送信を使用して、ユーザーの送信トレイ フォルダーにメールを送信することを許可します。 |
Application MailboxConfigItem.Read |
MS Graph | MailboxConfigItem.Read |
アプリがサインイン ユーザーなしで UserConfiguration オブジェクトを読み取ることを許可します。 |
Application MailboxConfigItem.ReadWrite |
MS Graph | MailboxConfigItem.ReadWrite |
アプリがサインイン ユーザーなしで UserConfiguration オブジェクトの読み取り、書き込み、更新、削除をできるようにします。 |
Application MailTips.ReadBasic.All |
MS Graph | MailTips.ReadBasic.All |
アプリがメール コンテンツを公開せずに、サインイン ユーザーなしでメール ヒント メタデータのみにアクセスすることを許可します |
これらのロールは、Azure ID プラットフォーム内の他の場所で同意できる Microsoft Graph のアクセス許可を表す場合があります。 これらのアクセス許可は、これらのロールの割り当てを除き、Graph アクセス許可と同じ効果があり、リソース スコープのきめ細かいアクセスが可能になります。
よくあるご質問 (FAQ)
Exchange Online アプリケーション RBAC で使用したスコープで許可されていないメールボックスに、アプリケーションが引き続きアクセスできるのはなぜですか?
Microsoft Entra ID で割り当てられた範囲が設定されていない organization 全体のアクセス許可を削除したことを確認する必要があります。 アプリケーション RBAC を使用して割り当てられたアクセス許可は、Microsoft Entra ID で行った付与に加えて機能します。 Microsoft Entra のアクセス許可は、アプリケーション アクセス ポリシーを使用してのみ制限できます。 つまり、割り当てられたアクセス許可は、Microsoft Entra ID からのアクセス許可と、Exchange Online RBAC で割り当てられたアクセス許可に対する結合操作です。 各機関は独立して行動できます。
たとえば、Microsoft Entra ID でサービス プリンシパルMail.Read付与されていて、アプリケーション RBAC でリソース スコープのMail.Read アクセス許可を構成する場合、Microsoft Entra IDから Mail.Read の割り当てを削除することが重要です。 それ以外の場合、Microsoft Entra からのスコープなしMail.Read許可と、アプリケーション RBAC でのリソース スコープ付き Mail.Read許可の結合では、有効なリソース スコープが設定されません。
1 つのインターフェイスですべてのアプリケーションのアクセス許可を表示および変更するにはどうすればよいですか?
管理者がアプリのアクセス許可を統合的に把握できるように、Microsoft Entra 管理者エクスペリエンスで Exchange Online で付与されたこれらのアクセス許可が表示されます。 この機能は近日公開予定です。乞うご期待ください。
アプリケーション アクセス ポリシーからアプリケーションの RBAC に移行する方法
アプリケーション アクセス ポリシーを使用すると、サービス プリンシパル、Azure でのアクセス許可の同意、および Exchange Online のサービス プリンシパルに関連付けられているポリシーがあります。 Exchange 管理スコープまたは管理単位を使用してスコープ メカニズムを再構築できますが、ここでは、アプリケーション許可の RBAC のスコープとして、アプリ アクセス ポリシーのグループを再利用するためのガイダンスをいくつか紹介します。 このプロセスによってアプリの使用が中断されることはありません。
移行手順:
アプリケーション アクセス ポリシーのスコープ グループを指す新しい管理スコープを作成します。
サービス プリンシパル ポインター オブジェクトを作成します。
管理スコープの制限を使用して、Exchange Online のサービス プリンシパルに必要なアクセス許可を割り当てます。
Azure でのアクセス許可への同意を削除します。
アプリケーション アクセス ポリシーを削除します。
手順 1 で管理スコープを作成するときは、フィルター パラメーター
MemberOfGroupで受信者フィルターを使用します。 次に例を示します:"MemberOfGroup -eq 'CN=mesga20220818210551,OU=Fabrikam346.onmicrosoft.com,OU=Microsoft Exchange Hosted Organizations,DC=NAMPR00A001,DC=prod,DC=outlook,DC=com'"
注:
このフィルター パラメーターでは、グループの 識別名 を使用します。これは Get-Group コマンドレットを使用して検索できます。
制限事項:
- 入れ子になったグループ メンバーは、スコープ外と見なされます。 直接グループ メンバーシップのみが、メンバーが承認のスコープ内と見なされます。
- Microsoft 365 グループ、Mail-Enabled セキュリティ グループ、配布リストがサポートされています。
RBAC for Applications はアプリケーション アクセス ポリシーとどのように連携しますか?
アプリ アクセス ポリシーとの互換性:
アプリケーション用 RBAC は、アプリケーション アクセス ポリシーを置き換えます。
承認の相互運用性は、次のように説明できます。
アプリケーション アクセス ポリシーは、Microsoft Entra ID で割り当てられたアクセス許可のみを制限します。
RBAC for Applications は、関連付けられたリソース・スコープを持つ認可の代替式を提供します。
アプリには、Microsoft Entra 同意したアクセス許可と RBAC 割り当ての両方を含めることができます。 アプリに (たとえば) organization全体の
Mail.Readとスコープが設定されたMail.Sendがある場合、このようなケースが想定されます。アクセス許可の同意は加算されます。
例 1: 2 つのシステムからの同意:
- Microsoft Entra ID アプリに
Mail.Readがあります。 - このアプリは、アプリケーション アクセス ポリシーを使用しているメールが有効なセキュリティ グループ 1 を対象としています。
- 同じアプリが
Calendar.Readアプリケーション用 RBAC の管理スコープ 1 に同意しています。 - メールボックス A は、メールが有効なセキュリティ グループ 1 に属しています。
- メールボックス B は、管理スコープ 1 のスコープ内にあります。
アプリ 1 の Mail.Read と Calendar.Read の両方を必要とするエンドポイントへの MS Graph アクセス:
- メールボックス A のターゲット設定: 失敗します。
- メールボックス B をターゲットにする: 失敗します。
このエンドポイントには、 Mail.Read と Calendar.Readの両方が必要です。 アプリには、2 つの別々のメールボックスに対して個別にこれらのアクセス許可が与えられますが、1 つのメールボックスに対しては両方のアクセス許可がありません。
例 2: 同じアクセス許可を 2 回割り当てる:
- Microsoft Entra ID アプリに
Mail.Readがあります。 - このアプリは、アプリケーション アクセス ポリシーを使用しているメールが有効なセキュリティ グループ 1 を対象としています。
- 同じアプリが
Mail.Readアプリケーション用 RBAC を使用して管理スコープ 1 に同意しています。 - メールボックス A は、メールが有効なセキュリティ グループ 1 に属しています。
- 管理スコープ 1 では、(
Alias -ne mbxaなどのフィルターに従って) メールボックス A を除くすべてのメールボックスにアクセスできます。
アプリ 1 の Mail.Read を必要とするエンドポイントへの MS Graph アクセス:
- メールボックス A をターゲットにします: 許可。
- メールボックス B をターゲットにする: allow.
Microsoft Entra のみからのMail.Readではメールボックス A にアクセスできますが、RBAC 割り当てでは A を除くすべてのものにアクセスできます。実際には、"A であり A でない" がすべてを意味するため、この割り当てによってすべてにアクセスできます。
完全を期すためにこれらのエッジ ケースの概要を説明しましたが、通常、アプリケーション アクセス ポリシーがアプリケーション用 RBAC で使用されるとは想定していません。 組織全体のアクセス許可は Microsoft Entra ID で割り当てる必要がありますが、リソース スコープのアクセス許可はアプリケーション用 RBAC を使用して付与する必要があります。
アプリケーション用 RBAC ではいくつのアプリケーションがサポートされていますか?
アプリケーション用 RBAC を使用すると、organization ごとに最大 10,000 個のアプリケーションを作成できます。 この制限で問題が発生する場合は、お知らせください。 最大のお客様のニーズに対応するために、スケーラブルな方法で RBAC for Applications を構築しました。
自動検出が機能しないのはなぜですか?
現時点では、RBAC アプリケーション ロールを使用している場合、 自動検出サービス にアクセスできません。
Microsoft Entra でサービス プリンシパルを削除すると、Exchange はどうなりますか?
Microsoft Entra で削除されたサービス プリンシパルは、Exchange でも自動的に削除されます。 この削除によって、これらのサービス プリンシパルへの割り当てはすべて削除されますが、管理スコープは影響を受けません。
この機能に関するフィードバック
この機能に関するフィードバックは、 exoapprbacpreview@microsoft.com に共有できます。