Загрузка аудитных логов в SIEM KUMA с помощью Terraform
Чтобы настроить доставку файлов аудитных логов в KUMA
- Подготовьте облако к работе.
- Создайте инфраструктуру.
- Смонтируйте бакет на сервере.
- Настройте коллектор KUMA.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки создаваемой инфраструктуры Yandex Cloud входят:
- плата за хранение данных, операции с данными, а также исходящий трафик (см. тарифы Yandex Object Storage);
- плата за использование симметричного ключа шифрования и выполнение криптографических операций (см. тарифы Yandex Key Management Service);
- (опционально) плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- (опционально) плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Кроме этого, для прохождения руководства вы должны иметь лицензию
Создайте инфраструктуру
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Чтобы создайть инфраструктуру с помощью Terraform:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файл с описанием инфраструктуры:
Готовая конфигурацияВручную-
Склонируйте репозиторий с конфигурационными файлами:
git clone https://github.com/yandex-cloud-examples/yc-audit-trails-kuma-integration
-
Перейдите в директорию с репозиторием. В ней должны появиться файлы:
at-events-to-kuma.tf
— конфигурация создаваемой инфраструктуры.at-events-to-kuma.auto.tfvars
— пользовательские данные.
-
Создайте папку для файла с описанием инфраструктуры.
-
Создайте в папке конфигурационный файл
at-events-to-kuma.tf
:at-events-to-kuma.tf
# Настройка провайдера terraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } provider "yandex" { folder_id = var.folder_id } # Объявление переменных для пользовательских параметров variable "folder_id" { type = string } variable "vm_user" { type = string } variable "ssh_key_path" { type = string } variable "bucket_name" { type = string } variable "object_prefix" { type = string } # Добавление прочих переменных locals { sa_bucket_name = "kuma-bucket-sa" sa_trail_name = "kuma-trail-sa" sym_key_name = "kuma-key" trail_name = "kuma-trail" zone = "ru-central1-b" network_name = "kuma-network" subnet_name = "kuma-network-ru-central1-b" vm_name = "kuma-server" image_id = "fd8ulbhv5dpakf3io1mf" } # Создание сервисных аккаунтов resource "yandex_iam_service_account" "sa-bucket" { name = local.sa_bucket_name folder_id = "${var.folder_id}" } resource "yandex_iam_service_account" "sa-trail" { name = local.sa_trail_name folder_id = "${var.folder_id}" } # Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-bucket-static-key" { service_account_id = yandex_iam_service_account.sa-bucket.id } output "access_key" { value = yandex_iam_service_account_static_access_key.sa-bucket-static-key.access_key sensitive = true } output "secret_key" { value = yandex_iam_service_account_static_access_key.sa-bucket-static-key.secret_key sensitive = true } # Создание симметричного ключа шифрования resource "yandex_kms_symmetric_key" "sym_key" { name = local.sym_key_name default_algorithm = "AES_256" } # Назначение ролей сервисным аккаунтам resource "yandex_resourcemanager_folder_iam_member" "sa-bucket-storage-viewer" { folder_id = "${var.folder_id}" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa-bucket.id}" } resource "yandex_resourcemanager_folder_iam_member" "sa-trail-storage-uploader" { folder_id = "${var.folder_id}" role = "storage.uploader" member = "serviceAccount:${yandex_iam_service_account.sa-trail.id}" } resource "yandex_resourcemanager_folder_iam_member" "sa-trail-at-viewer" { folder_id = "${var.folder_id}" role = "audit-trails.admin" member = "serviceAccount:${yandex_iam_service_account.sa-trail.id}" } resource "yandex_kms_symmetric_key_iam_binding" "encrypter-decrypter" { symmetric_key_id = "${yandex_kms_symmetric_key.sym_key.id}" role = "kms.keys.encrypterDecrypter" members = [ "serviceAccount:${yandex_iam_service_account.sa-bucket.id}","serviceAccount:${yandex_iam_service_account.sa-trail.id}" ] } # Создание бакета resource "yandex_storage_bucket" "kuma-bucket" { folder_id = "${var.folder_id}" bucket = "${var.bucket_name}" default_storage_class = "standard" anonymous_access_flags { read = false list = false config_read = false } server_side_encryption_configuration { rule { apply_server_side_encryption_by_default { kms_master_key_id = "${yandex_kms_symmetric_key.sym_key.id}" sse_algorithm = "aws:kms" } } } } # Создание трейла resource "yandex_audit_trails_trail" "kuma-trail" { depends_on = [yandex_storage_bucket.kuma-bucket, yandex_resourcemanager_folder_iam_member.sa-trail-at-viewer, yandex_resourcemanager_folder_iam_member.sa-trail-storage-uploader] name = local.trail_name folder_id = "${var.folder_id}" service_account_id = "${yandex_iam_service_account.sa-trail.id}" storage_destination { bucket_name = "${var.bucket_name}" object_prefix = "${var.object_prefix}" } filtering_policy { management_events_filter { resource_scope { resource_id = "${var.folder_id}" resource_type = "resource-manager.folder" } } } } # Создание облачной сети и подсети resource "yandex_vpc_network" "kuma-network" { name = local.network_name } resource "yandex_vpc_subnet" "kuma-network-subnet-b" { name = local.subnet_name zone = local.zone v4_cidr_blocks = ["10.1.0.0/24"] network_id = yandex_vpc_network.kuma-network.id } # Создание ВМ resource "yandex_compute_disk" "boot-disk" { name = "bootvmdisk" type = "network-hdd" zone = local.zone size = "20" image_id = local.image_id } resource "yandex_compute_instance" "kuma-vm" { name = local.vm_name platform_id = "standard-v3" zone = local.zone resources { cores = 2 memory = 2 core_fraction = 20 } boot_disk { disk_id = yandex_compute_disk.boot-disk.id } network_interface { subnet_id = yandex_vpc_subnet.kuma-network-subnet-b.id nat = true } metadata = { user-data = "#cloud-config\nusers:\n - name: ${var.vm_user}\n groups: sudo\n shell: /bin/bash\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n ssh_authorized_keys:\n - ${file("${var.ssh_key_path}")}" } }
-
Создайте в папке файл с пользовательскими данными
at-events-to-kuma.auto.tfvars
:at-events-to-kuma.auto.tfvars
folder_id = "<идентификатор_каталога>" vm_user = "<имя_пользователя_ВМ>" ssh_key_path = "<путь_к_публичному_SSH-ключу>" bucket_name = "<имя_бакета>" object_prefix = "<префикс>"
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
- Сервисный аккаунт — yandex_iam_service_account
- Статический ключ доступа — yandex_iam_service_account_static_access_key
- Симметричный ключ шифрования — yandex_kms_symmetric_key
- Роль — yandex_resourcemanager_folder_iam_member
- Бакет — yandex_storage_bucket
- Трейл — yandex_audit_trails_trail
- Сеть — yandex_vpc_network
- Подсеть — yandex_vpc_subnet
- Диск — yandex_compute_disk
- Виртуальная машина — yandex_compute_instance
-
-
В файле
at-events-to-kuma.auto.tfvars
задайте пользовательские параметры:-
folder_id
— идентификатор каталога. -
vm_user
— имя пользователя, который будет создан на ВМ, напримерyc-user
.Внимание
Не используйте логин
root
или другие имена, зарезервированные операционной системой. Для выполнения операций, требующих прав суперпользователя, используйте командуsudo
. -
ssh_key_path
— путь к файлу с открытым SSH-ключом и его имя, например:~/.ssh/id_ed25519.pub
. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно. -
bucket_name
— имя бакета, в который будут загружаться аудитные логи. Напримерmy-audit-logs-for-kuma
.Примечание
Имя бакета должно быть уникальным для всего Object Storage. Нельзя создать два бакета с одинаковыми именами даже в разных каталогах разных облаков.
-
object_prefix
— префикс, который будет добавлен к именам объектов с аудитными логами в бакете. Например:/
. Префикс участвует в полном имени файла аудитного лога.
-
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
-
Получите идентификатор ключа и секретный ключ, которые понадобятся позднее при монтировании бакета на сервере:
terraform output access_key terraform output secret_key
Результат:
"YCAJE0tO1Q4zO7bW4********" "YCNpH34y9fzL6xEap3wkuxYfkc1PTNvr********"
После создания инфраструктуры cмонтируйте бакет на сервере и настройте коллектор KUMA.
Смонтируйте бакет на сервере
Это действие выполняется на сервере, на котором будет установлен коллектор KUMA. В качестве сервера вы можете использовать виртуальную машину в Compute Cloud или свое оборудование. В данном руководстве используется ВМ Compute Cloud, созданная ранее.
-
Подключитесь к серверу по SSH.
-
Создайте нового пользователя
kuma
:sudo useradd kuma
-
Создайте домашнюю директорию пользователя
kuma
:sudo mkdir /home/kuma
-
Создайте файл со статическим ключом доступа и выдайте пользователю
kuma
права на него:sudo bash -c 'echo <идентификатор_ключа_доступа>:<секретный_ключ_доступа> > /home/kuma/.passwd-s3fs' sudo chmod 600 /home/kuma/.passwd-s3fs sudo chown -R kuma:kuma /home/kuma
Где
<идентификатор_ключа_доступа>
и<секретный_ключ_доступа>
— сохраненные ранее значения статического ключа доступа сервисного аккаунтаkuma-bucket-sa
. -
Установите пакет s3fs
:sudo apt install s3fs
-
Создайте директорию, которая будет служить точкой монтирования для бакета, и выдайте пользователю
kuma
права на эту директорию:sudo mkdir /var/log/yandex-cloud/ sudo chown kuma:kuma /var/log/yandex-cloud/
-
Смонтируйте созданный ранее бакет, указав его имя:
sudo s3fs <имя_бакета> /var/log/yandex-cloud \ -o passwd_file=/home/kuma/.passwd-s3fs \ -o url=https://storage.yandexcloud.net \ -o use_path_request_style \ -o uid=$(id -u kuma) \ -o gid=$(id -g kuma)
Вы можете настроить автоматическое монтирование бакета при запуске операционной системы, для этого откройте файл
/etc/fstab
(командаsudo nano /etc/fstab
) и добавьте в него строку:s3fs#<имя_бакета> /var/log/yandex-cloud fuse _netdev,uid=<kuma_uid>,gid=<kuma_gid>,use_path_request_style,url=https://storage.yandexcloud.net,passwd_file=/home/kuma/.passwd-s3fs 0 0
Где:
-
<имя_бакета>
— имя созданного ранее бакета, например:my-audit-logs-for-kuma
. -
<kuma_uid>
— идентификатор пользователяkuma
в операционной системе ВМ. -
<kuma_gid>
— идентификатор группы пользователейkuma
в операционной системе ВМ.Чтобы узнать значения
<kuma_uid>
и<kuma_gid>
, в терминале выполните командуid kuma
.
-
-
Убедитесь, что бакет смонтирован:
sudo ls /var/log/yandex-cloud/
Если все настроено верно, команда вернет текущее содержимое бакета с аудитными событиями.
Настройка передачи событий Yandex Cloud завершена. События будут располагаться в следующих директориях в JSON
/var/log/yandex-cloud/{audit_trail_id}/{year}/{month}/{day}/*.json
Настройте коллектор KUMA
На этом шаге вам понадобятся файлы дистрибутива и лицензии, входящие в комплект поставки KUMA. Используйте их, чтобы установить и настроить коллектор в сетевой инфраструктуре KUMA. Подробнее см. в инструкции
После успешного завершения настройки аудитные события начнут поставляться в KUMA. Веб-интерфейс KUMA позволяет выполнять поиск связанных событий
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Откройте конфигурационный файл
at-events-to-kuma.tf
и удалите описание создаваемой инфраструктуры из файла. -
Удалите все объекты из созданного ранее бакета. Если этого не сделать, бакет и часть инфраструктуры не будут удалены, а команда
terraform apply
завершится ошибкой. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-