Wazuh GCP - мониторинг Google Cloud Platform
Wazuh обеспечивает мониторинг безопасности Google Cloud Platform через модуль gcp-pubsub, который получает события Cloud Audit Logs через подписки Google Cloud Pub/Sub. Модуль обрабатывает четыре типа журналов аудита: доступ к данным, привилегированные действия администраторов, системные события и DNS-запросы. Интеграция позволяет централизовать анализ облачных угроз GCP в платформе Wazuh.
Поддерживаемые источники данных
Cloud Audit Logs
Google Cloud Audit Logs фиксируют все действия в проектах GCP. Wazuh обрабатывает следующие типы журналов:
| Тип журнала | Описание | Примеры событий |
|---|---|---|
| Admin Activity | Привилегированные операции администраторов | Создание VM, изменение IAM-политик, настройка сети |
| Data Access | Доступ к данным пользователей | Чтение объектов Cloud Storage, запросы BigQuery |
| System Event | Системные события GCP | Автоматическое масштабирование, миграция VM |
| Policy Denied | Отклоненные запросы политиками | Нарушения организационных политик |
Pub/Sub
Google Cloud Pub/Sub - это управляемый сервис обмена сообщениями, который выступает транспортным механизмом между Cloud Audit Logs и модулем Wazuh. Pub/Sub обеспечивает надежную доставку событий с автоматической буферизацией.
Cloud Storage
Модуль также поддерживает мониторинг бакетов Cloud Storage для сбора журналов, экспортированных через Cloud Logging Sinks.
Настройка сервисного аккаунта
Для работы модуля необходимо создать сервисный аккаунт GCP с соответствующими ролями и сгенерировать JSON-ключ.
Создание сервисного аккаунта
- Перейдите в IAM & Admin - Service Accounts в Google Cloud Console
- Нажмите + CREATE SERVICE ACCOUNT
- Укажите имя (например,
wazuh-pubsub-reader) и описание - Назначьте роли:
| Роль | Назначение |
|---|---|
Pub/Sub Subscriber | Получение сообщений из подписки |
Pub/Sub Publisher | Публикация подтверждений обработки |
Storage Object User | Доступ к бакетам Cloud Storage (при необходимости) |
Генерация JSON-ключа
- Выберите созданный сервисный аккаунт
- Перейдите на вкладку Keys
- Нажмите ADD KEY - Create new key - JSON
- Сохраните скачанный файл
Размещение ключа на сервере Wazuh
sudo cp credentials.json /var/ossec/wodles/gcloud/gcp-credentials.json
sudo chown root:wazuh /var/ossec/wodles/gcloud/gcp-credentials.json
sudo chmod 640 /var/ossec/wodles/gcloud/gcp-credentials.jsonСтруктура JSON-ключа
{
"type": "service_account",
"project_id": "my-gcp-project",
"private_key_id": "key-id-example",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"client_email": "wazuh-pubsub-reader@my-gcp-project.iam.gserviceaccount.com",
"client_id": "123456789012345678901",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/wazuh-pubsub-reader%40my-gcp-project.iam.gserviceaccount.com"
}Настройка Pub/Sub
Создание топика
Создайте Pub/Sub-топик для получения событий Cloud Audit Logs:
gcloud pubsub topics create wazuh-audit-logs \
--project=my-gcp-projectСоздание подписки
Создайте подписку для топика:
gcloud pubsub subscriptions create wazuh-audit-subscription \
--topic=wazuh-audit-logs \
--ack-deadline=60 \
--message-retention-duration=7d \
--project=my-gcp-projectНастройка Cloud Logging Sink
Создайте sink для экспорта Cloud Audit Logs в Pub/Sub-топик:
gcloud logging sinks create wazuh-audit-sink \
pubsub.googleapis.com/projects/my-gcp-project/topics/wazuh-audit-logs \
--log-filter='logName:"cloudaudit.googleapis.com"' \
--project=my-gcp-projectПосле создания sink, предоставьте сервисному аккаунту sink права на публикацию в топике:
gcloud pubsub topics add-iam-policy-binding wazuh-audit-logs \
--member="serviceAccount:SINK_SERVICE_ACCOUNT" \
--role="roles/pubsub.publisher" \
--project=my-gcp-projectКонфигурация модуля gcp-pubsub
Модуль настраивается в ossec.conf на сервере Wazuh или агенте.
Базовая конфигурация
<wodle name="gcp-pubsub">
<enabled>yes</enabled>
<project_id>my-gcp-project</project_id>
<subscription_name>wazuh-audit-subscription</subscription_name>
<credentials_file>/var/ossec/wodles/gcloud/gcp-credentials.json</credentials_file>
<interval>1m</interval>
<max_messages>100</max_messages>
<pull_on_start>yes</pull_on_start>
</wodle>Конфигурация с фильтрацией
<wodle name="gcp-pubsub">
<enabled>yes</enabled>
<project_id>my-gcp-project</project_id>
<subscription_name>wazuh-audit-subscription</subscription_name>
<credentials_file>/var/ossec/wodles/gcloud/gcp-credentials.json</credentials_file>
<interval>5m</interval>
<max_messages>200</max_messages>
<pull_on_start>yes</pull_on_start>
<logging>info</logging>
</wodle>Мониторинг нескольких проектов
<wodle name="gcp-pubsub">
<enabled>yes</enabled>
<project_id>production-project</project_id>
<subscription_name>wazuh-prod-subscription</subscription_name>
<credentials_file>/var/ossec/wodles/gcloud/prod-credentials.json</credentials_file>
<interval>1m</interval>
<max_messages>100</max_messages>
<pull_on_start>yes</pull_on_start>
</wodle>
<wodle name="gcp-pubsub">
<enabled>yes</enabled>
<project_id>staging-project</project_id>
<subscription_name>wazuh-staging-subscription</subscription_name>
<credentials_file>/var/ossec/wodles/gcloud/staging-credentials.json</credentials_file>
<interval>5m</interval>
<max_messages>50</max_messages>
<pull_on_start>yes</pull_on_start>
</wodle>Параметры модуля
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
enabled | yes | Включение или отключение модуля |
project_id | - | Идентификатор проекта GCP |
subscription_name | - | Имя Pub/Sub-подписки |
credentials_file | - | Путь к JSON-файлу ключа сервисного аккаунта |
interval | 1m | Интервал опроса подписки (s/m/h/d) |
max_messages | 100 | Максимальное количество сообщений за один цикл |
pull_on_start | yes | Получить сообщения при старте модуля |
logging | info | Уровень журналирования (debug, info, warning, error) |
Примеры алертов
Изменение IAM-политики
{
"rule": {
"id": "65032",
"level": 7,
"description": "GCP: IAM policy modified"
},
"data": {
"gcp": {
"logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
"protoPayload": {
"methodName": "google.iam.admin.v1.SetIamPolicy",
"authenticationInfo": {
"principalEmail": "admin@company.com"
},
"resourceName": "projects/my-project",
"serviceName": "iam.googleapis.com"
}
}
}
}Изменение правил фаервола
{
"rule": {
"id": "65040",
"level": 8,
"description": "GCP: Firewall rule modified"
},
"data": {
"gcp": {
"protoPayload": {
"methodName": "v1.compute.firewalls.insert",
"authenticationInfo": {
"principalEmail": "devops@company.com"
},
"request": {
"name": "allow-all-ingress",
"direction": "INGRESS",
"allowed": [{"IPProtocol": "tcp", "ports": ["0-65535"]}],
"sourceRanges": ["0.0.0.0/0"]
}
}
}
}
}Доступ к Cloud Storage
{
"rule": {
"id": "65050",
"level": 5,
"description": "GCP: Cloud Storage object accessed"
},
"data": {
"gcp": {
"protoPayload": {
"methodName": "storage.objects.get",
"authenticationInfo": {
"principalEmail": "user@company.com"
},
"resourceName": "projects/_/buckets/sensitive-data/objects/credentials.csv",
"serviceName": "storage.googleapis.com"
}
}
}
}Сценарии использования
Обнаружение изменений IAM
- Добавление новых участников в проект с привилегированными ролями
- Создание сервисных аккаунтов с ролью Owner
- Изменение политик IAM на уровне организации
- Создание пользовательских ролей с избыточными разрешениями
Мониторинг изменений фаервола
- Создание правил, разрешающих входящий трафик с
0.0.0.0/0 - Удаление ограничивающих правил фаервола
- Изменение правил для критических подсетей
- Открытие портов управления (SSH, RDP) для публичного доступа
Контроль доступа к хранилищу
- Доступ к бакетам с конфиденциальными данными
- Изменение ACL или IAM-политик бакетов
- Массовое скачивание объектов
- Изменение настроек шифрования бакетов
Устранение неполадок
Модуль не получает сообщения
- Проверьте правильность
project_idиsubscription_name - Убедитесь, что JSON-ключ сервисного аккаунта валиден
- Проверьте, что подписка активна:
gcloud pubsub subscriptions describe wazuh-audit-subscription - Убедитесь, что Cloud Logging Sink создан и направляет логи в топик
- Проверьте журнал:
/var/ossec/logs/ossec.log
Ошибка Permission Denied
- Проверьте, что сервисному аккаунту назначены роли Pub/Sub Subscriber и Publisher
- Убедитесь, что сервисный аккаунт sink имеет доступ к топику
- Проверьте, что ключ не отозван в Google Cloud Console
Задержки в доставке событий
- Уменьшите значение
interval(например, до 30s) - Увеличьте
max_messagesдля обработки большего числа событий за цикл - Проверьте, что подписка не накапливает непрочитанные сообщения
- Рассмотрите создание отдельных подписок для разных типов логов
Зависимости Python
Модуль требует Python 3 и библиотеки Google Cloud:
/var/ossec/framework/python/bin/pip3 install google-cloud-pubsub google-cloud-storageСвязанные разделы
- Мониторинг облачной безопасности - обзор облачных интеграций
- Мониторинг AWS - интеграция с Amazon Web Services
- Возможности Wazuh - модули безопасности платформы