Обращение к журналам аудита Azure AD B2C

Azure Active Directory B2C (Azure AD B2C) создает журналы аудита, содержащие сведения о действиях для ресурсов B2C, выданных токенах и доступе с правами администратора. Эта статья содержит краткий обзор данных, предоставляемых через журналы аудита, и инструкции о том, как получить доступ к этим данным для клиента Azure AD B2C.

События в журналах аудита хранятся всего семь дней. Если требуется более длительный срок хранения, спланируйте скачивание и хранение журналов с помощью одного из описанных ниже методов.

Примечание

Входы пользователей для отдельных Azure AD приложений B2C не отображаются в разделе Пользователи страниц идентификатора Microsoft Entra или Azure AD B2C в портал Azure. События входа там отражают действия пользователей, но их нельзя связать с конкретным приложением B2C, в которое пользователь вошел. Для этого необходимо использовать журналы аудита, как описано далее в этой статье.

Общие сведения о действиях, доступных в категории B2C для журналов аудита

Категория B2C в журналах аудита содержит следующие типы действий:

тип действия; Описание
Авторизация Действия, касающиеся авторизации пользователя для доступа к ресурсам B2C (например, доступ администратора к списку политик B2C).
Каталог Действия, связанные с атрибутами каталога, полученными при входе администратора через портал Azure.
Приложение Операции создания, чтения, обновления и удаления (CRUD) для приложений B2C.
Ключ Операции CRUD для ключей, которые хранятся в контейнере ключей B2C.
Ресурс Операции CRUD для ресурсов B2C (например, политик и поставщиков удостоверений).
Аутентификация Проверка учетных данных пользователя и выдача токенов.

Сведения о действиях CRUD для объектов пользователя см. в категории основного каталога.

Пример действия

На этом изображении с портала Azure показаны данные, регистрируемые при входе пользователя с помощью внешнего поставщика удостоверений (в данном случае — Facebook):

Пример страницы сведений об активности в журнале аудита на портале Azure

Панель сведений об активности содержит указанные ниже важные данные.

Section Поле Описание
Действие Имя Какое действие выполнялось. Например, выдача приложению маркера id_token, что фактически завершает вход пользователя.
"Кем инициировано (субъект)". ObjectId Идентификатор объекта приложения B2C, в которое входит пользователь. Этот идентификатор не отображается на портале Azure, но доступен через API Microsoft Graph.
"Кем инициировано (субъект)". Имя субъекта-службы Идентификатор приложения B2C, в которое входит пользователь.
"Целевые объекты"; ObjectId Идентификатор объекта пользователя, который выполняет вход.
Дополнительные сведения TenantId Идентификатор клиента Azure AD B2C.
Дополнительные сведения PolicyId Идентификатор политики потока пользователя (политики), используемого для входа.
Дополнительные сведения ApplicationId Идентификатор приложения B2C, в которое входит пользователь.

Просмотр журналов аудита на портале Azure

Портал Azure позволяет получить доступ к событиям журнала аудита в клиенте Azure AD B2C.

  1. Войдите на портал Azure.
  2. Перейдите в каталог клиента Azure AD B2C, а затем выберите Azure AD B2C.
  3. В разделе Действия в меню слева выберите Журналы аудита.

Отобразится список событий действий, зарегистрированных за последние семь дней.

Пример фильтра с двумя событиями действий на портале Azure

Доступно несколько вариантов фильтрации, в том числе перечисленные ниже.

  • Тип ресурса действия: фильтрация по типам действий, отображаемым в таблице в разделе Обзор доступных действий.
  • Дата: фильтрация отображаемых действий по диапазону дат.

Если выбрать в списке определенную строку, отобразятся подробные сведения о действии для данного события.

Чтобы скачать список событий действий в виде файла с разделителями-запятыми (CSV), выберите Скачать.

Получение журналов аудита с помощью API отчетов Microsoft Entra

Журналы аудита публикуются в том же конвейере, что и другие действия для идентификатора Microsoft Entra, поэтому к них можно получить доступ через API отчетов Microsoft Entra. Дополнительные сведения см. в статье Начало работы с API отчетов Microsoft Entra.

Включение доступа к API отчетов

Чтобы разрешить доступ на основе скриптов или приложений к API отчетов Microsoft Entra, вам потребуется приложение, зарегистрированное в клиенте Azure AD B2C со следующими разрешениями API. Можно включить эти разрешения для существующей регистрации приложения в клиенте B2C или создать новую регистрацию специально для автоматизации обработки журналов аудита.

  • Microsoft Graph > Разрешения приложения > AuditLog > AuditLog.Read.All

Чтобы зарегистрировать приложение с необходимыми разрешениями, выполните действия, описанные в следующей статье:

Управление Azure AD B2C с помощью Microsoft Graph

В разделе со скриптом PowerShell далее в этой статье приведены примеры того, как после регистрации приложения с соответствующими разрешениями получить доступ к событиям действий с помощью скрипта.

Доступ к API

Чтобы скачать события журналов аудита Azure AD B2C через API, нужно отфильтровать журналы по категории B2C. Чтобы выполнить фильтрацию filter по категориям, используйте параметр строки запроса при вызове конечной точки API отчетов Microsoft Entra.

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

Сценарий PowerShell

В следующем скрипте PowerShell показан пример запроса к API отчетов Microsoft Entra. После запроса к API события из журнала выводятся в стандартный поток вывода, а затем выходные данные JSON записываются в файл.

Можно попробовать запустить этот скрипт с помощью Azure Cloud Shell. Обязательно добавьте в него свой идентификатор приложения, секрет клиента и имя клиента 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": "00000000-0000-0000-0000-000000000000",
    "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": "00000000-0000-0000-0000-000000000000",
            "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"
        }
    ]
}

Дальнейшие действия

Можно автоматизировать другие задачи администрирования, например организовать управление учетными записями пользователей Azure AD B2C с помощью Microsoft Graph.