Retirement of Exchange Web Services in Exchange Online で案内がされている通り、EWS (Exchange Web Services) は 2026 年 10 月 1 日からブロックが開始される予定です。これを受けて、テナント内で EWS が使用されていないか確認をしたい Exchange Online 管理者の方がいるかと思います。Identify applications using Exchange Online OutlookRESTv2 or Exchange Web Services (EWS) APIs やその日本語版の Outlook REST v2 API または Exchange Web Services (EWS) API を使用しているアプリケーションを見つける も公開されていますが、技術的にかなり細かい内容になっています。
そこでこの記事では、もっと簡潔な手順でテナントに登録されている EWS アプリを探す方法を紹介します。
なおここで扱うのは「テナント内で登録された、EWS を使用するアクセス許可が事前に設定されているアプリ」を探す方法のみです。テナント外で登録されて利用しているアプリ (つまり 3rd パーティのアプリ) は対象外です。3rd パーティのアプリの EWS の利用状況は Exchange Online の管理者が気にすることではありません。もし EWS を使っていたとしても Exchange Online の管理者には何もできないので、もし気になることがあればそのアプリの開発元に問い合わせればよいです。また、「テナント内で登録された、EWS を使用するアクセス許可が事前に設定されているアプリ」を見つけたとしても、実際にそのアプリが EWS を使用しているかどうかはアプリの開発者をテナント内で探して確認してもらう必要がありますし、もし EWS を使用していたら Exchange Online の管理者ではなくアプリの開発者が EWS から Microsoft Graph への移行を検討する必要があります。また、アプリはテナント内に登録されてあっても、動的に EWS のアクセス許可を取得するアプリはここで紹介する方法では対象外です。すべてのアプリは動的に EWS の委任されたアクセス許可をリクエストすることが可能であるためです。一方で EWS のアプリケーションのアクセス許可は事前に設定が必要なため、ここで紹介する方法でカバーされます。
EWS を使用するアプリは、先のブログなどでも記載されている通り、2 通りの登録方法があります。Microsoft Entra ID のアプリの登録と、Exchange Online のアプリケーション用の RBAC です。Microsoft Entra ID のアプリの登録は既定ではテナント内で誰でもできるので、野良アプリが存在しているかもしれません。一方で Exchange Online のアプリケーション用の RBAC は Exchange Online の管理者でないと登録できないので、わざわざ登録があるか確認しなくても、Exchange Online の管理者に登録した覚えがないのであればアプリは存在しないです。
それぞれの方法で登録された EWS アプリを探す方法は次の通りです。
Microsoft Entra ID のアプリの登録で登録された EWS アプリを探す
Microsoft Graph PowerShell SDK (Microsoft.Graph PowerShell モジュール) を使用します。Install the Microsoft Graph PowerShell SDK などを参考に PowerShell モジュールをインストールしておく必要があります。
まず以下のようにコマンドを実行して Microsoft Graph に接続します。認証にはグローバル管理者アカウントを使用します。
Connect-MgGraph -Scopes Application.Read.All
接続出来たら以下のようにコマンドを実行します。
Get-MgApplication -All -Property DisplayName, Id, AppId, RequiredResourceAccess | ?{$_.RequiredResourceAccess | ?{$_.ResourceAppId -eq "00000002-0000-0ff1-ce00-000000000000" -and (($_.ResourceAccess | Select-Object -ExpandProperty Id).Contains("3b5f3d61-589b-4a3c-a359-5dd4b5ee5bd5") -or ($_.ResourceAccess | Select-Object -ExpandProperty Id).Contains("dc890d15-9560-4a4c-9b7f-a736ec74ec40"))}} | Select-Object DisplayName, Id, AppId
結果が出力されたら、そのアプリは EWS を使用するアクセス許可が事前に設定されているアプリです。Microsoft Entra 管理センターの [ID] – [アプリの登録] – [すべてのアプリケーション] で当該アプリを探して詳細を確認してください。AppId として出力された値が、Microsoft Entra 管理センター上でのアプリケーション (クライアント) ID です。
なおこのコマンドで見つけられるアプリは、具体的には、Microsoft Entra 管理センターの [アプリの登録] でアプリを開いて、[管理] – [API のアクセス許可] で見た時に、Office 365 Exchange Online の EWS.AccessAsUser.All (委任されたアクセス許可) もしくは full_access_as_app (アプリケーションのアクセス許可) が設定されているアプリです。コマンド中で指定している “00000002-0000-0ff1-ce00-000000000000″ が Office 365 Exchange Online のことで、”3b5f3d61-589b-4a3c-a359-5dd4b5ee5bd5” が EWS の委任されたアクセス許可です。同様に “dc890d15-9560-4a4c-9b7f-a736ec74ec40” が EWS のアプリケーションのアクセス許可です。
Exchange Online のアプリケーション用の RBAC で登録された EWS アプリを探す
Exchange Online の PowerShell モジュール (ExchangeOnlineManagement PowerShell モジュール) を使用します。Connect to Exchange Online PowerShell などを参考にモジュールのインストールと Exchange Online への接続を行っておく必要があります。認証には Exchange Online の管理者アカウントを使用します。
接続出来たら以下のようにコマンドを実行します。
Get-ManagementRoleAssignment -Role "Application EWS.AccessAsApp" -RoleAssigneeType ServicePrincipal | %{Get-ServicePrincipal -Identity $_.RoleAssignee}
結果が出力されたら、そのアプリは EWS を使用するアクセス許可が事前に設定されているアプリです。Microsoft Entra 管理センターの [ID] – [アプリの登録] – [すべてのアプリケーション] で当該アプリを探して詳細を確認してください。AppId として出力された値が、Microsoft Entra 管理センター上でのアプリケーション (クライアント) ID です。
なおこのコマンドで見つけられるアプリは、具体的には、Role Based Access Control for Applications in Exchange Online や Role Based Access Control for Applications を使用してアプリが接続可能なメールボックスを制御する に記載されている方法で EWS のアクセス許可が設定されているアプリです。