Application Insights を使用して Azure Active Directory B2C のログを収集する

"開始する前に"、[ポリシーの種類の選択] セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。

この機能は、カスタム ポリシーでのみ使用できます。 セットアップ手順は、前のセレクターで [カスタム ポリシー] を選択します。

この記事では、カスタム ポリシーの問題を診断できるよう、Active Directory B2C (Azure AD B2C) からログを収集する手順を説明します。 Application Insights は、例外を診断したり、アプリケーションのパフォーマンスの問題を視覚化したりするための手段を提供します。 Azure AD B2C には、Application Insights にデータを送信するための機能が含まれます。

ここで説明する詳細なアクティビティ ログは、カスタム ポリシーを開発している間だけ、有効にする必要があります。

警告

運用環境では、DeploymentModeDevelopment に設定しないでください。 ログを使うと、ID プロバイダーとの間で送受信されるすべての要求を収集できます。 開発者には、Application Insights ログで収集されるすべての個人データに対する責任があります。 これらの詳細ログは、ポリシーが開発者モードで配置されている場合にのみ収集されます。

Application Insights を設定する

サブスクリプションに Application Insights のインスタンスがまだない場合は、作成します。

ヒント

Application Insights の 1 つのインスタンスを、複数の Azure AD B2C テナントに使用できます。 次に、クエリで、テナント名またはポリシー名でフィルター処理できます。 詳細については、「Application Insights のサンプル」のログをご覧ください。

サブスクリプションで Application Insights の終了インスタンスを使用するには、次の手順に従います。

  1. Azure portal にサインインします。
  2. Azure AD B2C ディレクトリではなく、Azure サブスクリプションが含まれる Microsoft Entra ディレクトリを使用していることを確認してください。 ポータル ツールバーの [Directories + subscriptions](ディレクトリ + サブスクリプション) アイコンを選択します。
  3. ポータルの設定 | ディレクトリ + サブスクリプション ページの ディレクトリ名 の一覧で自分の Microsoft Entra ディレクトリを見つけて、切り替え を選択します。
  4. 先ほど作成した Application Insights リソースを開きます。
  5. [概要] ページで、 [インストルメンテーション キー] を記録します。

サブスクリプションに Application Insights のインスタンスを作成するには、次の手順を実行します。

  1. Azure portal にサインインします。
  2. Azure AD B2C ディレクトリではなく、Azure サブスクリプションが含まれる Microsoft Entra ディレクトリを使用していることを確認してください。 ポータル ツールバーの [Directories + subscriptions](ディレクトリ + サブスクリプション) アイコンを選択します。
  3. ポータルの設定 | ディレクトリ + サブスクリプション ページの ディレクトリ名 の一覧で自分の Microsoft Entra ディレクトリを見つけて、切り替え を選択します。
  4. 左のナビゲーション メニューで [リソースの作成] を選択します。
  5. Application Insights を探して選択し、 [作成] を選択します。
  6. フォームに漏れなく入力し、 [確認および作成] を選択してから、 [作成] を選択します。
  7. デプロイが完了したら、[リソースに移動] を選択します。
  8. Application Insights のメニューの [構成] で、 [プロパティ] を選択します。
  9. 後のステップで使用する [インストルメンテーション キー] を記録しておきます。

カスタム ポリシーを構成する

  1. 証明書利用者 (RP) ファイルを開きます (例: SignUpOrSignin.xml).

  2. 次の属性を <TrustFrameworkPolicy> 要素に追加します:

    DeploymentMode="Development"
    UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights"
    
  3. まだ存在しない場合は、子ノード <UserJourneyBehaviors><RelyingParty> ノードに追加します。 <DefaultUserJourney ReferenceId="UserJourney Id" from your extensions policy, or equivalent (for example:SignUpOrSigninWithAAD" /> の後に配置する必要があります。 RelyingParty 子要素の完全な順序については、「RelyingParty スキーマ リファレンス」を参照してください。

  4. 次のノードを <UserJourneyBehaviors> 要素の子として追加します。 必ず、{Your Application Insights Key} の部分を、前に記録した Application Insights のインストルメンテーション キーに置き換えます。

    <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="{Your Application Insights Key}" DeveloperMode="true" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
    
    • 処理パイプラインを通してテレメトリを迅速化するよう DeveloperMode="true" により Application Insights に指示されます。 開発には適していますが、大量のボリュームでは制限されます。 運用環境では、DeveloperModefalse に設定します。
    • ClientEnabled="true" を指定すると、ページ ビューとクライアント側エラーを追跡するための Application Insights クライアント側スクリプトが送信されます。 これは、Application Insights ポータルの browserTimings テーブルで確認できます。 ClientEnabled= "true" を設定することにより、Application Insights がページ スクリプトに追加され、ページの読み込みと AJAX 呼び出しのタイミング、ブラウザーの例外や AJAX エラーの数と詳細、ユーザー数とセッション数を取得できます。 このフィールドはオプションであり、既定では false に設定されます。
    • ServerEnabled="true" は、既存の UserJourneyRecorder JSON をカスタム イベントとして Application Insights に送信します。

    次に例を示します。

    <TrustFrameworkPolicy
      ...
      TenantId="fabrikamb2c.onmicrosoft.com"
      PolicyId="SignUpOrSignInWithAAD"
      DeploymentMode="Development"
      UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights"
    >
    ...
    <RelyingParty>
      <DefaultUserJourney ReferenceId="UserJourney ID from your extensions policy, or equivalent (for example: SignUpOrSigninWithAzureAD)" />
      <Endpoints>
         <!--points to refresh token journey when app makes refresh token request-->
         <Endpoint Id="Token" UserJourneyReferenceId="RedeemRefreshToken" />
      </Endpoints>
      <UserJourneyBehaviors>
        <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="{Your Application Insights Key}" DeveloperMode="true" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
      </UserJourneyBehaviors>
      ...
    </TrustFrameworkPolicy>
    
  5. ポリシーをアップロードします。

Application Insights でログを表示する

Application Insights で新しいログが確認できるようになるまで、少し時間がかかります (通常は 5 分以内)。

  1. Azure Portal で作成した Application Insights リソースを開きます。
  2. [概要] ページで [ログ] を選択します。
  3. Application Insights で新しいタブを開きます。

次に示すのは、ログを確認するために使用できるクエリの一覧です。

クエリ 説明
traces Azure AD B2C によって生成されたすべてのログを取得します。
traces | where timestamp > ago(1d) Azure AD B2C によって生成された直近 1 日分のすべてのログを取得します。
traces | where message contains "exception" | where timestamp > ago(2h) 過去 2 時間以内に発生したエラーありのすべてのログを取得します。
traces | where customDimensions.Tenant == "contoso.onmicrosoft.com" and customDimensions.UserJourney == "b2c_1a_signinandup" Azure AD B2C contoso.onmicrosoft.com テナントによって生成され、ユーザー体験が b2c_1a_signinandup であるすべてのログを取得します。
traces | where customDimensions.CorrelationId == "00000000-0000-0000-0000-000000000000" Azure AD B2C によって関連付け ID で生成されたすべてのログを取得します。 関連付け ID を自分の関連付け ID に置き換えます。

エントリは長い可能性があります。 詳細を確認する際は CSV にエクスポートしてください。

クエリの実行について詳しくは、「Azure Monitor のログ クエリの概要」をご覧ください。

VS Code 拡張機能でログを確認する

VS Code 用の Azure AD B2C 拡張機能をインストールすることをお勧めします。 Azure AD B2C 拡張機能を使用すると、ポリシー名、関連付け ID (Application Insights では関連付け ID の最初の桁が示されます)、ログのタイムスタンプによってログが整理されます。 この機能を使用すると、ローカル タイムスタンプに基づいて関連するログを検索し、Azure AD B2C によって実行されるユーザー体験を確認することができます。

Note

コミュニティは、Azure AD B2C ソリューションの実装と保守を支援する VS Code 拡張機能を開発しました。 Microsoft はこの拡張機能をサポートしておらず、厳密に現状のまま利用可能です。

Application Insights API アクセスの設定

Application Insights を設定し、カスタム ポリシーを構成したら、Application Insights API ID を取得して、 API キーを作成する必要があります。 API ID と API キーは両方とも、Application Insights イベント (テレメトリ) を読み取るために Azure AD B2C 拡張機能によって使用されます。 API キーは、パスワードと同じように管理する必要があります。 安全に保管してください。

注意

事前に作成した Application Insights インストルメンテーション キーは、Application Insights にテレメトリを送信するために Azure AD B2C によって使用されます。 インストルメンテーション キーは、VS Code 拡張機能ではなく、Azure AD B2C ポリシーでのみ使います。

Application Insights の ID とキーを取得するには、次の手順を実行します。

  1. Azure Portal で、アプリケーションの Application Insights リソースを開きます。

  2. [構成][API アクセス] の順に選択します。

  3. アプリケーション ID をコピーします。

  4. [API キーの作成] を選択します。

  5. [テレメトリを読み取る] チェック ボックスをオンにします。

  6. [API キーの作成] ブレードを閉じる前に キー をコピーし、セキュリティで保護された場所に保存します。 キーを紛失した場合は、別のものを作成する必要があります。

    Screenshot that demonstrates how to create API access key.

Azure AD B2C VS Code 拡張機能のセットアップ

Azure Application Insights API の ID とキーが作成されたため、ログを読み取るように VS Code 拡張機能を構成できます。 Azure AD B2C VS Code 拡張機能には、次の 2 つの設定のスコープがあります。

  • ユーザー グローバル設定 - 開いた VS Code の任意のインスタンスにグローバルに適用される設定。
  • ワークスペースの設定 - ワークスペース内に格納されている設定。ワークスペースが開かれている場合にのみ適用されます (VS Code を使用してフォルダーを開きます)。
  1. Azure AD B2C Trace エクスプローラーで、 [設定] アイコンをクリックします。

    Screenshot that demonstrates select the application insights settings.

  2. Azure Application Insights の IDキーを指定します。

  3. [保存]

設定を保存すると、Application Insights のログが [Azure AD B2C トレース (App Insights)] ウィンドウに表示されます。

Screenshot of Azure AD B2C extension for vscode, presenting the Azure Application insights trace.

運用環境で Application Insights を構成する

運用環境のパフォーマンスとユーザー エクスペリエンスを向上させるには、重要ではないメッセージを無視するようにポリシーを構成することが重要です。 運用環境では次の構成を使います。ログはアプリケーションの分析情報に送信されません。

  1. TrustFrameworkPolicyDeploymentMode 属性を Production に設定します。

    <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0"
    TenantId="yourtenant.onmicrosoft.com"
    PolicyId="B2C_1A_signup_signin"
    PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_signup_signin"
    DeploymentMode="Production"
    UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights">
    
  2. JourneyInsightsDeveloperModefalse に設定します。

    <UserJourneyBehaviors>
      <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="{Your Application Insights Key}" DeveloperMode="false" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
    </UserJourneyBehaviors>
    
  3. ポリシーをアップロードしてテストします。

次の手順