次の方法で共有


Azure AD B2C 監査ログへのアクセス

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

この機能はパブリック プレビュー段階にあります。

Azure Active Directory B2C (Azure AD B2C) は、B2C リソース、発行されたトークン、および管理者のアクセス権に関するアクティビティ情報を含む監査ログを出力します。 この記事では、監査ログで使用できる情報の概要と、Azure AD B2C テナントのこのデータにアクセスする方法について説明します。

監査ログ イベントは 7 日間だけ保持されます。 より長いリテンション期間が必要な場合は、次に示すいずれかの方法を使用してログをダウンロードして保存することを計画します。

個々の Azure AD B2C アプリケーションのユーザー サインインは、Azure portal の Microsoft Entra ID ページまたは Azure AD B2C ページの [Users] セクションに表示されません。 サインイン イベントにはユーザー アクティビティが表示されますが、ユーザーがサインインした B2C アプリケーションに関連付けることはできません。 この記事で詳しく説明するように、その監査ログを使用する必要があります。

監査ログの B2C カテゴリで使用できるアクティビティの概要

監査ログの B2C カテゴリには、次の種類のアクティビティが含まれています。

アクティビティの種類 説明
認証 B2C リソースにアクセスするためのユーザーの承認に関するアクティビティ (たとえば、B2C ポリシーの一覧にアクセスする管理者)。
ディレクトリ 管理者が Azure portal を使用してサインインしたときに取得されるディレクトリ属性に関連するアクティビティ。
アプリケーション B2C アプリケーションの作成、読み取り、更新、および削除 (CRUD) 操作。
B2C キー コンテナーに格納されているキーに対する CRUD 操作。
リソース B2C リソースに対する CRUD 操作。 たとえば、ポリシーや ID プロバイダーなどです。
認証 ユーザー資格情報とトークン発行の検証。

ユーザー オブジェクト CRUD アクティビティについては、 コア ディレクトリ カテゴリを参照してください。

アクティビティの例

Azure portal の次の画像は、ユーザーが外部 ID プロバイダー (この場合は Facebook) でサインインしたときにキャプチャされたデータを示しています。

Azure portal の [監査ログ アクティビティの詳細] ページの例

アクティビティの詳細パネルには、次の関連情報が表示されます。

セクション フィールド 説明
活動 名前 どのアクティビティが行われたか。 たとえば、 アプリケーションにid_tokenを発行すると、実際のユーザー サインインが終了します。
開始者 (アクター) オブジェクト識別子 ユーザーがサインインしている B2C アプリケーションの オブジェクト ID 。 この識別子は Azure portal には表示されませんが、Microsoft Graph API を使用してアクセスできます。
開始者 (アクター) スペン ユーザーがサインインしている B2C アプリケーションのアプリケーション ID
ターゲット オブジェクト識別子 サインインしているユーザーの オブジェクト ID
追加の詳細 テナント識別子 Azure AD B2C テナントの テナントID
追加の詳細 ポリシー識別子 ユーザーのサインインに使用されているユーザー フロー (ポリシー) の ポリシー ID
追加の詳細 ApplicationId ユーザーがサインインしている B2C アプリケーションのアプリケーション ID

Azure portal で監査ログを表示する

Azure portal では、Azure AD B2C テナントの監査ログ イベントにアクセスできます。

  1. Azure portal にサインインします。
  2. Azure AD B2C テナントを含むディレクトリに切り替えて、 Azure AD B2C に移動します。
  3. 左側のメニューの [ アクティビティ ] で、[ 監査ログ] を選択します。

過去 7 日間にログに記録されたアクティビティ イベントの一覧が表示されます。

Azure portal で 2 つのアクティビティ イベントを含むフィルターの例

次のようなフィルター処理オプションを使用できます。

  • アクティビティ リソースの種類 - [ 使用可能なアクティビティの概要 ] セクションの表に示されているアクティビティの種類でフィルター処理します。
  • 日付 - 表示されるアクティビティの日付範囲をフィルター処理します。

一覧で行を選択すると、イベントのアクティビティの詳細が表示されます。

コンマ区切り値 (CSV) ファイル内のアクティビティ イベントの一覧をダウンロードするには、[ ダウンロード] を選択します。

Microsoft Entra レポート API を使用して監査ログを取得する

監査ログは、Microsoft Entra ID の他のアクティビティと同じパイプラインに発行されるため、 Microsoft Entra レポート API を介してアクセスできます。 詳細については、「 Microsoft Entra Reporting API の概要」を参照してください。

レポート API アクセスを有効にする

Microsoft Entra レポート API へのスクリプトベースまたはアプリケーション ベースのアクセスを許可するには、次の API アクセス許可を持つアプリケーションが Azure AD B2C テナントに登録されている必要があります。 B2C テナント内の既存のアプリケーション登録に対してこれらのアクセス許可を有効にするか、監査ログの自動化で特に使用する新しいアクセス許可を作成できます。

  • Microsoft Graph > アプリケーションのアクセス許可 > AuditLog > AuditLog.Read.All

次の記事の手順に従って、必要なアクセス許可でアプリケーションを登録します。

Microsoft Graph を使用して Azure AD B2C を管理する

適切なアクセス許可を持つアプリケーションを登録した後、スクリプトでアクティビティ イベントを取得する方法の例については、この記事の後半の「PowerShell スクリプト」セクションを参照してください。

API にアクセスする

API を使用して Azure AD B2C 監査ログ イベントをダウンロードするには、 B2C カテゴリのログをフィルター処理します。 カテゴリ別にフィルター処理するには、Microsoft Entra レポート API エンドポイントを呼び出すときに、 filter クエリ文字列パラメーターを使用します。

https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?$filter=loggedByService eq 'B2C' and activityDateTime gt 2019-09-10T02:28:17Z

PowerShell スクリプト

次の PowerShell スクリプトは、Microsoft Entra レポート API に対してクエリを実行する方法の例を示しています。 API に対してクエリを実行した後、ログに記録されたイベントを標準出力に出力し、JSON 出力をファイルに書き込みます。

このスクリプトは 、Azure Cloud Shell で試すことができます。 必ず、アプリケーション ID、クライアント シークレット、および Azure AD B2C テナントの名前で更新してください。

# This script requires an application registration that's granted Microsoft Graph API permission
# https://learn.microsoft.com/azure/active-directory-b2c/microsoft-graph-get-started

# Constants
$ClientID       = "your-client-application-id-here"       # Insert your application's client ID, a GUID
$ClientSecret   = "your-client-application-secret-here"   # Insert your application's client secret value
$tenantdomain   = "your-b2c-tenant.onmicrosoft.com"       # Insert your Azure AD B2C tenant domain name

$loginURL       = "https://login.microsoftonline.com"
$resource       = "https://graph.microsoft.com"           # Microsoft Graph API resource URI
$7daysago       = "{0:s}" -f (get-date).AddDays(-7) + "Z" # Use 'AddMinutes(-5)' to decrement minutes, for example
Write-Output "Searching for events starting $7daysago"

# Create HTTP header, get an OAuth2 access token based on client id, secret and tenant domain
$body       = @{grant_type="client_credentials";resource=$resource;client_id=$ClientID;client_secret=$ClientSecret}
$oauth      = Invoke-RestMethod -Method Post -Uri $loginURL/$tenantdomain/oauth2/token?api-version=1.0 -Body $body

# Parse audit report items, save output to file(s): auditX.json, where X = 0 through n for number of nextLink pages
if ($oauth.access_token -ne $null) {
    $i=0
    $headerParams = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"}
    $url = "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?`$filter=loggedByService eq 'B2C' and activityDateTime gt  " + $7daysago

    # loop through each query page (1 through n)
    Do {
        # display each event on the console window
        Write-Output "Fetching data using Uri: $url"
        $myReport = (Invoke-WebRequest -UseBasicParsing -Headers $headerParams -Uri $url)
        foreach ($event in ($myReport.Content | ConvertFrom-Json).value) {
            Write-Output ($event | ConvertTo-Json)
        }

        # save the query page to an output file
        Write-Output "Save the output to a file audit$i.json"
        $myReport.Content | Out-File -FilePath audit$i.json -Force
        $url = ($myReport.Content | ConvertFrom-Json).'@odata.nextLink'
        $i = $i+1
    } while($url -ne $null)
} else {
    Write-Host "ERROR: No Access Token"
}

この記事の前半で示したアクティビティ イベントの例の JSON 表現を次に示します。

{
    "id": "B2C_DQO3J_4984536",
    "category": "Authentication",
    "correlationId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
    "result": "success",
    "resultReason": "N/A",
    "activityDisplayName": "Issue an id_token to the application",
    "activityDateTime": "2019-09-14T18:13:17.0618117Z",
    "loggedByService": "B2C",
    "operationType": "",
    "initiatedBy": {
        "user": null,
        "app": {
            "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
            "displayName": null,
            "servicePrincipalId": null,
            "servicePrincipalName": "00000000-0000-0000-0000-000000000000"
        }
    },
    "targetResources": [
        {
            "id": "00000000-0000-0000-0000-000000000000",
            "displayName": null,
            "type": "User",
            "userPrincipalName": null,
            "groupType": null,
            "modifiedProperties": []
        }
    ],
    "additionalDetails": [
        {
            "key": "TenantId",
            "value": "test.onmicrosoft.com"
        },
        {
            "key": "PolicyId",
            "value": "B2C_1A_signup_signin"
        },
        {
            "key": "ApplicationId",
            "value": "00000000-0000-0000-0000-000000000000"
        },
        {
            "key": "Client",
            "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
        },
        {
            "key": "IdentityProviderName",
            "value": "facebook"
        },
        {
            "key": "IdentityProviderApplicationId",
            "value": "0000000000000000"
        },
        {
            "key": "ClientIpAddress",
            "value": "127.0.0.1"
        }
    ]
}

次のステップ

Microsoft Graph を使用して Azure AD B2C ユーザー アカウントを管理するなど、他の管理タスクを自動化できます。