Доступ к журналам аудита Azure AD B2C

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

Замечание

Эта функция доступна в общедоступной предварительной версии.

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

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

Замечание

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

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

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

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

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

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

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

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

Панель сведений о действии содержит следующие важные сведения:

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

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

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

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

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

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

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

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

При выборе строки в списке отображаются подробности действия этого события.

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

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

Журналы аудита публикуются в той же системе, как и другие активности для Microsoft Entra ID, чтобы их можно было получить через 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": "aaaa0000-bb11-2222-33cc-444444dddddd",
    "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"
        }
    ]
}

Дальнейшие шаги

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