Создание трейла для загрузки аудитных логов
Вы можете создать трейл, который будет загружать аудитные логи уровня конфигурации и уровня сервисов в один из объектов назначения:
- бакет Yandex Object Storage;
- лог-группу Yandex Cloud Logging;
- поток данных Yandex Data Streams.
При создании трейла через CLI, Terraform или API в фильтрах событий уровня сервисов можно задать условия по значениям полей. Это позволяет уменьшить поток событий и объем хранимых логов.
Перед началом работы
Подготовьте объект назначения и сервисный аккаунт для трейла:
-
Создайте бакет с ограниченным доступом, в который будут загружаться аудитные логи.
-
(Опционально) Включите шифрование для бакета.
Убедитесь, что у аккаунта, от имени которого вы собираетесь создавать ключ шифрования для бакета, есть роль
kms.editorна каталог. -
Создайте сервисный аккаунт для трейла.
-
Назначьте роли сервисному аккаунту, чтобы трейл мог собирать и загружать логи:
-
kms.keys.encrypter на ключ шифрования для бакета.
Эта роль необходима, только если для бакета было включено шифрование.
-
audit-trails.viewer на один из ресурсов, который определяет нужную область сбора логов:
- Организация — чтобы собирать логи в выбранных облаках организации.
- Облако — чтобы собирать логи в выбранных каталогах облака.
- Каталог — чтобы собирать логи в этом каталоге.
Права доступа наследуются от родительского ресурса к дочерним. Например, если сервисному аккаунту назначить роль на облако, то трейл, использующий этот аккаунт, сможет собирать логи ресурсов во всех каталогах этого облака. Однако трейл не сможет собирать логи в других облаках, принадлежащих организации, — для этого потребуется назначить роль на организацию.
-
Убедитесь, что у аккаунта, от имени которого вы собираетесь создавать трейл, есть необходимые роли:
- audit-trails.editor на каталог, в котором будет находиться трейл.
- iam.serviceAccounts.user на сервисный аккаунт для трейла.
-
Создайте лог-группу, в которую будут загружаться аудитные логи.
-
Создайте сервисный аккаунт для трейла.
-
Назначьте роли сервисному аккаунту, чтобы трейл мог собирать и загружать логи:
-
audit-trails.viewer на один из ресурсов, который определяет нужную область сбора логов:
- Организация — чтобы собирать логи в выбранных облаках организации.
- Облако — чтобы собирать логи в выбранных каталогах облака.
- Каталог — чтобы собирать логи в этом каталоге.
Права доступа наследуются от родительского ресурса к дочерним. Например, если сервисному аккаунту назначить роль на облако, то трейл, использующий этот аккаунт, сможет собирать логи ресурсов во всех каталогах этого облака. Однако трейл не сможет собирать логи в других облаках, принадлежащих организации, — для этого потребуется назначить роль на организацию.
-
-
Убедитесь, что у аккаунта, от имени которого вы собираетесь создавать трейл, есть необходимые роли:
- audit-trails.editor на каталог, в котором будет находиться трейл.
- iam.serviceAccounts.user на сервисный аккаунт для трейла.
-
Создайте поток данных, в который будут загружаться аудитные логи.
Совет
Рекомендуем включить автопартиционирование на принимающем потоке данных.
Часть событий может потеряться при перегрузке отдельных сегментов или всего потока. Автопартиционирование автоматически добавляет сегменты и распределяет нагрузку, что помогает избежать потерь. Если автопартиционирование отключено, самостоятельно проверяйте и увеличивайте количество сегментов при необходимости.
-
Создайте сервисный аккаунт для трейла.
-
Назначьте роли сервисному аккаунту, чтобы трейл мог собирать и загружать логи:
-
audit-trails.viewer на один из ресурсов, который определяет нужную область сбора логов:
- Организация — чтобы собирать логи в выбранных облаках организации.
- Облако — чтобы собирать логи в выбранных каталогах облака.
- Каталог — чтобы собирать логи в этом каталоге.
Права доступа наследуются от родительского ресурса к дочерним. Например, если сервисному аккаунту назначить роль на облако, то трейл, использующий этот аккаунт, сможет собирать логи ресурсов во всех каталогах этого облака. Однако трейл не сможет собирать логи в других облаках, принадлежащих организации, — для этого потребуется назначить роль на организацию.
-
-
Убедитесь, что у аккаунта, от имени которого вы собираетесь создавать трейл, есть необходимые роли:
- audit-trails.editor на каталог, в котором будет находиться трейл.
- iam.serviceAccounts.user на сервисный аккаунт для трейла.
Создать трейл
-
В консоли управления
выберите каталог, в котором вы хотите разместить трейл. -
Перейдите
в сервис Audit Trails. -
Нажмите Создать трейл.
-
В блоке Назначение выберите один из объектов назначения и укажите его настройки:
-
Object Storage — загружать аудитные логи в бакет Object Storage. Рекомендуется для долгосрочного хранения данных. Задайте настройки хранения логов:
-
Бакет — бакет, который был создан ранее.
-
Префикс объекта — префикс, который будет присвоен объектам с аудитными логами в бакете. Необязательный параметр, участвует в полном имени файла аудитного лога.
Примечание
Используйте префикс, если вы храните аудитные логи и сторонние данные в одном и том же бакете. Не используйте одинаковый префикс для логов и других объектов в бакете, так как в этом случае логи и сторонние объекты могут перезаписать друг друга.
-
Ключ шифрования — ключ шифрования для бакета. Выбирать его необходимо, только если для бакета было включено шифрование.
-
-
Cloud Logging — лог-группа, которая была создана ранее. В нее будут загружаться аудитные логи. Рекомендуется для быстрого сбора и анализа логов.
-
Data Streams — поток данных, который был создан ранее. В этот поток будут загружаться аудитные логи. Рекомендуется для потоковой передачи логов в другие сервисы или системы.
-
-
В блоке Сбор логов с управляющего слоя:
-
Включите сбор логов.
-
Выберите ресурс:
Организация,ОблакоилиКаталог. -
В зависимости от выбранного ресурса выберите конкретные облака или каталоги, с которых будут собираться события:
-
Для области сбора
Организациявыберите из выпадающего списка Облако одно или несколько облаков, с которых будут собираться события.Оставьте значение по умолчанию (
Все), чтобы собирать события со всех облаков в организации. -
Для области сбора
Облаковыберите из выпадающего списка Каталог один или несколько каталогов, с которых будут собираться события.Оставьте значение по умолчанию (
Все), чтобы собирать события со всех каталогов в облаке.
-
-
-
В блоке Сбор логов со слоя данных:
Важно
В консоли управления сбор некоторых событий уровня сервисов включен по умолчанию. Их доставка оплачивается в соответствии с правилами тарификации. Если события уровня сервисов вам не нужны, отключите их сбор.
-
Включите сбор логов.
-
Выберите сервисы, для которых вы хотите собирать аудитные логи.
-
Для каждого сервиса настройте область сбора и фильтр событий:
-
Справа от названия сервиса нажмите
. -
Выберите ресурс:
Организация,ОблакоилиКаталог. -
В зависимости от выбранного ресурса выберите конкретные облака или каталоги, с которых будут собираться события:
-
Для области сбора
Организациявыберите из выпадающего списка Облако одно или несколько облаков, с которых будут собираться события.Оставьте значение по умолчанию (
Все), чтобы собирать события со всех облаков в организации. -
Для области сбора
Облаковыберите из выпадающего списка Каталог один или несколько каталогов, с которых будут собираться события.Оставьте значение по умолчанию (
Все), чтобы собирать события со всех каталогов в облаке.
-
-
Выберите фильтр событий:
Получать все— чтобы собирать все события сервиса.Выбранные— чтобы собирать только выбранные события. Затем выберите события.Исключить— чтобы собирать все события, кроме выбранных. Затем выберите события.
-
Чтобы ограничить сбор событий по значениям полей, задайте условия фильтрации через CLI, API или Terraform.
-
-
В блоке Сервисный аккаунт выберите созданный ранее сервисный аккаунт, от имени которого будет работать трейл.
-
В поле Имя укажите имя создаваемого трейла. Оно должно быть уникальным в рамках каталога.
-
(Опционально) Укажите описание трейла.
-
Нажмите Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Посмотрите описание команды CLI для создания трейла:
yc audit-trails trail create --help
Для сбора событий уровня сервисов используйте YAML-спецификацию. Если нужны только события уровня конфигурации, параметры можно передать непосредственно в команде.
В YAML-спецификации
-
Создайте YAML-файл с конфигурацией трейла. В шаблоне логи загружаются в бакет:
name: <имя_трейла> folder_id: <идентификатор_каталога> destination: object_storage: bucket_id: <имя_бакета> object_prefix: <префикс_для_объектов> service_account_id: <идентификатор_сервисного_аккаунта> filtering_policy: management_events_filter: resource_scopes: - id: <идентификатор_организации_облака_или_каталога> type: <тип> data_events_filters: - service: <имя_сервиса> resource_scopes: - id: <идентификатор_организации_облака_или_каталога> type: <тип> included_events: event_types: - <полное_имя_события>За основу также можно взять спецификацию существующего трейла.
Параметры конфигурации:
-
name— имя трейла. Оно должно быть уникальным в рамках каталога. -
folder_id— идентификатор каталога, в котором будет размещен трейл. -
destination— настройки объекта назначения для аудитных логов.Укажите только один объект назначения:
object_storage,cloud_loggingилиdata_stream.-
object_storage— загружать логи в бакет Yandex Object Storage:-
bucket_id— имя созданного ранее бакета.Чтобы посмотреть имена бакетов в каталоге по умолчанию, выполните команду:
yc storage bucket list -
object_prefix— префикс, который будет присвоен объектам с аудитными логами в бакете. Необязательный параметр, участвует в полном имени файла аудитного лога.Примечание
Используйте префикс, если вы храните аудитные логи и сторонние данные в одном и том же бакете. Не используйте одинаковый префикс для логов и других объектов в бакете, так как в этом случае логи и сторонние объекты могут перезаписать друг друга.
-
-
cloud_logging— загружать логи в лог-группу Yandex Cloud Logging.Замените блок
destinationв шаблоне:destination: cloud_logging: log_group_id: <идентификатор_лог_группы>В параметре
log_group_idукажите идентификатор созданной ранее лог-группы. Идентификатор можно запросить со списком лог-групп в каталоге. -
data_stream— загружать логи в поток данных Yandex Data Streams:Замените блок
destinationв шаблоне:destination: data_stream: stream_name: <имя_потока_данных> database_id: <идентификатор_базы_данных> codec: RAWstream_name— имя созданного ранее потока данных. Имя можно запросить со списком потоков данных в каталоге.database_id— идентификатор базы данных YDB, которая используется потоком данных Data Streams. Идентификатор можно запросить со списком баз данных YDB в каталоге.codec— метод сжатия событий при записи в поток данных Data Streams. Возможные значения:RAW(без сжатия, по умолчанию),GZIP,ZSTD. Включайте сжатие, если ожидается поток событий более 1 МБ/с.
-
-
service_account_id— идентификатор созданного ранее сервисного аккаунта.
-
filtering_policy— настройки политики фильтрации, которая определяет, какие события будут собираться и попадут в аудитные логи. Политика состоит из набора фильтров, которые относятся к разным уровням событий.Важно
Для политики обязательно должен быть настроен хотя бы один фильтр, иначе не получится создать трейл.
Доступные фильтры:
-
management_events_filter— фильтр событий уровня конфигурации.Укажите область сбора логов в параметре
resource_scopes:-
id— идентификатор организации, облака или каталога. -
type— тип области согласно указанному идентификатору:organization-manager.organization— организация;resource-manager.cloud— облако;resource-manager.folder— каталог.
Можно комбинировать в одном параметре
resource_scopesнесколько областей, которые принадлежат одной организации. Например, собирать логи из одного облака целиком, а из другого — только из определенных каталогов:resource_scopes: # Сбор логов из облака 1 целиком - id: <идентификатор_облака_1> type: resource-manager.cloud # Сбор логов из каталога 1 облака 2 - id: <идентификатор_каталога_1> type: resource-manager.folder # Сбор логов из каталога 2 облака 2 - id: <идентификатор_каталога_2> type: resource-manager.folderПрава сервисного аккаунта должны позволять сбор логов из указанных областей.
-
-
data_events_filters— фильтры событий уровня сервисов. Можно настроить несколько фильтров такого типа — по одному для каждого сервиса.Фильтр для одного сервиса имеет следующую структуру:
-
service— имя сервиса. Его можно получить в справочнике событий уровня сервисов. -
resource_scopes— места, откуда собирать события уровня сервисов. Этот параметр настраивается аналогично фильтру событий уровня конфигурации. -
*_events— полные имена событий для сбора или исключения:included_events.event_types— собирать только указанные события.excluded_events.event_types— собирать все события, кроме указанных.
Для исключения событий замените блок
included_eventsв шаблоне:excluded_events: event_types: - <полное_имя_события>Используйте полное имя из поля
event_typeаудитного лога. Например, событиюCreateIamTokenиз справочника соответствуетyandex.cloud.audit.iam.CreateIamToken.
Важно
Для фильтров по именам событий блоки
included_eventsиexcluded_eventsвзаимоисключающие. Если они не заполнены, записываются все события. В том же фильтре можно дополнительно задать условия по значениям полей. -
-
-
-
(Опционально) Дополните фильтр условиями по значениям полей для нужного сервиса. Для этого в элементе списка
filtering_policy.data_events_filtersзадайте правилаinclude_rules,exclude_rules. Примеры настройки фильтрации приведены в инструкции Создание трейла. -
Выполните команду:
yc audit-trails trail create --file <путь_к_файлу>
В параметрах команды
Чтобы собирать события уровня конфигурации из каталога и загружать их в бакет, выполните команду:
yc audit-trails trail create \
--name <имя_трейла> \
--service-account-id <идентификатор_сервисного_аккаунта> \
--destination-bucket <имя_бакета> \
--filter-all-folder-id <идентификатор_каталога>
Для другого объекта назначения замените --destination-bucket одним из вариантов:
-
Лог-группа:
--destination-log-group-id <идентификатор_лог_группы> -
Поток данных:
--destination-yds-stream <имя_потока_данных> \ --destination-yds-database-id <идентификатор_базы_данных>
Параметры команды:
--name— имя создаваемого трейла.
-
--description— описание трейла. Необязательный параметр. -
--labels— список меток. Необязательный параметр. Можно указать одну или несколько меток через запятую в формате<ключ1>=<значение1>,<ключ2>=<значение2>. -
--service-account-id— идентификатор сервисного аккаунта. -
--destination-bucket— имя бакета Yandex Object Storage, в который будут загружаться аудитные логи.С этим параметром нельзя использовать параметры
--destination-log-group-idи--destination-yds-stream. -
--destination-bucket-object-prefix— префикс, который будет присвоен объектам с аудитными логами в бакете. Необязательный параметр, участвует в полном имени файла аудитного лога.Примечание
Используйте префикс, если вы храните аудитные логи и сторонние данные в одном и том же бакете. Не используйте одинаковый префикс для логов и других объектов в бакете, так как в этом случае логи и сторонние объекты могут перезаписать друг друга.
-
--destination-log-group-id— идентификатор лог-группы Yandex Cloud Logging, в которую будут загружаться аудитные логи.С этим параметром нельзя использовать параметры
--destination-bucketи--destination-yds-stream. -
--destination-yds-stream— имя потока данных Yandex Data Streams, в который будут загружаться аудитные логи.С этим параметром нельзя использовать параметры
--destination-bucketи--destination-log-group-id. -
--destination-yds-database-id— идентификатор базы данных YDB, которая используется потоком данных Data Streams. -
--destination-yds-codec— метод сжатия событий при записи в поток данных Data Streams. Возможные значения:RAW(без сжатия, по умолчанию),GZIP,ZSTD. Включайте сжатие, если ожидается поток событий более 1 МБ/с. -
--filter-all-folder-id— идентификатор каталога, для всех ресурсов которого будут регистрироваться события уровня конфигурации. -
--filter-all-cloud-id— идентификатор облака, для всех ресурсов которого будут регистрироваться события уровня конфигурации. -
--filter-all-organisation-id— идентификатор организации, для всех ресурсов которой будут регистрироваться события уровня конфигурации. -
--filter-some-folder-ids— список идентификаторов каталогов, для всех ресурсов которых будут регистрироваться события уровня конфигурации в облаке, заданном в поле--filter-from-cloud-id.Параметр используется только в паре с параметром
--filter-from-cloud-id. -
--filter-from-cloud-id— идентификатор облака, в котором находятся каталоги, заданные в параметре--filter-some-folder-ids.Параметр используется только в паре с параметром
--filter-some-folder-ids. -
--filter-some-cloud-ids— список идентификаторов облаков, для всех ресурсов которых будут регистрироваться события уровня конфигурации в организации, заданной в поле--filter-from-organisation-id.Параметр используется только в паре с параметром
--filter-from-organisation-id. -
--filter-from-organisation-id— идентификатор организации, в которой находятся облака, заданные в параметре--filter-some-cloud-ids.Параметр используется только в паре с параметром
--filter-some-cloud-ids.
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
-
Опишите в конфигурационном файле параметры трейла. В шаблоне логи загружаются в бакет:
resource "yandex_audit_trails_trail" "basic_trail" { name = "<имя_трейла>" folder_id = "<идентификатор_каталога>" description = "<описание_трейла>" labels = { key = "value" } service_account_id = "<идентификатор_сервисного_аккаунта>" storage_destination { bucket_name = "<имя_бакета>" object_prefix = "<префикс>" } filtering_policy { management_events_filter { resource_scope { resource_id = "<идентификатор_организации_облака_или_каталога>" resource_type = "<тип>" } } data_events_filter { service = "<имя_сервиса>" included_events = ["<полное_имя_события>"] resource_scope { resource_id = "<идентификатор_организации_облака_или_каталога>" resource_type = "<тип>" } } } }Где:
-
name— имя создаваемого трейла. Требования к формату имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
folder_id— идентификатор каталога, в котором создается трейл. -
description— описание трейла. Необязательный параметр. -
labels— список меток в форматеключ=значение. Необязательный параметр. -
service_account_id— идентификатор сервисного аккаунта, от имени которого трейл собирает и загружает аудитные логи.В зависимости от области сбора аудитных логов сервисному аккаунту должна быть назначена роль
audit-trails.viewerна организацию, облако или каталог, в которых трейл будет собирать аудитные логи.
Укажите только один объект назначения:
storage_destination,logging_destinationилиdata_stream_destination.-
logging_destination— загружать логи в лог-группу Yandex Cloud Logging.Замените блок
storage_destinationв шаблоне:logging_destination { log_group_id = "<идентификатор_лог_группы>" }log_group_id— идентификатор лог-группы, в которую трейл будет сохранять аудитные логи.
-
storage_destination— загружать логи в бакет Yandex Object Storage:-
bucket_name— имя бакета, куда трейл будет сохранять аудитные логи. -
object_prefix— префикс, который будет присвоен объектам с аудитными логами в бакете. Необязательный параметр, участвует в полном имени файла аудитного лога.Примечание
Используйте префикс, если вы храните аудитные логи и сторонние данные в одном и том же бакете. Не используйте одинаковый префикс для логов и других объектов в бакете, так как в этом случае логи и сторонние объекты могут перезаписать друг друга.
-
-
data_stream_destination— загружать логи в поток данных Yandex Data Streams:Замените блок
storage_destinationв шаблоне:data_stream_destination { database_id = "<идентификатор_базы_данных>" stream_name = "<имя_потока_данных>" codec = "RAW" }stream_name— имя потока данных, в который трейл будет сохранять аудитные логи.database_id— идентификатор базы данных Yandex Managed Service for YDB, которая используется потоком данных Data Streams.codec— метод сжатия событий при записи в поток данных Data Streams. Возможные значения:RAW(без сжатия, по умолчанию),GZIP,ZSTD. Включайте сжатие, если ожидается поток событий более 1 МБ/с.
-
filtering_policy— настройки политики фильтрации, которая определяет, какие события будут собираться и попадут в аудитные логи. Политика состоит из набора фильтров, которые относятся к разным уровням событий. Содержит блокиmanagement_events_filterиdata_events_filter.-
management_events_filter— фильтр событий уровня конфигурации.-
resource_scope— область сбора логов. Можно указать несколько блоковresource_scopeдля областей, которые принадлежат одной организации. Например, собирать логи из одного облака целиком, а из другого — только из определенных каталогов. Права сервисного аккаунта должны позволять сбор логов из указанных областей.-
resource_id— идентификатор области сбора: организации, облака или каталога. -
resource_type— тип области согласно указанному идентификатору:organization-manager.organization— организация;resource-manager.cloud— облако;resource-manager.folder— каталог.
-
-
-
data_events_filter— фильтр событий уровня сервисов. Можно настроить несколько фильтров такого типа — по одному для каждого сервиса. Фильтр для одного сервиса имеет следующую структуру:-
service— имя сервиса, в котором трейл будет обрабатывать события. Его можно получить в справочнике событий уровня сервисов. -
resource_scope— места, откуда собирать события уровня сервисов. Этот блок настраивается аналогично фильтру событий уровня конфигурации. -
included_events— полные имена событий для сбора. Вместо него можно указатьexcluded_events— полные имена событий для исключения. Эти параметры взаимоисключающие. Если оба не заданы, отбор не ограничивается именами событий.Используйте полное имя из поля
event_typeаудитного лога. Например, событиюCreateIamTokenиз справочника соответствуетyandex.cloud.audit.iam.CreateIamToken. -
include_ruleиexclude_rule— необязательные правила с условиями по значениям полей. Действуют вместе с выбором событий по именам.
-
-
Подробнее о параметрах ресурса
yandex_audit_trails_trailв документации провайдера. -
-
(Опционально) Дополните фильтр условиями по значениям полей для нужного сервиса. Для этого в блоке
filtering_policy.data_events_filterзадайте правилаinclude_rule,exclude_rule. Используйте провайдер Yandex Cloud версии 0.225.0 или выше. Примеры настройки фильтрации приведены в инструкции Создание трейла. -
Создайте ресурсы:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
или с помощью команды CLI:yc audit-trails trail get <имя_трейла> -
-
Аутентифицируйтесь в API.
-
Подготовьте параметры трейла: каталог, объект назначения, сервисный аккаунт и политику фильтрации с нужными сервисами и областями сбора.
Чтобы взять за основу настройки существующего трейла, получите их методом REST API get или вызовом gRPC API TrailService/Get.
-
(Опционально) Дополните фильтр условиями по значениям полей для нужного сервиса. Для этого в запросе REST API в элементе списка
filteringPolicy.dataEventsFiltersзадайте правилаincludeRules,excludeRules. В gRPC API используйтеfiltering_policy.data_events_filters,include_rulesиexclude_rules. Пример настройки фильтрации приведен в инструкции Создание трейла. -
Создайте трейл методом REST API create для ресурса Trail или вызовом gRPC API TrailService/Create.
Трейл создастся и начнет загружать аудитные логи в выбранный объект назначения.
При загрузке в Cloud Logging события в лог-группе могут дублироваться. Чтобы найти дубли, ориентируйтесь на уникальный идентификатор записи json_payload.event_id.
Примеры
Создание трейла с фильтрацией событий
В примере трейл sample-trail-all-planes создается в каталоге folder0*** и записывает логи в бакет sample-logs-bucket с помощью сервисного аккаунта service0***.
Фильтры определяют, какие события попадают в логи:
- События уровня конфигурации — из всех облаков организации
org1***. - События уровня сервисов:
- Managed Service for PostgreSQL — из облака
cloud1***и каталогаfolder1***: все события, кромеCreateDatabaseиUpdateDatabase. - Identity and Access Management — из каталога
folder2***: только событияCreateIamToken. Из них исключаются события, в которых одновременно тип учетных данных равенiam.session, а имя субъекта —user@example.com.
- Managed Service for PostgreSQL — из облака
-
Создайте YAML-файл
sample-trail-all-planes.yamlс конфигурацией трейла:name: sample-trail-all-planes folder_id: folder0*** destination: object_storage: bucket_id: sample-logs-bucket service_account_id: service0*** filtering_policy: management_events_filter: resource_scopes: - id: org1*** type: organization-manager.organization data_events_filters: - service: mdb.postgresql resource_scopes: - id: cloud1*** type: resource-manager.cloud - id: folder1*** type: resource-manager.folder excluded_events: event_types: - yandex.cloud.audit.mdb.postgresql.CreateDatabase - yandex.cloud.audit.mdb.postgresql.UpdateDatabase - service: iam resource_scopes: - id: folder2*** type: resource-manager.folder included_events: event_types: - yandex.cloud.audit.iam.CreateIamToken exclude_rules: - conditions: - field: $.details.credential.type operator: IN values: - iam.session - field: $.details.subject_name operator: IN values: - user@example.com -
Выполните команду:
yc audit-trails trail create --file sample-trail-all-planes.yaml
-
Опишите в конфигурационном файле Terraform параметры трейла:
resource "yandex_audit_trails_trail" "basic_trail" { name = "sample-trail-all-planes" folder_id = "folder0***" service_account_id = "service0***" storage_destination { bucket_name = "sample-logs-bucket" } filtering_policy { management_events_filter { resource_scope { resource_id = "org1***" resource_type = "organization-manager.organization" } } data_events_filter { service = "mdb.postgresql" excluded_events = [ "yandex.cloud.audit.mdb.postgresql.CreateDatabase", "yandex.cloud.audit.mdb.postgresql.UpdateDatabase", ] resource_scope { resource_id = "cloud1***" resource_type = "resource-manager.cloud" } resource_scope { resource_id = "folder1***" resource_type = "resource-manager.folder" } } data_events_filter { service = "iam" included_events = ["yandex.cloud.audit.iam.CreateIamToken"] resource_scope { resource_id = "folder2***" resource_type = "resource-manager.folder" } exclude_rule { condition { field = "$.details.credential.type" operator = "IN" values = ["iam.session"] } condition { field = "$.details.subject_name" operator = "IN" values = ["user@example.com"] } } } } } -
Примените конфигурацию:
terraform apply
Воспользуйтесь методом REST API create для ресурса Trail.
Чтобы воспользоваться примерами, установите cURL
Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.
-
Получите IAM-токен для аутентификации в API и запишите его в переменную окружения:
export IAM_TOKEN=<iam-токен> -
Подготовьте файл
body.jsonс телом запроса:{ "folderId": "folder0***", "name": "sample-trail-all-planes", "destination": { "objectStorage": { "bucketId": "sample-logs-bucket" } }, "serviceAccountId": "service0***", "filteringPolicy": { "managementEventsFilter": { "resourceScopes": [ { "id": "org1***", "type": "organization-manager.organization" } ] }, "dataEventsFilters": [ { "service": "mdb.postgresql", "resourceScopes": [ { "id": "cloud1***", "type": "resource-manager.cloud" }, { "id": "folder1***", "type": "resource-manager.folder" } ], "excludedEvents": { "eventTypes": [ "yandex.cloud.audit.mdb.postgresql.CreateDatabase", "yandex.cloud.audit.mdb.postgresql.UpdateDatabase" ] } }, { "service": "iam", "resourceScopes": [ { "id": "folder2***", "type": "resource-manager.folder" } ], "includedEvents": { "eventTypes": [ "yandex.cloud.audit.iam.CreateIamToken" ] }, "excludeRules": [ { "conditions": [ { "field": "$.details.credential.type", "operator": "IN", "values": ["iam.session"] }, { "field": "$.details.subject_name", "operator": "IN", "values": ["user@example.com"] } ] } ] } ] } } -
Выполните запрос:
curl \ --request POST \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "Content-Type: application/json" \ --data "@body.json" \ https://audittrails.api.cloud.yandex.net/audit-trails/v1/trails
Фильтрация по значениям полей
Примеры подходят для создания и изменения трейла. Добавьте фрагмент в фильтр нужного сервиса: в CLI — в элемент списка filtering_policy.data_events_filters, в Terraform — в блок filtering_policy.data_events_filter.
Исключение событий по типу учетных данных и пользователю
Фильтр для iam исключает события с типом учетных данных iam.session и именем субъекта user@example.com, например CreateIamToken.
exclude_rules:
- conditions:
- field: $.details.credential.type
operator: IN
values:
- iam.session
- field: $.details.subject_name
operator: IN
values:
- user@example.com
exclude_rule {
condition {
field = "$.details.credential.type"
operator = "IN"
values = ["iam.session"]
}
condition {
field = "$.details.subject_name"
operator = "IN"
values = ["user@example.com"]
}
}
Исключение событий по IP-адресу
Фильтр для mdb.mongodb исключает события GenericAuditEvent с адресом details.remote_address из подсети 192.0.2.0/24.
exclude_rules:
- conditions:
- field: $.event_type
operator: IN
values:
- yandex.cloud.audit.mdb.mongodb.GenericAuditEvent
- field: $.details.remote_address
operator: IP_IN
values:
- 192.0.2.0/24
exclude_rule {
condition {
field = "$.event_type"
operator = "IN"
values = ["yandex.cloud.audit.mdb.mongodb.GenericAuditEvent"]
}
condition {
field = "$.details.remote_address"
operator = "IP_IN"
values = ["192.0.2.0/24"]
}
}
Исключение сетевых событий по адресам источника и назначения
Фильтр для network исключает события ExternalFlow с адресами источника и назначения из подсети 198.51.100.0/24.
exclude_rules:
- conditions:
- field: $.event_type
operator: IN
values:
- yandex.cloud.audit.network.flowlogs.ExternalFlow
- field: $.details.dst_addr
operator: IP_IN
values:
- 198.51.100.0/24
- field: $.details.src_addr
operator: IP_IN
values:
- 198.51.100.0/24
exclude_rule {
condition {
field = "$.event_type"
operator = "IN"
values = ["yandex.cloud.audit.network.flowlogs.ExternalFlow"]
}
condition {
field = "$.details.dst_addr"
operator = "IP_IN"
values = ["198.51.100.0/24"]
}
condition {
field = "$.details.src_addr"
operator = "IP_IN"
values = ["198.51.100.0/24"]
}
}
Сбор событий чтения секретов Kubernetes
Фильтр для k8s оставляет только события ApiServerWatch, ApiServerGet и ApiServerList для ресурсов типа secrets.
include_rules:
- conditions:
- field: $.event_type
operator: IN
values:
- yandex.cloud.audit.k8s.apiserver.ApiServerWatch
- yandex.cloud.audit.k8s.apiserver.ApiServerGet
- yandex.cloud.audit.k8s.apiserver.ApiServerList
- field: $.details.native_api_server_event.objectRef.resource
operator: IN
values:
- secrets
include_rule {
condition {
field = "$.event_type"
operator = "IN"
values = [
"yandex.cloud.audit.k8s.apiserver.ApiServerWatch",
"yandex.cloud.audit.k8s.apiserver.ApiServerGet",
"yandex.cloud.audit.k8s.apiserver.ApiServerList",
]
}
condition {
field = "$.details.native_api_server_event.objectRef.resource"
operator = "IN"
values = ["secrets"]
}
}
Регистр ключа objectRef соответствует исходному событию Kubernetes.
Что дальше
- Узнайте о формате аудитных логов.
- Узнайте о порядке загрузки аудитных логов в SIEM.
- Узнайте о поиске событий в аудитных логах.