EXO V2 モジュールの無人スクリプトのアプリ専用の認証

注意

この記事で説明する機能と手順には、バージョン 2.0.3 以降の EXO V2 モジュールが必要です。 このバージョンのモジュールをインストールまたは更新する方法の手順については、「EXO V2 モジュールをインストールして管理する」を参照してください。

Exchange Online の監査とレポートのシナリオには、多くの場合、無人で実行するスクリプトが含まれます。 ほとんどの場合、これらの無人スクリプトは、ベーシック認証 (ユーザー名とパスワード) を使用して Exchange Online PowerShell にアクセスします。 Exchange Online PowerShell への接続で先進認証を使用している場合でも、資格情報は実行時にアクセスされるローカル ファイルまたはシークレット ボルトに格納されます。

ユーザーの資格情報をローカルに保存するのは安全な方法ではないため、この機能をリリースして、AzureAD アプリケーションと自己署名証明書を使用した無人スクリプト (自動化) シナリオの認証をサポートします。

次の例では、アプリ専用の認証により Exchange Online PowerShell V2 モジュールを使用する方法を示します:

重要

Connect-ExchangeOnline コマンドでは、Organization パラメーターの値に .onmicrosoft.com ドメインを必ず使用してください。 そうしないと、アプリのコンテキストでコマンドを実行したときに、暗号化されたアクセス許可の問題が発生する可能性があります。

  • ローカルの証明書を使用して接続する:

    Connect-ExchangeOnline -CertificateFilePath "C:\Users\johndoe\Desktop\automation-cert.pfx" -CertificatePassword (ConvertTo-SecureString -String "<MyPassword>" -AsPlainText -Force) -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
    
  • 証明書の拇印を使用して接続する:

    Connect-ExchangeOnline -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
    

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

  • 証明書オブジェクトを使用して接続する:

    Connect-ExchangeOnline -Certificate <%X509Certificate2 Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contosoelectronics.onmicrosoft.com"
    

    証明書 パラメーターを使用する場合、コマンドを実行しているコンピューターに証明書をインストールする必要はありません。 このパラメーターは、スクリプト実行時に証明書オブジェクトがリモートに保存され、実行時に取得されるシナリオに適用されます。

ヒント

アプリのみの認証は委任をサポートしていません。 委任シナリオでの無人スクリプトは、セキュア アプリ モデルでサポートされています。 詳細については、こちらを参照してください。

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

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

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

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

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

  1. Azure AD にアプリケーションを登録します

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

    アプリケーション オブジェクトには、既定のアクセス許可 User.Read があります。 アプリケーション オブジェクトが Exchange Online リソースにアクセスするには、アプリケーションのアクセス許可 Exchange.ManageAsApp が必要です。

  3. 自己署名証明書を生成する

    • Azure AD でのアプリ専用の認証では、一般的に証明書を使用してアクセス権を要求します。 証明書とその秘密キーを持つすべてのユーザーは、アプリと、アプリに付与された権限を使用できます。

    • 自己署名された X.509 の証明書を作成して設定します。この証明書は、アプリ専用アクセス トークンを要求しながら Azure AD に対してアプリケーションを認証するために使用されます。

    • これは、ユーザーアカウントのパスワードを生成するのと似ています。 証明書も自己署名できます。 PowerShell で証明書を生成する手順については、この記事の後半にある 「付録」 セクションを参照してください。

      注意

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

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

  5. Azure AD のロールをアプリケーションに割り当てる

    アプリケーションには、適切な RBAC ロールが割り当てられている必要があります。 アプリは Azure AD でプロビジョニングされるので、組み込みのロールのいずれかを使用できます。 サポートされているロールは次のとおりです:

    • 全体管理者
    • コンプライアンス管理者
    • セキュリティ閲覧者
    • セキュリティ管理者
    • ヘルプデスク管理者
    • Exchange 管理者
    • グローバル閲覧者

    注意

    グローバル管理者および Exchange 管理者ロールは、受信者の管理や保護機能 (スパム対策、マルウェア対策など) を含む Exchange 関連のタスクに必要なアクセス許可を提供します。 セキュリティ管理者ロールには、これらの Exchange 関連タスクに必要なアクセス許可はありません。

付録

ステップ 1: Azure AD にアプリケーションを登録します。

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

  1. https://portal.azure.com/で Azure AD ポータルを開きます。

  2. [Azure Active Directory の管理] で、[表示] をクリックします。

    Azure AD ポータルの [Azure Active Directory の管理] の下にある [表示] をクリックします。

  3. 開いた [概要] ページの [管理] で、[アプリの登録] を選択します。

    [アプリの登録] を選択します。

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

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

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

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

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

    • URI のリダイレクト (オプション): 最初のボックスで、Web が選択されていることを確認します。 2番目のボックスに、アクセス トークンの送信先 URI を入力します。

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

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

    完了したら、[登録] をクリックします。

  5. 戻ったアプリ ページを開いたままにします。 次の手順で使用します。

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

注意

このセクションの手順は、新しいアプリ用に自動的に構成された既定のアクセス許可を置き換えます。 アプリには、置き換えられた既定のアクセス許可は必要はありません。

  1. [管理] の下のアプリページで、[マニフェスト] を選択します。

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

  2. 開いた [マニフェスト] ページで、requiredResourceAccess エントリを見つけます (44 行目またはその前後にあります)。

    次のコード スニペットに示すように、resourceAppIdresourceAccessid、およびtypeの値を変更します。

    "requiredResourceAccess": [
       {
          "resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
          "resourceAccess": [
             {
                "id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
                "type": "Role"
             }
          ]
       }
    ],
    

    完了したら、[保存] をクリックします。

  3. 引き続き マニフェスト ページの [管理] で、[API権限] を選択します。

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

    開いた [API アクセス許可] ページで、次の手順を実行します。

    • API / アクセス許可名: 値 Exchange.ManageAsApp が表示されていることを確認します。

    • ステータス: 現在の不正な値は 許可されておらず<Organization>、この値を変更する必要があります。

      オリジナルの誤った API アクセス許可。

      [管理者の同意を付与する]<Organization> を選択し、開いた確認ダイアログを読んで、[はい] をクリックします。

      これで、ステータス 値が 付与されます<Organization>

      管理者の同意が付与されました。

  4. (ブラウザ タブではなく) 現在の [API アクセス許可] ページを閉じて、[アプリ登録] ページに戻ります。 これらの情報は、次のステップで使用します。

手順 3: 自己署名証明書を生成する

次のいずれかの方法で、自己署名 x.509 証明書を作成します:

  • (推奨) 昇格した (管理者として実行する) Windows PowerShell セッションで New-SelfSignedCertificateExport-Certificate、および Export-PfxCertificate コマンドレットを使用して、自己署名証明書を要求し、それを .cer および .pfx (既定では SHA1) にエクスポートします。 例:

    # Create certificate
    $mycert = New-SelfSignedCertificate -DnsName "contoso.org" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1) -KeySpec KeyExchange
    
    # Export certificate to .pfx file
    $mycert | Export-PfxCertificate -FilePath mycert.pfx -Password $(ConvertTo-SecureString -String "P@ssw0Rd1234" -AsPlainText -Force)
    
    # Export certificate to .cer file
    $mycert | Export-Certificate -FilePath mycert.cer
    
  • Create-SelfSignedCertificate script スクリプトを使用して、SHA1 証明書を生成します。

    .\Create-SelfSignedCertificate.ps1 -CommonName "MyCompanyName" -StartDate 2021-01-06 -EndDate 2022-01-06
    

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

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

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

    [アプリの登録] ページに戻る必要がある場合は、次の手順を実行します。

    1. https://portal.azure.com/で Azure AD ポータルを開きます。
    2. [Azure Active Directory の管理] で、[表示] をクリックします。
    3. [管理] の下で [アプリの登録] を選択します。

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

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

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

  3. 表示された [証明書とシークレット] ページで、[証明書のアップロード] をクリックします。

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

    開いたダイアログで、手順 3 で作成した自己署名証明書 (.cer ファイル) を参照します。

    証明書を参照し、[追加] をクリックします。

    完了したら、[追加] をクリックします。

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

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

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

手順 5: Azure AD のロールをアプリケーションに割り当てる

Azure AD には、50 以上の管理者ロールがあります。 Exchange Online でアプリ専用の認証を使用する場合、現在、前述のロールをサポートしています。

  • 全体管理者
  • コンプライアンス管理者
  • セキュリティ閲覧者
  • セキュリティ管理者
  • ヘルプデスク管理者
  • Exchange 管理者
  • グローバル閲覧者

Azure AD での役割の割り当てに関する一般的な手順については、「Azure Active Directory で管理者ロールを確認し割り当てる」を参照してください。

  1. https://portal.azure.com/の Azure AD ポータルの [AzureActive Directoryの管理] で、[表示] をクリックします。

    Azure AD ポータルの [Azure Active Directory の管理] で表示します。

  2. 開いた [概要] ページの [管理] で、[役割と管理者] を選択します。

    概要ページから [役割と管理者] を選択します。

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

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

  4. 開いた [割り当て] ページで、[割り当ての追加] をクリックします。

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

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

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

    完了したら、[追加] をクリックします。

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

    アプリを役割に追加した後の役割割り当てページ。