Загрузка аудитных логов в SIEM Splunk
Создайте трейл, который будет загружать аудитные логи уровня конфигурации ресурсов отдельного каталога в бакет Yandex Object Storage с включенным шифрованием. Затем настройте непрерывную доставку логов в SIEM Splunk.
Решение, которое описано в руководстве, работает по следующей схеме:
- Трейл загружает логи в бакет Object Storage.
- Бакет смонтирован как часть файловой системы
в промежуточной ВМ. - На промежуточной ВМ работает скрипт, который по расписанию забирает логи из бакета и отправляет их в Splunk.
Чтобы настроить доставку файлов аудитных логов из бакета в Splunk:
- Подготовьте облако к работе.
- Подготовьте окружение.
- Назначьте роли сервисному аккаунту.
- Создайте трейл.
- Подготовьте Splunk к импорту.
- Включите NAT в интернет для подсети с промежуточной ВМ.
- Создайте промежуточную ВМ.
- Визуализируйте данные в Splunk.
Часть шагов выполняется в Terraform.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Для успешного прохождения руководства у вас должен быть экземпляр Splunk, доступный для промежуточной ВМ по порту 8080
.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- использование виртуальных машин (см. тарифы Compute Cloud);
- плата за хранение данных в бакете (см. тарифы Object Storage);
- плата за операции с данными (см. тарифы Object Storage);
- плата за использование ключей KMS (см. тарифы Key Management Service).
Подготовьте окружение
Создайте новый бакет для загрузки в него аудитных логов
- В консоли управления
перейдите в каталог, в котором хотите создать бакет. - Выберите сервис Object Storage.
- Нажмите кнопку Создать бакет.
- На странице создания бакета:
-
Введите имя бакета в соответствии с правилами именования.
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
-
При необходимости ограничьте максимальный размер бакета.
Размер
0
означает отсутствие ограничений и аналогичен включенной опции Без ограничения. -
В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите
Ограниченный
. -
Выберите класс хранилища по умолчанию.
-
Нажмите кнопку Создать бакет для завершения операции.
-
Создайте ключ шифрования в сервисе Key Management Service
-
В консоли управления
перейдите в каталог с бакетом. -
Выберите сервис Key Management Service.
-
Нажмите кнопку Создать ключ и задайте атрибуты ключа:
- Имя и опциональное описание в свободной форме.
- Алгоритм шифрования, например AES-256.
- Период ротации (частота смены версии ключа по умолчанию).
- Нажмите кнопку Создать.
Вместе с ключом создается его первая версия: нажмите на ключ в списке, чтобы открыть страницу с его атрибутами.
Включите шифрование бакета
-
В консоли управления
перейдите в бакет, для которого хотите настроить шифрование. -
На панели слева выберите Безопасность.
-
Откройте вкладку Шифрование.
-
В поле Ключ KMS выберите ключ или создайте новый:
- Если в каталоге еще нет ключей, нажмите кнопку Создать ключ. Если ключи есть, но они вам не подходят, нажмите кнопку Создать новый.
- Введите имя ключа.
- Выберите алгоритм шифрования и период ротации.
- Нажмите Создать.
-
Нажмите кнопку Сохранить.
Создайте сервисный аккаунт
-
В консоли управления
перейдите в каталог, в котором вы хотите создать сервисный аккаунт. -
В списке сервисов выберите Identity and Access Management.
-
Нажмите кнопку Создать сервисный аккаунт.
-
Введите имя сервисного аккаунта. Требования к имени:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
Нажмите кнопку Создать.
Назначьте роли сервисному аккаунту
-
Назначьте роль audit-trails.viewer на каталог, с ресурсов которого будут собираться аудитные логи:
yc resource-manager folder add-access-binding \ --role audit-trails.viewer \ --id <идентификатор_каталога> \ --service-account-id <идентификатор_сервисного_аккаунта>
Где:
--role
— назначаемая роль.--id
— идентификатор каталога, с которого будут собираться аудитные логи.--service-account-id
— идентификатор сервисного аккаунта.
-
Назначьте роль storage.uploader на каталог, в котором будет находиться трейл:
yc resource-manager folder add-access-binding \ --role storage.uploader \ --id <идентификатор_каталога> \ --service-account-id <идентификатор_сервисного_аккаунта>
Где:
--role
— назначаемая роль.--id
— идентификатор каталога, в котором будет находиться трейл.--service-account-id
— идентификатор сервисного аккаунта.
-
Назначьте роль kms.keys.encrypterDecrypter на ключ шифрования:
yc kms symmetric-key add-access-binding \ --role kms.keys.encrypterDecrypter \ --id <идентификатор_KMS-ключа> \ --service-account-id <идентификатор_сервисного_аккаунта>
Где:
--role
— назначаемая роль.--id
— идентификатор KMS-ключа.--service-account-id
— идентификатор сервисного аккаунта.
Создайте трейл
Чтобы создать трейл, убедитесь, что у вас есть роли:
iam.serviceAccounts.user
на сервисный аккаунт;audit-trails.editor
на каталог, где будет находиться трейл;audit-trails.viewer
на каталог, с которого будут собираться аудитные логи;storage.viewer
на бакет или каталог.
-
В консоли управления
перейдите в каталог, в котором вы хотите создать трейл. -
Выберите сервис Audit Trails.
-
Нажмите кнопку Создать трейл и укажите:
- Имя — имя создаваемого трейла.
- Описание — описание трейла, необязательный параметр.
-
В блоке Назначение задайте параметры объекта назначения:
- Назначение —
Object Storage
. - Бакет — имя бакета, в который будут загружаться аудитные логи.
- Префикс объекта — необязательный параметр, участвует в полном имени файла аудитного лога.
Примечание
Используйте префикс, если вы храните аудитные логи и сторонние данные в одном и том же бакете. Не используйте одинаковый префикс для логов и других объектов в бакете, так как в этом случае логи и сторонние объекты могут перезаписать друг друга.
- Ключ шифрования — укажите ключ шифрования, которым зашифрован бакет.
- Назначение —
-
В блоке Сервисный аккаунт выберите сервисный аккаунт, от имени которого трейл будет загружать файлы аудитного лога в бакет.
-
В блоке Сбор событий c уровня конфигурации задайте параметры сбора аудитных логов уровня конфигурации:
- Сбор событий — выберите
Включено
. - Ресурс — выберите
Каталог
. - Каталог — не требует заполнения, содержит имя текущего каталога.
- Сбор событий — выберите
-
В блоке Сбор событий с уровня сервисов в поле Сбор событий выберите
Выключено
. -
Нажмите кнопку Создать.
Важно
Решение будет удалять логи из бакета после экспорта в Splunk. Если вам нужно хранить логи в бакете, создайте отдельные бакет и трейл.
Подготовьте Splunk к импорту
Включите HTTPEventCollector
и получите токен Event Collector
по инструкции
Настройте NAT-шлюз для подсети с промежуточной ВМ
- Создайте NAT-шлюз:
-
В консоли управления
перейдите в каталог с подсетью для промежуточной ВМ. -
В списке сервисов выберите Virtual Private Cloud.
-
На панели слева выберите Шлюзы.
-
Нажмите кнопку Создать.
-
Задайте имя шлюза. Требования к имени:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
По умолчанию выбран тип шлюза
NAT-шлюз
. -
Нажмите кнопку Сохранить.
-
- Создайте таблицу маршрутизации:
- На панели слева выберите
Таблицы маршрутизации. - Нажмите кнопку Создать, чтобы создать новую таблицу или выберите одну из существующих.
- Нажмите кнопку Добавить маршрут.
- В открывшемся окне в поле Next hop выберите
Шлюз
. - В поле Шлюз выберите созданный NAT-шлюз. Префикс назначения заполнится автоматически.
- Нажмите кнопку Добавить.
- Нажмите кнопку Сохранить.
- На панели слева выберите
- Привяжите таблицу маршрутизации к подсети, в которой будет развернута промежуточная ВМ, чтобы направить трафик из нее через NAT-шлюз:
- На панели слева выберите
Подсети. - В строке нужной подсети нажмите кнопку
. - В открывшемся меню выберите пункт Привязать таблицу маршрутизации.
- В открывшемся окне выберите созданную таблицу в списке.
- Нажмите кнопку Привязать.
- На панели слева выберите
Создайте ВМ для непрерывной доставки логов в Splunk
-
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Склонируйте репозиторий
из Yandex Cloud Security Solution Library :git clone https://github.com/yandex-cloud-examples/yc-export-auditlogs-to-splunk.git
-
Создайте подкаталог в каталоге
/yc-export-auditlogs-to-splunk/terraform/
и перейдите в него. -
Создайте конфигурационный файл с вызовом модуля
yc-splunk-trail
:module "yc-splunk-trail" { source = "../modules/yc-splunk-trail/" folder_id = <идентификатор_каталога> splunk_token = <токен_Event_Collector> splunk_server = <адрес_вашего_сервера_Splunk>:8088 bucket_name = <имя_бакета> bucket_folder = <имя_корневой_папки_в_бакете> sa_id = <идентификатор_сервисного_аккаунта> coi_subnet_id = <идентификатор_подсети> }
Где:
folder_id
— идентификатор каталога.splunk_token
— токен Event Collector, полученный в Splunk.splunk_server
— адрес вашего сервера Splunk в форматеhttps://<имя_или_адрес_хоста>
.bucket_name
— имя бакета.bucket_folder
— имя корневой папки в бакете.sa_id
— идентификатор сервисного аккаунта.coi_subnet_id
— идентификатор подсети с настроенным NAT-шлюзом.
-
Проверьте корректность конфигурационных файлов:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: в терминале введите
yes
и нажмите Enter.
-
Визуализируйте данные в Splunk
-
Перейдите в Splunk и выполните поиск событий, созданных сервисным аккаунтом:
index="main" authentication.subject_type="SERVICE_ACCOUNT" | stats count by event_type
-
Для визуализации результатов, перейдите на вкладку Visualization и выберите удобный формат (
LineChart
,PieChart
и т. д.):Пример визуализации данных:
Как удалить созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Чтобы удалить ресурсы, созданные с помощью Terraform:
-
Выполните команду:
terraform destroy
Важно
Terraform удалит все ресурсы, созданные в текущей конфигурации: сети, подсети, виртуальные машины и т. д.
После выполнения команды в терминал будет выведен список удаляемых ресурсов.
-
Для подтверждения удаления введите
yes
и нажмите Enter.
-