# Журнал аудита dbt

Платформа dbt | Enterprise, Enterprise+

Для просмотра действий, выполняемых пользователями в вашем аккаунте, dbt предоставляет журналы аудируемых пользовательских и системных событий в реальном времени. Журнал аудита пополняется по мере возникновения событий и содержит такие сведения, как кто выполнил действие, что это было за действие и когда оно было выполнено. Вы можете использовать эти сведения для устранения проблем с доступом, проведения аудита безопасности или анализа конкретных событий. Вы также можете [запрашивать и экспортировать события журнала аудита через API](#using-the-api).

Для доступа к журналу аудита необходимо иметь роль **Администратор аккаунта**, **Наблюдатель аккаунта** или **Администратор безопасности**, а сама функция доступна только на тарифных планах Enterprise.

Журнал аудита dbt хранит все события, произошедшие в вашем аккаунте, в реальном времени, включая:

* Для событий за последние 90 дней журнал аудита dbt предоставляет выбираемый диапазон дат со списком сработавших событий.
* Для событий старше 90 дней **Администраторы аккаунта**, **Наблюдатели аккаунта** и **Администраторы безопасности** могут [экспортировать все события](#exporting-logs) с помощью **Экспортировать все**.

Обратите внимание, что срок хранения событий в журнале аудита составляет не менее 12 месяцев.

## Доступ к журналу аудита

Чтобы открыть журнал аудита, нажмите на имя вашей учетной записи в левом меню и выберите **Account settings**. Затем нажмите **Audit log** в левой боковой панели.

## Понимание журнала аудита

На странице журнала аудита вы увидите список различных событий и связанных с ними данных. Для каждого из этих событий в dbt отображается следующая информация:

* **Название события**: Действие, которое было инициировано
* **Инициатор**: Пользователь, инициировавший это действие/событие
* **Метка времени**: Локальная метка времени возникновения события

### Детали события

Нажмите на карточку события, чтобы просмотреть сведения о действии, вызвавшем событие. В этом представлении содержатся важные сведения, в том числе о том, когда это произошло и какой тип события был инициирован. Например, если кто-то изменит настройки задания, вы можете использовать сведения о событии, чтобы узнать, какое задание было изменено (тип события: `job_definition.changed`), кем (пользователь, инициировавший событие: `actor`) и когда (время возникновения события: `created_at`). Типы событий и их описания приведены в разделе [События в журнале аудита](#audit-log-events).

Детали события включают ключевые параметры события:

| Название       | Описание                                                                                                                                                         |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| account\_id    | ID учетной записи, в которой произошло событие                                                                                                                   |
| actor          | Исполнитель события — пользователь или сервис                                                                                                                    |
| actor\_id      | Уникальный ID исполнителя                                                                                                                                        |
| actor\_ip      | IP-адрес исполнителя                                                                                                                                             |
| actor\_name    | Идентифицирующее имя исполнителя                                                                                                                                 |
| actor\_type    | Было ли действие выполнено пользователем или API-запросом                                                                                                        |
| created\_at    | Временная метка UTC, когда произошло событие                                                                                                                     |
| event\_type    | Уникальный ключ, идентифицирующий событие                                                                                                                        |
| event\_context | Значение этого ключа отличается для каждого события и соответствует event\_type. Эти данные содержат все детали об объекте (или объектах), которые были изменены |
| id             | Уникальный ID события                                                                                                                                            |
| service        | Сервис, который выполнил действие                                                                                                                                |
| source         | Источник события — UI dbt или API                                                                                                                                |

## События журнала аудита

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

### Аутентификация

| Название события           | Тип события              | Описание                                                                                                                |
| -------------------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| Токен доступа выдан        | access\_token.issued     | dbt выдал токен доступа после входа через OAuth (например, расширение VS Code или сервер Model Context Protocol (MCP)). |
| Auth Provider Changed      | auth\_provider.changed   | Изменены настройки провайдера аутентификации                                                                            |
| Credential Login Succeeded | login.password.succeeded | Пользователь успешно вошел с логином и паролем                                                                          |
| Токен обновления выдан     | refresh\_token.issued    | dbt выдал токен обновления после входа через OAuth (например, расширение VS Code или сервер MCP).                       |
| Ошибка входа через SSO     | login.sso.failed         | Пользователю не удалось войти через SSO                                                                                 |
| Успешный вход через SSO    | login.sso.succeeded      | Пользователь успешно вошел через SSO                                                                                    |

### Клиенты OAuth

Эти события охватывают жизненный цикл клиентов OAuth, зарегистрированных в разделе **Настройки аккаунта** → **Интеграции** → **Интеграции приложений** (см. [Подключение приложений с помощью OAuth](https://docs.getdbt.tech/docs/platform/manage-access/connect-apps-oauth.md)). Действия, которые пользователь выполняет через клиент, подключенный по OAuth (например, создание задания), регистрируются как соответствующее событие (например, `job_definition.added`), а пользователь указывается в качестве инициатора.

| Название события              | Тип события                           | Описание                                                                                                                                  |
| ----------------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Авторизация клиента одобрена  | oauth\_client.authorization\_approved | Пользователь одобрил запрос согласия OAuth для клиента.                                                                                   |
| Авторизация клиента отклонена | oauth\_client.authorization\_denied   | Пользователь отклонил запрос согласия OAuth для клиента.                                                                                  |
| Клиент авторизован            | oauth\_client.authorized              | Пользователь завершил процедуру предоставления согласия OAuth и разрешил клиенту доступ к dbt от своего имени.                            |
| Клиент зарегистрирован        | oauth\_client.registered              | Клиент OAuth был зарегистрирован вручную администратором или динамически через [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591). |
| Клиент удален                 | oauth\_client.removed                 | Клиент OAuth был удален из раздела **Настройки аккаунта** → **Интеграции** → **Интеграции приложений**.                                   |

### Среда

| Название события    | Тип события         | Описание                        |
| ------------------- | ------------------- | ------------------------------- |
| Environment Added   | environment.added   | Новое окружение успешно создано |
| Environment Changed | environment.changed | Изменены настройки окружения    |
| Environment Removed | environment.removed | Окружение успешно удалено       |

### Задания

| Название события | Тип события             | Описание                      |
| ---------------- | ----------------------- | ----------------------------- |
| Job Added        | job\_definition.added   | Новое задание успешно создано |
| Job Changed      | job\_definition.changed | Изменены настройки задания    |
| Job Removed      | job\_definition.removed | Определение задания удалено   |

### Сервисный токен

| Название события      | Тип события            | Описание                           |
| --------------------- | ---------------------- | ---------------------------------- |
| Service Token Created | service\_token.created | Новый Service Token успешно создан |
| Service Token Revoked | service\_token.revoked | Service Token был отозван          |

### Группа

| Название события | Тип события   | Описание                     |
| ---------------- | ------------- | ---------------------------- |
| Group Added      | group.added   | Новая группа успешно создана |
| Group Changed    | group.changed | Изменены настройки группы    |
| Group Removed    | group.removed | Группа успешно удалена       |

### Пользователь

| Название события                    | Тип события              | Описание                                                                                        |
| ----------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------------- |
| Invite Added                        | user.invite.added        | Приглашение пользователя добавлено и отправлено                                                 |
| Invite Redeemed                     | user.invite.redeemed     | Пользователь принял приглашение                                                                 |
| User Added to Account               | user.added               | Новый пользователь добавлен в учетную запись                                                    |
| User Added to Group                 | group.user.added         | Существующий пользователь добавлен в группу                                                     |
| User Removed from Account           | user.removed             | Пользователь удален из учетной записи                                                           |
| User Removed from Group             | group.user.removed       | Существующий пользователь удален из группы                                                      |
| User License Created                | user\_license.added      | Использована новая пользовательская лицензия                                                    |
| User License Removed                | user\_license.removed    | Пользовательская лицензия удалена из количества мест                                            |
| Verification Email Confirmed        | user.jit.email.confirmed | Пользователь подтвердил адрес электронной почты                                                 |
| Письмо для подтверждения отправлено | user.jit.email.sent      | Письмо для подтверждения адреса электронной почты отправлено пользователю, созданному через JIT |

### Проект

| Название события | Тип события     | Описание                   |
| ---------------- | --------------- | -------------------------- |
| Project Added    | project.added   | Добавлен новый проект      |
| Project Changed  | project.changed | Изменены настройки проекта |
| Project Removed  | project.removed | Проект удален              |

### Разрешения

| Название события        | Тип события        | Описание                           |
| ----------------------- | ------------------ | ---------------------------------- |
| User Permission Added   | permission.added   | Добавлены новые права пользователя |
| User Permission Removed | permission.removed | Права пользователя удалены         |

### Лицензия

| Название события        | Тип события          | Описание                                                |
| ----------------------- | -------------------- | ------------------------------------------------------- |
| License Mapping Added   | license\_map.added   | Добавлено новое сопоставление пользовательской лицензии |
| License Mapping Changed | license\_map.changed | Изменены настройки сопоставления лицензии               |
| License Mapping Removed | license\_map.removed | Сопоставление лицензии удалено                          |

### Подключение

| Название события   | Тип события        | Описание                                          |
| ------------------ | ------------------ | ------------------------------------------------- |
| Connection Added   | connection.added   | Добавлено новое подключение к хранилищу данных    |
| Connection Changed | connection.changed | Изменены настройки подключения к хранилищу данных |
| Connection Removed | connection.removed | Подключение к хранилищу данных удалено            |

### Репозиторий

| Название события   | Тип события        | Описание                       |
| ------------------ | ------------------ | ------------------------------ |
| Repository Added   | repository.added   | Добавлен новый репозиторий     |
| Repository Changed | repository.changed | Изменены настройки репозитория |
| Repository Removed | repository.removed | Репозиторий удален             |

### Учётные данные

| Название события                 | Тип события         | Описание                          |
| -------------------------------- | ------------------- | --------------------------------- |
| Credentials Added to Project     | credentials.added   | Учетные данные добавлены в проект |
| Credentials Changed in Project   | credentials.changed | Учетные данные изменены в проекте |
| Credentials Removed from Project | credentials.removed | Учетные данные удалены из проекта |

### Интеграция с Git

| Название события           | Тип события                 | Описание                           |
| -------------------------- | --------------------------- | ---------------------------------- |
| GitLab Application Changed | gitlab\_application.changed | Изменена конфигурация GitLab в dbt |

### Вебхуки

| Название события              | Тип события                   | Описание                                   |
| ----------------------------- | ----------------------------- | ------------------------------------------ |
| Webhook Subscriptions Added   | webhook\_subscription.added   | Новый webhook настроен в параметрах        |
| Webhook Subscriptions Changed | webhook\_subscription.changed | Изменена существующая конфигурация webhook |
| Webhook Subscriptions Removed | webhook\_subscription.removed | Существующий webhook удален                |

### Семантический слой

| Название события                        | Тип события                          | Описание                                                                            |
| --------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------- |
| Конфигурация Semantic Layer добавлена   | semantic\_layer\_config.added        | Конфигурация Semantic Layer добавлена                                               |
| Конфигурация Semantic Layer изменена    | semantic\_layer\_config.changed      | Конфигурация Semantic Layer (не связанная с учетными данными) изменена              |
| Конфигурация Semantic Layer удалена     | semantic\_layer\_config.removed      | Конфигурация Semantic Layer удалена                                                 |
| Учетные данные Semantic Layer добавлены | semantic\_layer\_credentials.added   | Учетные данные Semantic Layer добавлены                                             |
| Учетные данные Semantic Layer изменены  | semantic\_layer\_credentials.changed | Учетные данные Semantic Layer изменены. Не вызывает `semantic_layer_config.changed` |
| Учетные данные Semantic Layer удалены   | semantic\_layer\_credentials.removed | Учетные данные Semantic Layer удалены                                               |

### Расширенные атрибуты

| Название события           | Тип события                  | Описание                               |
| -------------------------- | ---------------------------- | -------------------------------------- |
| Extended Attribute Added   | extended\_attributes.added   | Расширенный атрибут добавлен в проект  |
| Extended Attribute Changed | extended\_attributes.changed | Расширенный атрибут изменен или удален |

### Персональный токен доступа на уровне аккаунта

| Название события                             | Тип события                  | Описание                                          |
| -------------------------------------------- | ---------------------------- | ------------------------------------------------- |
| Account Scoped Personal Access Token Created | account\_scoped\_pat.created | Создан PAT с областью действия на уровне аккаунта |
| Account Scoped Personal Access Token Deleted | account\_scoped\_pat.deleted | PAT с областью действия на уровне аккаунта удален |

### Ограничения по IP

| Название события             | Тип события                   | Описание                                      |
| ---------------------------- | ----------------------------- | --------------------------------------------- |
| IP Restrictions Toggled      | ip\_restrictions.toggled      | Функция IP-ограничений включена или отключена |
| IP Restrictions Rule Added   | ip\_restrictions.rule.added   | Создано правило IP-ограничений                |
| IP Restrictions Rule Changed | ip\_restrictions.rule.changed | Отредактировано правило IP-ограничений        |
| IP Restrictions Rule Removed | ip\_restrictions.rule.removed | Правило IP-ограничений удалено                |

### SCIM

| Название события        | Тип события                         | Описание                                   |
| ----------------------- | ----------------------------------- | ------------------------------------------ |
| User Creation           | v1.events.account.UserAdded         | Новый пользователь создан сервисом SCIM    |
| Обновление пользователя | v1.events.account.UserUpdated       | Запись пользователя обновлена службой SCIM |
| Удаление пользователя   | v1.events.account.UserRemoved       | Пользователь удален службой SCIM           |
| Group Creation          | v1.events.user\_group.Added         | Новая группа создана сервисом SCIM         |
| Group Update            | v1.events.user\_group\_user.Changed | Состав группы обновлен сервисом SCIM       |
| Group Removal           | v1.events.user\_group.Removed       | Группа удалена сервисом SCIM               |

## Поиск в журнале аудита

Вы можете искать в журнале аудита конкретное событие или инициатора, при этом поиск ограничен событиями и инициаторами, перечисленными в разделе [События в журнале аудита](#audit-log-events). Журнал аудита содержит историю событий за последние 90 дней. Вы можете найти инициатора или событие с помощью строки поиска, а затем сузить результаты, указав временной интервал.

[![Используйте строку поиска для поиска содержимого в журнале аудита](/img/docs/dbt-platform/dbt-platform-enterprise/audit-log-search.png?v=2 "Используйте строку поиска для поиска содержимого в журнале аудита")](#)Используйте строку поиска для поиска содержимого в журнале аудита

## Экспорт журналов

Вы можете использовать журнал аудита для экспорта всех исторических результатов аудита в целях безопасности, соответствия требованиям и анализа. События в журнале аудита хранятся не менее 12 месяцев.

* **Для событий за последние 90 дней:** dbt автоматически отобразит доступный для выбора диапазон дат за 90 дней. Выберите **Экспортировать выбранное**, чтобы скачать CSV-файл со всеми событиями, произошедшими в вашем аккаунте за последние 90 дней.

* **Для событий старше 90 дней:** Выберите **Экспортировать все**. **Администратор аккаунта**, **Наблюдатель аккаунта** или **Администратор безопасности** получит по электронной почте ссылку для скачивания CSV-файла со всеми событиями, произошедшими в вашем аккаунте.

[![Просмотр вариантов экспорта журнала аудита](/img/docs/dbt-platform/dbt-platform-enterprise/audit-log-section.png?v=2 "Просмотр вариантов экспорта журнала аудита")](#)Просмотр вариантов экспорта журнала аудита

## Использование API

Вы также можете запрашивать и экспортировать события журнала аудита с помощью [API администрирования v3](https://docs.getdbt.tech/dbt-cloud/api-v3). Используйте API, если вам нужно получать данные аудита для скрипта, задания по расписанию или инструментов мониторинга безопасности или агрегации журналов. К API применяются те же требования к доступу, которые указаны в начале этой страницы. Типовые подходы к автоматизации описаны в разделе [Типовые сценарии автоматизации](#common-automation-patterns).

| Если вы хотите…                                | См. раздел                        |
| ---------------------------------------------- | --------------------------------- |
| Получать недавние события для скрипта или SIEM | [Запрос событий](#query-events)   |
| Экспортировать диапазон дат в CSV              | [Скачивание CSV](#download-a-csv) |
| Экспортировать всю историю                     | [Массовый экспорт](#bulk-export)  |

Для аутентификации используйте [сервисный токен](https://docs.getdbt.tech/docs/dbt-apis/service-tokens.md) или [персональный токен доступа](https://docs.getdbt.tech/docs/dbt-apis/user-tokens.md), передаваемый как `Authorization: Bearer YOUR_TOKEN` или `Token YOUR_TOKEN`.

Для массового экспорта требуется [персональный токен доступа](https://docs.getdbt.tech/docs/dbt-apis/user-tokens.md), поскольку сервисные токены на этом этапе не поддерживаются.

Если параметры дат не указаны, запросы на получение списка и скачивание CSV по умолчанию охватывают последние 90 дней.

В следующих примерах замените `YOUR_ACCESS_URL` на ваш URL доступа к dbt, `ACCOUNT_ID` на идентификатор вашего аккаунта, а `YOUR_TOKEN` на ваш токен. Идентификатор аккаунта можно найти в разделе **Настройки аккаунта**, а дополнительную информацию — в разделе [Поиск идентификаторов пользователя и аккаунта](https://docs.getdbt.tech/faqs/Accounts/find-user-id.md).

### Запрос событий

Чтобы получить события журнала аудита в формате JSON, отправьте запрос `GET` на `/api/v3/accounts/ACCOUNT_ID/audit-logs/`:

```shell
curl --request GET \
  --url 'https://YOUR_ACCESS_URL/api/v3/accounts/ACCOUNT_ID/audit-logs/?logged_at_start=2024-01-01&logged_at_end=2024-01-31&limit=10&offset=0' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_TOKEN'
```

Ответ содержит массив событий `data` с такими сведениями, как `event_type`, `event_label`, `actor`, `created_at` и `event_context`. Используйте `logged_at_start` и `logged_at_end` для фильтрации по диапазону дат, а `limit` и `offset` для постраничного просмотра результатов. Дополнительные параметры приведены в разделе [Список недавних событий журнала аудита](https://docs.getdbt.tech/dbt-cloud/api-v3#/operations/List%20Recent%20Audit%20Log%20Events) справочника API.

### Скачивание CSV

Чтобы скачать события журнала аудита в виде CSV-файла, отправьте запрос `GET` на `/api/v3/accounts/ACCOUNT_ID/audit-logs/download/`. Это эквивалент действия **Экспортировать выбранное** в пользовательском интерфейсе через API:

```shell
curl --request GET \
  --url 'https://YOUR_ACCESS_URL/api/v3/accounts/ACCOUNT_ID/audit-logs/download/?logged_at_start=2024-01-01&logged_at_end=2024-01-31' \
  --header 'Authorization: Bearer YOUR_TOKEN' \
  --output audit-log.csv
```

Вы можете использовать те же параметры запроса `logged_at_start` и `logged_at_end`, что и для конечной точки получения списка.

### Массовый экспорт

Чтобы экспортировать всю историю журнала аудита через API, используйте ту же последовательность действий, что и для **Экспортировать все** в пользовательском интерфейсе:

1. Отправьте запрос на экспорт методом `POST` на `/api/v3/accounts/ACCOUNT_ID/audit-logs/export/`. В ответе возвращается `job_id` в объекте `data` (`data.job_id`). На этом этапе используйте [персональный токен доступа](https://docs.getdbt.tech/docs/dbt-apis/user-tokens.md).

```shell
curl --request POST \
  --url 'https://YOUR_ACCESS_URL/api/v3/accounts/ACCOUNT_ID/audit-logs/export/' \
  --header 'Authorization: Bearer YOUR_TOKEN'
```

2. Проверьте статус экспорта с помощью `GET` на `/api/v3/accounts/ACCOUNT_ID/audit-logs/export/`. Повторяйте этот запрос, пока значение `is_running` в объекте `data` не станет `false`.

```shell
curl --request GET \
  --url 'https://YOUR_ACCESS_URL/api/v3/accounts/ACCOUNT_ID/audit-logs/export/' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_TOKEN'
```

3. Получите URL для скачивания с помощью `GET` на `/api/v3/accounts/ACCOUNT_ID/audit-logs/export/JOB_ID/download/`. Ответ содержит `download_url` в объекте `data` (`data.download_url`). Используйте `job_id` из шага 1 в качестве `JOB_ID` в URL.

```shell
curl --request GET \
  --url 'https://YOUR_ACCESS_URL/api/v3/accounts/ACCOUNT_ID/audit-logs/export/JOB_ID/download/' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_TOKEN'
```

4. Скачайте CSV-файл по адресу `download_url`, полученному на шаге 3 (`data.download_url`):

```shell
curl --request GET \
  --url 'DOWNLOAD_URL' \
  --output audit-log-full.csv
```

### Типовые сценарии автоматизации

Команды часто автоматизируют доступ к журналу аудита несколькими способами:

* **Получение новых событий по расписанию:** Вызывайте конечную точку получения списка по расписанию с параметрами `logged_at_start` и `logged_at_end`, чтобы получать новые события с момента последнего запуска, а затем загружайте JSON в инструменты мониторинга безопасности или агрегации журналов.
* **Периодический экспорт CSV:** Используйте конечную точку скачивания для экспорта диапазона дат в CSV для архивирования в целях соблюдения нормативных требований или анализа.
* **Экспорт всей истории:** Используйте процедуру массового экспорта, когда требуется программно получить всю историю журнала аудита, аналогично действию **Экспортировать все** в пользовательском интерфейсе.

Подробные сведения о конечных точках приведены в [справочнике API администрирования v3](https://docs.getdbt.tech/dbt-cloud/api-v3#/operations/List%20Recent%20Audit%20Log%20Events).
