Exchange Online PowerShell およびセキュリティ & コンプライアンス PowerShell での無人スクリプトのアプリのみの認証

Microsoft 365の監査とレポートのシナリオには、多くの場合、Exchange Online PowerShell と セキュリティ/コンプライアンス PowerShell の無人スクリプトが含まれます。 従来、無人サインインを実行するには、ユーザー名とパスワードをローカル ファイルまたは実行時にアクセスするシークレット コンテナーに保存する必要がありました。 ただし、ご存知のように、ユーザーの資格情報をローカルに保存することは、適切なセキュリティ プラクティスではありません。

この記事で説明する証明書ベースの認証 (CBA) またはアプリのみの認証は、Microsoft Entra アプリと証明書を使用した無人スクリプトと自動化のシナリオをサポートします。

注:

  • Azure のマネージド ID を使用して Exchange Online PowerShell に接続できることをご存知でしたか? 詳細については、「Azure マネージド ID を使用して Exchange Online PowerShell に接続する」を参照してください。

  • この記事で説明する機能と手順には、次のバージョンの Exchange Online PowerShell モジュールが必要です。

    • Exchange Online PowerShell (Connect-ExchangeOnline): バージョン 2.0.4 以降。
    • セキュリティ & コンプライアンス PowerShell (Connect-IPPSSession):バージョン 3.0.0 以降。

    モジュールをインストールまたは更新する方法については、「Exchange Online PowerShell モジュールのインストールと更新」を参照してください。 Azure Automation でモジュールを使用する方法については、「Azure Automation でモジュールを管理する」を参照してください。

  • CBA またはアプリのみの認証は、中国の 21Vianet が運営する Office 365 で利用できます。

  • Exchange Online PowerShell V3 モジュールの REST API 接続には、PowerShellGet モジュールと PackageManagement モジュールが必要です。 詳細については、「 Windows で REST ベースの接続を行うための PowerShellGet」を参照してください。

  • この記事の手順がうまくいかない場合は、次のコマンドを実行して、PackageManagement モジュールまたは PowerShellGet モジュールのプレビュー バージョンがインストールされていないことを確認します: Get-InstalledModule PackageManagement -AllVersions; Get-InstalledModule PowerShellGet -AllVersions

  • Exchange Online PowerShell では、この記事の手順を次の Microsoft 365 グループ コマンドレットで使用することはできません。

    Microsoft Graph を使用すると、これらのコマンドレットのほとんどの機能を置き換えることができます。 詳細については、「Microsoft Graph でのグループの操作」を参照してください。

  • アプリのみの認証は、セキュリティ & コンプライアンス PowerShell の Microsoft Purview eDiscovery コマンドレットでは引き続きサポートされていません。これには以下が含まれますが、これらに限定されません。

    利用可能な場合は、既存の自動化を Microsoft Graph API に移行します。 このサポートされていない構成を引き続き使用する自動化の機能を維持するには、バージョン 3.10.1 以降の ExchangeOnlineManagement モジュール、Connect-IPPSSession による EnableSearchOnlySession スイッチ、および必要なサービス プリンシパルと電子情報開示ロールベースのアクセス制御 (RBAC) 構成を使用します。 これらの対策では、構成のサポートされていない状態は変更されません。 詳細については、「 電子情報開示 PowerShell のアプリのみの認証を構成する」を参照してください。

  • 委任されたシナリオは、Exchange Online でサポートされています。 委任を使用して接続するための推奨される方法は、GDAP とアプリの同意を使用することです。 詳細については、「GDAP およびアプリの同意を備えた Exchange Online PowerShell v3 モジュールの使用」を参照してください。 CSP 関係が顧客と作成されていない場合は、マルチテナント アプリケーションを使用することもできます。 マルチテナント アプリケーションを使用するために必要な手順は、この記事の通常の手順で説明されています。

  • Windows PowerShell SDK を使用して接続するときに次のエラーが発生した場合は、Connect-ExchangeOnline コマンドレットの SkipLoadingFormatData スイッチを使用します。The term 'Update-ModuleManifest' is not recognized as a name of a cmdlet, function, script file, or executable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

どのような仕組みですか?

Exchange Online PowerShell モジュールは、Active Directory 認証ライブラリを使用して、アプリケーション ID、テナント ID (organization)、および証明書の拇印を使用してアプリ専用トークンをフェッチします。 Microsoft Entra ID 内でプロビジョニングされたアプリケーション オブジェクトには、アクセス トークンで返されるディレクトリ ロールが割り当てられています。 セッションのロール ベースのアクセス制御 (RBAC) は、トークンで使用可能なディレクトリ ロール情報を使用して構成されます。

接続の例

次の例は、アプリのみの認証で Exchange Online PowerShell モジュールを使用する方法を示しています。

重要

次の接続コマンドで、[組織] パラメーターの値として、organizationのプライマリ .onmicrosoft.com ドメインを使用します。

次の接続コマンドには、「Exchange Online PowerShell への接続」および「セキュリティ & コンプライアンス PowerShell への接続」で説明されているのと同じオプションが多数あります。 例:

  • Microsoft 365 GCC High、Microsoft 365 DoD、または Microsoft 365 China (21Vianet が運用) 環境では、次の追加のパラメーターと値が必要です。

  • Microsoft 365 GCC High

    • Connect-ExchangeOnline -ExchangeEnvironmentName O365USGovGCCHigh
    • Connect-IPPSSession -ConnectionUri https://ps.compliance.protection.office365.us/powershell-liveid/ -AzureADAuthorizationEndpointUri https://login.microsoftonline.us/organizations*
  • Microsoft 365 DoD

    • Connect-ExchangeOnline -ExchangeEnvironmentName O365USGovDoD
    • Connect-IPPSSession -ConnectionUri https://compliance.dod.microsoft.com/powershell-liveid -AzureADAuthorizationEndpointUri https://login.microsoftonline.us/organizations*
  • 21Vianet が運用している Microsoft 365 (中国)

    • Connect-ExchangeOnline -ExchangeEnvironmentName O365China
    • Connect-IPPSSession -ConnectionUri https://ps.compliance.protection.partner.outlook.cn/powershell-liveid -AzureADAuthorizationEndpointUri https://login.chinacloudapi.cn/organizations*

    * /organizations で終わるAzureADAuthorizationEndpointUri 値により、職場または学校アカウントのみが許可されます。 /common で終わる古い URI 値は引き続き機能しますが、個人用アカウント アカウントと職場または学校アカウントのどちらかを選択するように求められる場合があります。 コンシューマー アカウントを除外する必要があるエンタープライズ シナリオでは、 /organizations URI 値をお勧めします。

  • Connect-IPPSSession コマンドがサインイン プロンプトを提示する場合は、Connect-IPPSSession コマンドの前に次のコマンド $Global:IsWindows = $true を実行します。

  • サポートされていないアプリのみの構成を引き続き使用する既存の電子情報開示自動化の場合は、ExchangeOnlineManagement 3.10.1 以降を使用し、 EnableSearchOnlySession スイッチを Connect-IPPSSession コマンドに追加します。

  • 証明書の拇印を使用して接続する:

    注:

    CertificateThumbprint パラメーターは、Microsoft Windows でのみサポートされます。

    コマンドを実行しているコンピューターに証明書をインストールする必要があります。 証明書は、ユーザー証明書ストアにインストールする必要があります。

    • Exchange Online PowerShell:

      Connect-ExchangeOnline -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • セキュリティ/コンプライアンス PowerShell:

      Connect-IPPSSession -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
  • 証明書オブジェクトを使用して接続:

    コマンドを実行しているコンピューターに証明書をインストールする必要はありません。 証明書オブジェクトはリモートに保存できます。 スクリプトの実行時に証明書がフェッチされます。

    • Exchange Online PowerShell:

      Connect-ExchangeOnline -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • セキュリティ/コンプライアンス PowerShell:

      Connect-IPPSSession -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
  • ローカル証明書を使用して接続する:

    注:

    ConvertTo-SecureString コマンドを使用して証明書のパスワードをローカルに保存すると、自動化シナリオでセキュリティで保護された接続方法の目的が失われます。 Get-Credential コマンドを使用して安全に証明書のパスワードの入力を求めることは、自動化シナリオには理想的ではありません。 つまり、ローカル証明書を使用して接続するための自動化 された安全な 方法はありません。

    • Exchange Online PowerShell:

      Connect-ExchangeOnline -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (Get-Credential).password -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      
    • セキュリティ/コンプライアンス PowerShell:

      Connect-IPPSSession -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (Get-Credential).password -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
      

アプリ専用の認証をセットアップする

初期のオンボードは、アプリケーション オブジェクトを使用する認証に必要です。 アプリケーションとサービス プリンシパルは同義に使用されますが、アプリケーションはクラス オブジェクトのようなものであり、サービス プリンシパルはクラスのインスタンスのようなものです。 詳細については、「Microsoft Entra ID のアプリケーションとサービス プリンシパル オブジェクト」を参照してください。

Microsoft Entra ID でのアプリケーション作成に関する詳細な視覚的フローについては、「https://aka.ms/azuread-app」を参照してください。

  1. Microsoft Entra ID にアプリケーションを登録します

  2. アプリケーションに API アクセス許可を割り当てます

    アプリケーション オブジェクトには、既定で委任 された API アクセス許可 Microsoft Graph>User.Read があります。 PowerShell 接続と一致する アプリケーションの アクセス許可を追加します。

    • Exchange Online PowerShell (Connect-ExchangeOnline):Office 365 Exchange Online>Exchange.ManageAsApp.
    • セキュリティ & コンプライアンス PowerShell (Connect-IPPSSession):Microsoft Exchange Online Protection>Exchange.ManageAsApp.

    アプリケーションが両方の環境に接続する場合は、両方のアクセス許可を追加します。 アクセス許可ごとにテナント全体の管理者の同意を付与します。

  3. 証明書を生成する

    • Microsoft Entra ID でのアプリのみの認証の場合、通常は証明書を使用してアクセスを要求します。 証明書とその秘密キーを持つすべてのユーザーは、アプリに付与されたアクセス許可でアプリを使用できます。

    • アプリ専用アクセス トークンの要求中に、Microsoft Entra ID に対してアプリケーションを認証するために使用される X.509 証明書を作成して構成します。 証明書は自己署名できます。

    • この手順は、ユーザー アカウントのパスワードを生成する場合と似ています。 PowerShell で証明書を生成する手順については、この記事で後述する このセクション を参照してください。

      注:

      暗号化: 次世代 (CNG) 証明書は、Exchange でのアプリのみの認証ではサポートされていません。 最新バージョンの Windows では、CNG 証明書が既定で作成されます。 CSP キー プロバイダーからの証明書を使用する必要があります。 このセクション では、CSP 証明書を作成するためにサポートされている 2 つの方法について説明します。

  4. 証明書を Microsoft Entra アプリケーションに添付する

  5. アプリケーションにロール アクセス許可を割り当てる

手順 1: Microsoft Entra ID にアプリケーションを登録する

注:

問題が発生した場合は、必要なアクセス許可を確認して、アカウントが ID を作成できることを確認します。

  1. https://portal.azure.com/ でMicrosoft Entra 管理センターを開きます。

  2. ページ上部の [検索] ボックスに「アプリの登録」と入力し、[サービス] セクションの結果から [アプリの登録] を選択します。

    Azure portal のホーム ページの検索結果でのアプリの登録を示すスクリーンショット。

    または、アプリの登録 ページに直接移動するには、https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade を使用します。

  3. [アプリの登録] ページで、[新規登録] を選択します。

    [アプリの登録] ページで、[新規登録] を選択します。

  4. [アプリケーションの登録] ページが開いたら、次の設定を構成します:

    • 名前: 分かりやすい名前を入力します。 たとえば、ExO PowerShell CBA です。

    • サポートされているアカウントの種類: [この組織ディレクトリのみ (<YourOrganizationName> のみ - シングル テナント) のアカウント ] が選択されていることを確認します。

      注:

      委任されたシナリオでアプリケーションを Exchange Online マルチテナントにするには、任意の組織ディレクトリ内の [アカウント] (任意の Microsoft Entra ディレクトリ - マルチテナント) の値を選択します。

    • リダイレクト URI (省略可能): この設定は省略可能です。 これを使用する必要がある場合は、次の設定を行います。

      • プラットフォーム: [Web] を選択します。
      • URI: アクセス トークンが送信される URI を入力します。

      注:

      自動化されたアプリケーションにはネイティブ アプリケーションを使用できないため、 ネイティブ アプリケーションの資格情報を作成することはできません。

      アプリケーションを登録します。

    [アプリの登録] ページで完了したら、[登録] を選択します。

  5. 登録したアプリ の概要ページが表示されます 。 このページは開いたままにしておきます。 次の手順で使用します。

手順 2: アプリケーションに API アクセス許可を割り当てる

このセクションで 次のいずれかの 方法を選択して、アプリに API アクセス許可を割り当てます。

  • ポータルから API アクセス許可を選択して割り当てます。
  • アプリ マニフェストを変更して API のアクセス許可を割り当てる。 (Microsoft 365 GCC High および DoD 組織では、この方法を使用する必要があります)。

ポータルから API アクセス許可を選択して割り当てる

  1. アプリの概要ページで、[管理] セクションから [API アクセス許可] を選択します。

    [アプリケーションの概要] ページで [API アクセス許可] を選択します。

  2. アプリ API の [アクセス許可 ] ページで、[ アクセス許可の追加] を選択します。

    アプリケーションの [API アクセス許可] ページで [アクセス許可の追加] を選択します。

  3. 開いた [API アクセス許可の要求] ポップアップで、[organization が使用する API ] タブを選択し、PowerShell 接続に一致する API を選択します。

    • Exchange Online PowerShell (Connect-ExchangeOnline):Office 365 Exchange Onlineを検索して選択します。
    • セキュリティ & コンプライアンス PowerShell (Connect-IPPSSession): [Microsoft Exchange Online保護] を検索して選択します。

    アプリケーションが両方の環境に接続する場合は、手順 6 に進む前に、もう一方の API についても手順 2 から 5 を繰り返します。

    次のスクリーンショットは、Exchange Online PowerShell の選択を示しています。

    [organizationが使用する API] タブで Office 365 Exchange Online を見つけて選択します。

  4. [ アプリケーションに必要なアクセス許可の種類] ポップアップで、[ アプリケーションのアクセス許可] を選択します。

  5. 表示されるアクセス許可リストで、[ Exchange] を展開し、[ Exchange.ManageAsApp]、[ アクセス許可の追加] の順に選択します。

    [アプリケーションのアクセス許可] タブから Exchange.ManageAsApp のアクセス許可を見つけて選択します。

  6. アプリ API のアクセス許可 ページに戻り、必要な各 Exchange.ManageAsApp アクセス許可が一覧表示され、次の値が含まれていることを確認します。

    • : アプリケーション

    • 管理の同意が必要: はい

    • 状態: 現在の正しくない値は、<Organization> に付与されていません

      [<組織> の管理者の同意を与える] を選択してこの値を変更し、開いた確認ダイアログを読んで、[はい] を選択します。

      Exchange.ManageAsApp のアクセス許可には管理の同意が必要ですが、許可されていません。

      <Organization> のStatus 値が付与されるようになりました。

      Exchange.ManageAsApp アクセス許可に付与された管理の同意。

  7. 既定の Microsoft Graph>User.Read エントリとして、[...>] を選択します管理者の同意を取り消し、開いた確認ダイアログで はい を選択して、状態を既定の空白の値に戻します。

    既定の Microsoft Graph User.Read アクセス許可から管理の同意が削除されました。

  8. (ブラウザ タブではなく) 現在の [API アクセス許可] ページを閉じて、[アプリ登録] ページに戻ります。 今後の手順で [アプリの登録] ページを使用します。

アプリ マニフェストを変更して API アクセス許可を割り当てる

注:

このセクションの手順では、アプリに対する既存の既定のアクセス許可 (Microsoft Graph では委任された User.Read アクセス許可) に必要なアプリケーション Exchange.ManageAsApp アクセス許可が追加されます。 PowerShell 接続に一致するリソース値を使用します。 アプリケーションが Exchange Online PowerShell とセキュリティ & コンプライアンス PowerShell の両方に接続する場合は、Exchange リソース オブジェクトと 1 つの Microsoft Graph リソース オブジェクトの両方を含めます。

  1. アプリの概要ページで、[管理] セクションから [マニフェスト] を選択します。

    アプリケーションの概要ページで [マニフェスト] を選択します。

  2. アプリ マニフェスト ページで、 requiredResourceAccess エントリ (42 行目またはその前後) を見つけます。 Exchange Online PowerShell の場合は、エントリを次のコード スニペットのようにします。

    "requiredResourceAccess": [
        {
            "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
            "resourceAccess": [
                {
                    "id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
                    "type": "Role"
                }
            ]
        },
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                }
            ]
        }
    ],
    

    注:

    Microsoft 365 GCC High や DoD など、あらゆる環境のセキュリティ & コンプライアンス PowerShell の場合は、 requiredResourceAccess エントリに次の値を使用します。

    "requiredResourceAccess": [
        {
            "resourceAppId": "00000007-0000-0ff1-ce00-000000000000",
            "resourceAccess": [
                {
                    "id": "455e5cd2-84e8-4751-8344-5672145dfa17",
                    "type": "Role"
                }
            ]
        },
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                }
            ]
        }
    ],
    

    [マニフェスト] ページで完了したら、[保存] を選択します。

  3. 引き続き [マニフェスト] ページで、[管理] セクションから [API のアクセス許可] を選択します。

    [マニフェスト] ページで [API アクセス許可] を選択します。

  4. [ API のアクセス許可 ] ページで、必要な 各 Exchange.ManageAsApp アクセス許可が一覧表示され、次の値が含まれていることを確認します。

    • : アプリケーション

    • 管理の同意が必要: はい

    • 状態: 現在の正しくない値は、<Organization> に付与されていません

      <組織> の管理者の同意を付与 を選択して 状態 の値を変更し、開いた確認ダイアログを読んで、はい を選択します。

      Exchange.ManageAsApp のアクセス許可には管理の同意が必要ですが、許可されていません。

      <Organization> のStatus 値が付与されるようになりました。

      Exchange.ManageAsApp アクセス許可に付与された管理の同意。

  5. 既定の Microsoft Graph>User.Read エントリとして、[...>] を選択します管理者の同意を取り消し、開いた確認ダイアログで はい を選択して、状態を既定の空白の値に戻します。

    既定の Microsoft Graph User.Read アクセス許可から管理の同意が削除されました。

  6. (ブラウザ タブではなく) 現在の [API アクセス許可] ページを閉じて、[アプリ登録] ページに戻ります。 今後の手順で [アプリの登録] ページを使用します。

手順 3: 証明書を生成する

注:

暗号化: この記事で説明しているように、次世代 (CNG) 証明書はアプリのみの認証ではサポートされていません。 CNG 証明書は、既定では、最新の Windows バージョンで作成されます。 CSP キー プロバイダーからの証明書を使用する必要があります。

自己署名証明書、内部公開キー基盤または PKI (Active Directory 証明書サービスまたは AD CS など) によって発行された証明書、信頼できる商用証明機関 (CA) によって発行された証明書を使用できます。

X.509 証明書の唯一の要件は、エクスポート可能で利用可能な秘密キー (.pfx) と公開証明書 (.cer) です。

自己署名証明書の場合は、次のいずれかの方法を使用します。

  • (推奨): 管理者特権の PowerShell セッション ([管理者として実行] を選択した後に開いた PowerShell ウィンドウ) で New-SelfSignedCertificateExport-Certificate、および Export-PfxCertificate コマンドレットを使用して、自己署名証明書を要求し、証明書の秘密キーと公開キーをファイル (既定では SHA1) にエクスポートします。 例:

    # Create a self-signed certificate
    $mycert = New-SelfSignedCertificate -DnsName "contoso.org" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1) -KeySpec KeyExchange
    
    # Export the X.509 certificate and the associated private key to a password-protected .pfx file
    $mycert | Export-PfxCertificate -FilePath mycert.pfx -Password (Get-Credential).password
    
    # Export the X.509 public certificate to a .cer file
    $mycert | Export-Certificate -FilePath mycert.cer
    
  • Create-SelfSignedCertificate script スクリプトを使用して、SHA1 証明書を生成します。

    .\Create-SelfSignedCertificate.ps1 -CommonName "MyCompanyName" -StartDate 2026-01-06 -EndDate 2027-01-06
    

手順 4: 証明書を Microsoft Entra アプリケーションに添付する

アプリケーションに証明書を登録したら、認証のために秘密鍵 (.pfx ファイル) または拇印を使用できます。

  1. 手順 2 の最後にある [アプリの登録] ページの [所有するアプリケーション] タブで、アプリケーションを選択します。

    アプリの登録ページに戻る必要がある場合は、https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/RegisteredApps を使用し、[所有するアプリケーション] タブが選択されていることを確認してから、アプリケーションを選択します。

    アプリを選択するアプリ登録ページ。

  2. 開いたアプリケーション ページで、[管理] セクションから [証明書 & シークレット] を選択します。

    アプリケーションのプロパティ ページで [証明書 & シークレット] を選択します。

  3. [ 証明書 & シークレット ] ページで、[ 証明書のアップロード] を選択します。

    [証明書 & シークレット] ページで [証明書のアップロード] を選択します。

    開いた [証明書のアップロード] ポップアップで、手順 3 でエクスポートした公開証明書 (.cer ファイル) を参照し、[追加] を選択します。

    証明書を参照し、[追加] を選択します。

    これで、証明書が [証明書] セクションに表示されます。

    証明書が追加されたことを示す申請ページ。

  4. 現在の [証明書とシークレット] ページを閉じてから、[アプリの登録] ページを閉じてメイン https://portal.azure.com/ ページに戻ります。 次の手順で使用します。

手順 1Exchange Online 委任シナリオ用にアプリケーションをマルチテナントにした場合は、アプリケーションが各テナント組織の Exchange Online でコマンドレットを実行できるように、Exchange.ManageAsApp アクセス許可に管理者の同意を付与する必要があります organization。 顧客テナントごとに管理者の同意 URL を生成する必要があります。 マルチテナント アプリケーションを使用してテナント組織の Exchange Online に接続する前に、顧客テナントの管理者は次の organization URL を開く必要があります。

https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=<client-id>&scope=https://outlook.office365.com/.default

  • <tenant-id> は顧客のテナント ID です。
  • <client-id> はマルチテナント アプリケーションの ID です。
  • 既定のスコープは、アプリケーションのアクセス許可を付与するために使用されます。

URL 構文の詳細については、「 ディレクトリ管理者にアクセス許可を要求する」を参照してください。

手順 5: アプリケーションにロールのアクセス許可を割り当てる

以下のオプションがあります。

  • オプション 1: アプリケーションに Microsoft Entra ロールを割り当てる: 組み込みの Microsoft Entra ロールを使用して、ロールのすべてのアクセス許可を付与します。 これらの役割をカスタマイズしたり、範囲を設定したりすることはできません。

  • オプション 2: サービス プリンシパルを使用してアプリケーションにカスタム役割グループを割り当てる: 次のシナリオでは、このオプションをお勧めします。

    • アプリケーションで使用できるコマンドを制限する必要があります。
    • 書き込みスコープを使用して、変更できる受信者を制限する必要があります。
  • オプション 3: Microsoft Entra ロールとカスタム ロール グループを組み合わせる: RBAC は、すべてのソースからのアクセス許可を組み合わせます。 組み込みの Microsoft Entra ロールの機能を拡張するには、この方法をお勧めします。 たとえば、カスタム ロールから追加のアクセス許可を付与することで、 Exchange 受信者管理者 ロールの機能を拡張できます。

これらのオプションについては、次のサブセクションで説明します。

注:

Exchange Online 委任シナリオのマルチテナント アプリケーションの場合、顧客のテナントごとにアクセス許可を割り当てる必要があります。

オプション 1: アプリケーションに Microsoft Entra ロールを割り当てる

サポートされている Microsoft Entra ロールを次の表に示します。

役割 Exchange Online
PowerShell
セキュリティとコンプライアンス
PowerShell
コンプライアンス管理者
Exchange 管理者¹
"Exchange Recipient Administrator/Exchange 受信者管理者"
グローバル管理者¹ ²
グローバル閲覧者
ヘルプデスク管理者
セキュリティ管理者¹
セキュリティ閲覧者

¹ グローバル管理者ロールと Exchange 管理者ロールにより、Exchange Online PowerShell のすべてのタスクに必要なアクセス許可が付与されます。 例:

  • 受信者の管理。
  • セキュリティと保護機能。 たとえば、スパム対策、マルウェア対策、フィッシング詐欺対策、関連するレポートなどです。

セキュリティ管理者ロールには、これらの同じタスクに必要なアクセス許可がありません。

² Microsoft は、最小限の特権の原則を強く支持します。 アカウントにタスクを実行するために必要な最小限のアクセス許可のみを割り当てることは、セキュリティ リスクを軽減し、組織の全体的な保護を強化するのに役立ちます。 グローバル管理者は非常に特権的な役割であり、既存のロールを使用できない場合の緊急時に限定する必要があります。

Microsoft Entra ID でロールを割り当てるための一般的な手順については、「ユーザーに Microsoft Entra ロールを割り当てる」を参照してください。

注:

次の手順は、Exchange Online PowerShell と セキュリティ/コンプライアンス PowerShell では若干異なります。 両方の環境の手順を示します。 両方の環境の役割を構成するには、このセクションの手順を繰り返します。

  1. Microsoft Entra 管理センター at https://portal.azure.com/ で、ページ上部の [検索] ボックスに「役割と管理者」と入力し、[サービス] セクションの結果から [Microsoft Entra役割と管理者] を選択します。

    Azure portal のホーム ページの検索結果に Microsoft Entra のロールと管理者を示すスクリーンショット。

    または、[Microsoft Entra ロールと管理者] ページに直接移動するには、https://portal.azure.com/#view/Microsoft_AAD_IAM/AllRolesBlade を使用します。

  2. 開いた [役割と管理者] ページで、 (チェックボックスではなく) 結果の役割の名前をクリックして、サポートされている役割の 1 つを見つけて選択します。

    • Exchange Online PowerShell: たとえば、Exchange 管理者ロールを見つけて選択します。

      役割名をクリックして、サポートされている Exchange Online PowerShell の役割を見つけて選択します。

    • セキュリティ & コンプライアンス PowerShell: たとえば、 コンプライアンス管理者 ロールを見つけて選択します。

      ロール名をクリックして、サポートされているセキュリティ & コンプライアンスの PowerShell ロールを見つけて選択します。

  3. 開いた [課題 ] ページで、[ 課題の追加] を選択します。

    • Exchange Online PowerShell:

      Exchange Online PowerShell の [役割の割り当て] ページで [割り当ての追加] を選択します。

    • セキュリティ/コンプライアンス PowerShell:

      セキュリティ & コンプライアンス PowerShell のロールの割り当てページで [割り当ての追加] を選択します。

  4. 開いた [割り当ての追加] フライアウトで、手順 1 で作成したアプリを見つけて選択します。

    [割り当ての追加] フライアウトでアプリを見つけて選択します。

    [ 課題の追加] ポップアップが終了したら、[ 追加] を選択します。

  5. [ 割り当て] ページに戻り、役割がアプリに割り当てられていることを確認します。

    • Exchange Online PowerShell:

      Exchange Online PowerShell の役割にアプリを追加した後の、[役割の割り当て] ページ。

    • セキュリティ/コンプライアンス PowerShell:

      セキュリティ & コンプライアンス PowerShell のロールにアプリを追加した後の [ロールの割り当て] ページ。

オプション 2: サービス プリンシパルを使用してアプリケーションにカスタム役割グループを割り当てる

注:

新しいサービス プリンシパルを作成する手順を完了する前に、Exchange Online PowerShell またはセキュリティ & コンプライアンス PowerShell に接続する必要があります。 PowerShell に接続せずに新しいサービス プリンシパルを作成しても機能しません (新しいサービス プリンシパルを作成するには、Azure アプリ ID とオブジェクト ID が必要です)。

カスタム役割グループの作成の詳細については、「Exchange Online での役割グループを作成する」および「Microsoft Defender ポータルでEmail &コラボレーションの役割グループを作成する」を参照してください。 アプリケーションに割り当てるカスタム役割グループには、組み込みの役割とカスタムの役割の任意の組み合わせを含めることができます。

サービス プリンシパルを使用してカスタム役割グループをアプリケーションに割り当てるには、次の手順を実行します。

  1. Microsoft Graph PowerShell で、次のコマンドを実行して、手順 1 で登録した Microsoft Entra アプリケーションの詳細を変数に格納します。

    Connect-MgGraph -Scopes AppRoleAssignment.ReadWrite.All,Application.Read.All
    
    $<VariableName1> = Get-MgServicePrincipal -Filter "DisplayName eq '<AppName>'"
    

    例:

    Connect-MgGraph -Scopes AppRoleAssignment.ReadWrite.All,Application.Read.All
    
    $AzureADApp = Get-MgServicePrincipal -Filter "DisplayName eq 'ExO PowerShell CBA'"
    

    構文とパラメーターの詳細については、「 Get-MgServicePrincipal」を参照してください。

  2. 同じ PowerShell ウィンドウで、Exchange Online PowerShell または Security & Compliance PowerShell に接続し、次のコマンドを実行して以下を実行します。

    • Microsoft Entra アプリケーションのサービス プリンシパル オブジェクトを作成します。
    • 次の手順で使用するために、サービス プリンシパルの詳細を変数に格納します。
    New-ServicePrincipal -AppId $<VariableName1>.AppId -ObjectId $<VariableName1>.Id -DisplayName "<Descriptive Name>"
    
    $<VariableName2> = Get-ServicePrincipal -Identity "<Descriptive Name>"
    

    例:

    New-ServicePrincipal -AppId $AzureADApp.AppId -ObjectId $AzureADApp.Id -DisplayName "SP for Azure AD App ExO PowerShell CBA"
    
    $SP = Get-ServicePrincipal -Identity "SP for Azure AD App ExO PowerShell CBA"
    

    構文とパラメーターの詳細については、「 New-ServicePrincipal」を参照してください。

  3. Exchange Online PowerShell またはセキュリティ & コンプライアンス PowerShell で、次のコマンドを実行して、カスタム役割グループのメンバーとしてサービス プリンシパルを追加します。

    Add-RoleGroupMember -Identity "<CustomRoleGroupName>" -Member <$<VariableName2>.Identity | $<VariableName2>.ObjectId | $<VariableName2>.Id>
    

    例:

    Add-RoleGroupMember -Identity "Contoso View-Only Recipients" -Member $SP.Identity
    

    構文およびパラメーターの詳細については、「Add-RoleGroupMember」を参照してください。