Version-2.1
- Changelog:
- Добавлены новые detection rules из Use cases и важные события безопасности в аудит логах"
- Docker images:
cr.yandex/sol/s3-elk-importer:2.1
cr.yandex/sol/elk-updater:1.0.4
Version-2.0
- Changelog:
- Добавлен фильтр по Folder name
- Docker images:
cr.yandex/sol/s3-elk-importer:1.0.6
- Описание решения
- Что делает решение
- Схема решения
- Security Content
- Лицензионные ограничения
- Процесс обновления контента
- Развертывание с помощью Terraform
- Развертывание решения для поставки логов k8s
- Рекомендации по настройке retention, rollover и snapshots:
Решение позволяет собирать, мониторить и анализировать аудит логи в Yandex.Cloud Managed Service for Elasticsearch (ELK) из следующих источников:
- Yandex Audit Trails
- Yandex Managed Service for Kubernetes: аудит логи, алерты falco и Policy Engine (OPA Gatekeeper) (описание настройки)
Решение является постоянно обновляемым и поддерживаемым Security-командой Yandex.Cloud.
Важно! По умолчанию данная конструкция предлагает удалять файлы после вычитывания из бакета, но вы можете одновременно хранить аудит логи Audit Trails в S3 на долгосрочной основе и отсылать в Elastic. Для этого необходимо создать два Audit Trails в разных S3 бакетах:
- Первый бакет будет использоваться только для хранения
- Второй бакет будет использоваться для интеграции с ArcSight
- ☑️ Разворачивает в инфраструктуре Yandex.Cloud кластер Managed ELK (через Terraform) (в default конфигурации см. п. Terraform)(рассчитать необходимую конфигурацию для вашей инфраструктуры необходимо совместно с Cloud Архитектором)
- ☑️ Разворачивает COI Instance с контейнером на базе образа s3-elk-importer (
cr.yandex/sol/s3-elk-importer:latest
) - ☑️ Загружает Security Content в ELK (Dashboards, Detection Rules (с alerts), etc.)
- ☑️ Обеспечивает непрерывную доставку json файлов с аудит логами из Yandex Object Storage в ELK
- ☑️ Создает индексы в двух репликах, настраивает базовую политику rollover (создания новых индексов каждые тридцать дней или по достижению 50ГБ), для дальнейшей настройки в части высокой доступности данных и для настройки снимков данных в S3 - см. рекомендации.
Схема решения для поставки логов k8s
Security Content — объекты ELK, которые автоматически загружаются решением. Весь контент разработан с учетом многолетнего опыта Security команды Yandex.Cloud и на основе опыта Клиентов облака.
Содержит следующий Security Content:
- Dashboard, на котором отражены все use cases и полезная статистика
- Набор Saved Queries для удобного поиска Security событий
- Набор Detection Rules (правила корреляции) на которые настроены оповещения (Клиенту самостоятельно необходимо указать назначение уведомлений)
- Все интересные поля событий преобразованы в формат Elastic Common Schema (ECS), полная табличка маппинга в файле Описание объектов
Подробное описание в файле ECS-mapping.docx
Рекомендуем подписаться на данный репозиторий для получения уведомлений об обновлениях.
Для того, чтобы использовать самую актуальную версию контента, необходимо
- Поддерживать в актуальной версии контейнер, выполняющий синхронизацию
- Поддерживать в актуальном состоянии Security контент, который импортируется в ElasticSearch
В части обновления контента, необходимо убедиться, что вы используете последнюю доступную версию образа:
cr.yandex/sol/s3-elk-importer:latest
Обновление контейнера можно выполнить следующим образом:
- Можно пересоздать развернутый COI Instance с контейнером через Terraform (удалить COI Instance, выполнить
terraform apply
) - Можно остановить и удалить сам контейнер (
audit-trail-worker-*
), удалить образs3-elk-importer
, перезапустить COI Instance — после запуска будет скачан новый образ и создан новый контейнер
Обновление Security контента в Kibana (dashboards, detection rules, searches) — можно выполнить через запуск контейнера elk-updater
:
docker run -it --rm -e ELASTIC_AUTH_USER='admin' -e ELASTIC_AUTH_PW='password' -e KIBANA_SERVER='https://xxx.rw.mdb.yandexcloud.net' --name elk-updater cr.yandex/sol/elk-updater:latest
- ✅ Object Storage Bucket для Audit Trails
- ✅ Включенный сервис Audit Trails в UI
- ✅ Сеть VPC
- ✅ Подсети в 3-х зонах доступности
- ✅ Наличие доступа в интернет с COI Instance для скачивания образа контейнера
- ✅ ServiceAccount с ролью storage.editor для действий в Object Storage
См. Пример конфигурации пререквизитов и вызова модулей в /example/main.tf
Решение состоит из 2-х модулей Terraform /terraform/modules/ :
- yc-managed-elk:
- создает cluster Yandex Managed Service for Elasticsearch
- с тремя нодами (по одной на каждую зону доступности)
- с лицензией Gold
- характеристики: s2-medium (8 vCPU, 32Gb Memory)
- HDD: 1TB
- назначает пароль на аккаунт admin в ELK
- yc-elastic-trail:
- создает static keys для sa (для работы с объектами JSON в бакете и шифрования/расшифрования секретов)
- создает ВМ COI со спецификацией Docker Container со скриптом
- создает ssh пару ключей и сохраняет приватную часть на диск, публичную в ВМ
- создает KMS ключ
- назначает права kms.keys.encrypterDecrypter на ключ для sa для шифрование секретов
- шифрует секреты и передает их в Docker Container
module "yc-managed-elk" {
source = "../modules/yc-managed-elk" # path to module yc-managed-elk
folder_id = var.folder_id
subnet_ids = yandex_vpc_subnet.elk-subnet[*].id # subnets в 3-х зонах доступности для развертывания ELK
network_id = yandex_vpc_network.vpc-elk.id # network id в которой будет развернут ELK
elk_edition = "gold"
elk_datanode_preset = "s2.medium"
elk_datanode_disk_size = 1000
elk_public_ip = false # true, если нужен публичный доступ к ElasticSearch
}
module "yc-elastic-trail" {
source = "../modules/yc-elastic-trail/" # path to module yc-elastic-trail
folder_id = var.folder_id
elk_credentials = module.yc-managed-elk.elk-pass
elk_address = module.yc-managed-elk.elk_fqdn
bucket_name = yandex_storage_bucket.trail-bucket.bucket
bucket_folder = "" # указать название префикса куда trails пишет логи в бакет, например "prefix-trails", если в корень то оставить по умолчанию пустым
sa_id = yandex_iam_service_account.sa-bucket-editor.id
coi_subnet_id = yandex_vpc_subnet.elk-subnet[0].id
}
output "elk-pass" {
value = module.yc-managed-elk.elk-pass
sensitive = true
} // Чтобы посмотреть пароль ELK: terraform output elk-pass
output "elk_fqdn" {
value = module.yc-managed-elk.elk_fqdn
} // Выводит адрес ELK на который можно обращаться, например через браузер
output "elk-user" {
value = "admin"
}