Загрузка аудитных логов в Managed Service for ClickHouse® и визуализация данных в DataLens
Загрузите аудитные логи уровня конфигурации (Control Plane) каталога в Yandex Managed Service for ClickHouse® и проанализируйте использование ресурсов в Yandex DataLens
- Подготовьте облако к работе.
- Подготовьте окружение.
- Создайте трейл.
- Создайте эндпоинт-источник для потока данных Yandex Data Streams.
- Создайте эндпоинт-приемник для БД ClickHouse®.
- Создайте трансфер.
- Визуализируйте данные в DataLens.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- Плата за использование потока данных (см. тарифы Data Streams).
- Плата за постоянно запущенный кластер Managed Service for ClickHouse® (см. тарифы Managed Service for ClickHouse®).
Подготовьте окружение
Создайте сервисный аккаунт и назначьте ему роли
- В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. - В верхней части экрана перейдите на вкладку Сервисные аккаунты.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
sa-trail-logs
. - Нажмите
Добавить роль и выберите ролиaudit-trails.viewer
иyds.editor
. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Создайте сервисный аккаунт с именем
sa-trail-logs
:yc iam service-account create --name sa-trail-logs
Результат:
id: aje6o61*****h6g9a33s folder_id: b1gvmob*****aplct532 created_at: "2022-07-25T18:01:25Z" name: sa-trail-logs
Подробнее о команде
yc iam service-account create
см. в справочнике CLI. -
Назначьте сервисному аккаунту роль
audit-trails.viewer
:yc resource-manager folder add-access-binding <имя_каталога> \ --role audit-trails.viewer \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Где:
--role
— назначаемая роль.--subject
— идентификатор сервисного аккаунтаsa-trail-logs
.
Подробнее о команде
yc resource-manager folder add-access-binding
см. в справочнике CLI. -
Назначьте сервисному аккаунту роль
yds.editor
:yc resource-manager folder add-access-binding <имя_каталога> \ --role yds.editor \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Где:
--role
— назначаемая роль.--subject
— идентификатор сервисного аккаунтаsa-trail-logs
.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры сервисного аккаунта:
resource "yandex_iam_service_account" "sa" { name = "sa-trail-logs" } resource "yandex_resourcemanager_folder_iam_member" "sa-role-audit-viewer" { folder_id = "<идентификатор_каталога>" role = "audit-trails.viewer" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" } resource "yandex_resourcemanager_folder_iam_member" "sa-role-yds-editor" { folder_id = "<идентификатор_каталога>" role = "yds.editor" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" }
Где:
role
— назначаемая роль.member
— идентификатор сервисного аккаунтаsa-trail-logs
.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
-
-
Создайте сервисный аккаунт с помощью метода create для ресурса ServiceAccount.
-
Узнайте идентификатор сервисного аккаунта:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> curl -H "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"
Результат:
{ "serviceAccounts": [ { "id": "aje6o61*****h6g9a33s", "folderId": "b1gvmob*****aplct532", "createdAt": "2022-07-25T18:01:25Z", "name": "sa-trail-logs" } ] }
-
Сформируйте тело запроса в файле
body.json
. В свойствеaction
укажитеADD
, а в свойствеsubject
— типserviceAccount
и идентификатор сервисного аккаунтаsa-trail-logs
:body.json:
{ "accessBindingDeltas": [ { "action": "ADD", "accessBinding": { "roleId": "audit-trails.viewer", "subject": { "id": "<идентификатор_сервисного_аккаунта>", "type": "serviceAccount" } } }, { "action": "ADD", "accessBinding": { "roleId": "yds.writer", "subject": { "id": "<идентификатор_сервисного_аккаунта>", "type": "serviceAccount" } } } ] }
Где:
roleId
— назначаемая роль.id
— идентификатор сервисного аккаунтаsa-trail-logs
.
-
Назначьте роли сервисному аккаунту:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${IAM_TOKEN}" \ -d '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Создайте кластер ClickHouse®
- На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберите пункт Кластер ClickHouse. - Укажите настройки кластера ClickHouse®:
- В блоке Базовые параметры укажите имя кластера
trail-logs
. - В блоке Ресурсы выберите тип виртуальной машины
burstable
и тип хостаb2.medium
. - В блоке Настройки СУБД укажите имя БД
trail_data
, имя пользователяuser
и пароль. Запомните имя БД. - В блоке Хосты нажмите значок
. Включите опцию Публичный доступ и нажмите кнопку Сохранить. - В блоке Сервисные настройки включите опции:
- Доступ из DataLens.
- Доступ из консоли управления.
- Доступ из Yandex Data Transfer.
- В блоке Базовые параметры укажите имя кластера
- После всех настроек нажмите кнопку Создать кластер.
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе Yandex Virtual Private Cloud.
-
Укажите параметры кластера в команде создания:
yc managed-clickhouse cluster create \ --name trail-logs \ --environment production \ --network-name <имя_сети> \ --host type=clickhouse,zone-id=<зона_доступности>,subnet-id=<идентификатор_подсети> \ --clickhouse-resource-preset b2.medium \ --clickhouse-disk-type network-hdd \ --clickhouse-disk-size 10 \ --user name=user,password=<пароль_пользователя> \ --database name=trail_data \ --datalens-access=true \ --datatransfer-access=true \ --websql-access=true
Подробнее о команде
yc managed-clickhouse cluster create
см. в справочнике CLI.
-
Добавьте в конфигурационный файл описание кластера и его хостов:
resource "yandex_mdb_clickhouse_cluster" "trail-logs" { name = "trail-logs" environment = "PRODUCTION" network_id = yandex_vpc_network.<имя_сети_в_Terraform>.id clickhouse { resources { resource_preset_id = "b2.medium" disk_type_id = "network-hdd" disk_size = 10 } } database { name = "trail_data" } user { name = "user" password = "<пароль>" permission { database_name = "trail_data" } } host { type = "CLICKHOUSE" zone = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<имя_подсети_в_Terraform>.id } access { data_lens = true data_transfer = true } }
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
-
Используйте метод REST API create.
Создайте поток данных
Поток данных будет использоваться для загрузки в него аудитных логов.
- На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберите пункт Data Streams. - В поле База данных нажмите Создать новую. Откроется страница создания новой БД Managed Service for YDB.
- Введите Имя БД:
stream-db
. - В поле Тип базы данных выберите
Serverless
. - Нажмите кнопку Создать базу данных.
- Вернитесь на страницу создания потока. Нажмите значок
и выберите из списка созданную БД. - Введите имя потока данных:
trail-logs-stream
. - Нажмите кнопку Создать.
Дождитесь запуска потока данных. Когда поток станет готов к использованию, его статус изменится с CREATING
на ACTIVE
.
Создайте трейл
Трейл будет загружать аудитные логи уровня конфигурации всех ресурсов вашего каталога в поток данных Data Streams.
- На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберите пункт Audit trail. - Введите имя создаваемого трейла:
folder-trail
. - В блоке Назначение задайте параметры объекта назначения:
- Назначение —
Data Streams
. - Поток данных — выберите поток данных
trail-logs-stream
.
- Назначение —
- В блоке Сервисный аккаунт выберите сервисный аккаунт
sa-trail-logs
. - В блоке Сбор событий c уровня конфигураций (Control plane) задайте параметры сбора аудитных логов уровня конфигурации:
- Сбор событий — выберите
Включено
. - Ресурс — выберите
Каталог
. - Каталог — не требует заполнения (содержит имя каталога, в котором будет находиться трейл).
- Сбор событий — выберите
- В блоке Сбор событий с уровня сервисов (Data plane) в поле Сбор событий выберите
Выключено
. - Нажмите кнопку Создать.
Создайте эндпоинт-источник для потока данных Data Streams
Для создания трансфера нужно указать эндпоинт-источник, ведущий на поток Data Streams.
- Перейдите на страницу каталога
и выберите сервис Data Transfer. - На панели слева выберите
Эндпоинты. - Нажмите кнопку Создать эндпоинт.
- В поле Направление выберите
Источник
. - Укажите имя эндпоинта:
source-logs-stream
. - В поле Тип базы данных выберите
Yandex Data Streams
. - Настройте параметры эндпоинта:
- База данных — выберите БД, зарегистрированную для потока
trail-logs-stream
. - Поток —
trail-logs-stream
. - Сервисный аккаунт —
sa-trail-logs
.
- База данных — выберите БД, зарегистрированную для потока
- Настройте правила конвертации:
-
Формат данных —
JSON
. -
Схема данных —
Список полей
.Укажите список полей как в таблице ниже:
Name Type Key Required Path event_id STRING - - event_id event_source STRING - - event_source event_type STRING - - event_type event_time DATETIME - - event_time authenticated ANY - - authentication.authenticated subject_type STRING - - authentication.subject_type subject_id STRING - - authentication.subject_id subject_name STRING - - authentication.subject_name authorized ANY - - authorization.authorized resource_metadata ANY - - resource_metadata remote_address STRING - - request_metadata.remote_address user_agent STRING - - request_metadata.user_agent request_id STRING - - request_metadata.request_id event_status STRING - - event_status details ANY - - details -
Включите опцию Добавить неразмеченные столбцы.
-
- Нажмите кнопку Создать.
Создайте эндпоинт-приемник для БД ClickHouse®
Для создания трансфера нужно указать эндпоинт-приемник с настройками БД ClickHouse®.
- Перейдите на страницу каталога
и выберите сервис Data Transfer. - На панели слева выберите
Эндпоинты. - Нажмите кнопку Создать эндпоинт.
- В поле Направление выберите
Приёмник
. - Укажите имя эндпоинта:
target-logs-ch
. - В поле Тип базы данных выберите
ClickHouse®
. - В блоке Параметры эндпоинта укажите:
- Тип подключения — Managed кластер. Выберите кластер
trail-logs
. - Пользователь —
user
. - Пароль — укажите пароль пользователя БД.
- База данных —
trail_data
- Тип подключения — Managed кластер. Выберите кластер
- Нажмите кнопку Создать.
Создайте трансфер
С помощью трансфера будет выполняться перенос данных между сервисом-источником (потоком данных) и сервисом-приемником (БД ClickHouse®).
- Перейдите на страницу каталога
и выберите сервис Data Transfer. - На панели слева выберите
Трансферы. - Нажмите кнопку Создать трансфер.
- Укажите имя трансфера:
logs-transfer
. - Выберите эндпоинт для источника:
source-logs-stream
. - Выберите эндпоинт для приемника:
target-logs-ch
. - Нажмите кнопку Создать.
- Нажмите значок
рядом с именем трансфера и выберите пункт Активировать. - Дождитесь, когда трансфер перейдет в статус
Реплицируется
.
Создайте трансфер с именем logs-transfer
:
yc datatransfer transfer create --name logs-transfer
--source-id <идентификатор_эндпоинта-источника>
--target-id <идентификатор_эндпоинта-приемника>
--type increment-only
Где:
--source-id
— идентификатор эндпоинта-источникаsource-logs-stream
.--target-id
— идентификатор эндпоинта-приемникаtarget-logs-ch
.
Подробнее о команде yc datatransfer transfer create
см. в справочнике CLI.
-
Добавьте в конфигурационный файл описание трансфера.
resource "yandex_datatransfer_transfer" "transfer" { folder_id = "<идентификатор_каталога>" name = "logs-transfer" source_id = "<идентификатор_эндпоинта-источника>" target_id = "<идентификатор_эндпоинта-приемника>" type = "INCREMENT_ONLY" }
Где:
source_id
— идентификатор эндпоинта-источникаsource-logs-stream
.target_id
— идентификатор эндпоинта-приемникаtarget-logs-ch
.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
-
После активации трансфера перейдите в Managed Service for ClickHouse® и убедитесь, что в БД trail_data
появилась таблица trail_logs_stream
с событиями Yandex Audit Trails.
Вы можете выполнять запросы к БД trail_data
для поиска интересных событий с точки зрения безопасности.
-
Найти, кто удалил каталог:
select * from trail_data.trail_logs_stream where event_type = 'yandex.cloud.audit.resourcemanager.DeleteFolder' and JSONExtractString(details, 'folder_name') = '<имя_каталога>'
-
Какие действия совершал конкретный пользователь за период времени (требуется указать Name ID пользователя и дату):
select * from trail_data.trail_logs_stream where subject_name = '<Name_ID_пользователя>' and event_time >= 2022-06-26
-
Срабатывание при создании ключей для сервисных аккаунтов:
select * from trail_data.trail_logs_stream where event_type = 'yandex.cloud.audit.iam.CreateAccessKey' or event_type = 'yandex.cloud.audit.iam.CreateKey' or event_type = 'yandex.cloud.audit.iam.CreateApiKey'
Все интересные события собраны в решении
Визуализируйте данные в DataLens
Чтобы построить визуализации, нужно подключиться к БД ClickHouse®, в которую были перенесены логи, и создать датасет на основе ее данных.
Создайте подключение
- Перейдите на главную страницу
сервиса DataLens. - В открывшемся окне нажмите кнопку Создать подключение.
- Выберите подключение ClickHouse®.
- Выберите тип подключения Выбрать в каталоге и заполните настройки подключения:
- В поле Кластер выберите
trail-logs
. - В поле Имя хоста выберите хост ClickHouse® из выпадающего списка.
- Введите имя пользователя БД и пароль.
- В поле Кластер выберите
- Нажмите Проверить подключение.
- После проверки подключения нажмите кнопку Создать подключение.
- Введите название подключения
trail-logs-con
и нажмите кнопку Создать. - После сохранения подключения в правом верхнем углу нажмите кнопку Создать датасет.
Создайте датасет
- Перетащите таблицу
trail_data.trail_logs_stream
из блока Таблицы в левой части экрана на рабочую область. - В правом верхнем углу нажмите кнопку Сохранить.
- Введите имя датасета
trail-logs-dataset
и нажмите Создать. - После сохранения датасета в правом верхнем углу нажмите Создать чарт.
Создайте линейчатую диаграмму
Чтобы показать количество событий для каждого источника, создайте чарт — линейчатую диаграмму:
- Выберите тип визуализации Линейчатая диаграмма.
- Перетащите поле
event_source
из раздела Измерения в секцию Y. - Перетащите поле
event_id
из раздела Измерения в секцию X. - Перетащите поле
event_source
из раздела Измерения в секцию Цвета. - В правом верхнем углу нажмите Сохранить.
- В открывшемся окне введите название чарта
Trail logs: events
и нажмите Сохранить.
Создайте круговую диаграмму
Чтобы показать соотношение количества событий по статусу, создайте чарт — круговую диаграмму:
- Скопируйте чарт, получившийся на предыдущем шаге:
- В правом верхнем углу нажмите значок галочки рядом с кнопкой Сохранить.
- Нажмите Сохранить как.
- В открывшемся окне введите название нового чарта
Trail logs: statuses
и нажмите кнопку Сохранить.
- Выберите тип визуализации Круговая диаграмма. Поля
event_source
иevent_id
автоматически попадут в секции Цвет и Показатели соответственно. - Удалите поле
event_source
из секции Цвет и перетащите туда полеevent_status
. - В правом верхнем углу нажмите Сохранить.
Создайте дашборд и добавьте на него чарты
Создайте дашборд, на котором будут размещены чарты:
- Перейдите на главную страницу
сервиса DataLens. - Нажмите кнопку Создать дашборд.
- Введите название дашборда
Trail logs dashboard
и нажмите кнопку Создать. - В правом верхнем углу нажмите кнопку Добавить и выберите Чарт.
- В поле Чарт нажмите Выбрать и выберите из списка чарт
Trail logs: events
. - Нажмите кнопку Добавить. Чарт появится на дашборде.
- Повторите предыдущие шаги для чарта
Trail logs: statuses
. - В правом верхнем углу нажмите кнопку Сохранить.
Пример дашборда:
Как удалить созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите кластер
trail-logs
. - Удалите поток данных
trail-logs-stream
. - Удалите эндпоинты источника и приемника.
- Удалите трансфер
logs-transfer
.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc