# Wazuh GCP - мониторинг Google Cloud Platform

> Настройка мониторинга Google Cloud Platform в Wazuh 4.14 - Cloud Audit Logs, Pub/Sub интеграция, сервисные аккаунты и конфигурация gcp-pubsub wodle

Source: https://opennix.org/docs/wazuh/cloud-security/wazuh-gcp-monitoring/


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-ключ.

### Создание сервисного аккаунта

1. Перейдите в **IAM & Admin - Service Accounts** в Google Cloud Console
2. Нажмите **+ CREATE SERVICE ACCOUNT**
3. Укажите имя (например, `wazuh-pubsub-reader`) и описание
4. Назначьте роли:

| Роль | Назначение |
|------|------------|
| `Pub/Sub Subscriber` | Получение сообщений из подписки |
| `Pub/Sub Publisher` | Публикация подтверждений обработки |
| `Storage Object User` | Доступ к бакетам Cloud Storage (при необходимости) |

### Генерация JSON-ключа

1. Выберите созданный сервисный аккаунт
2. Перейдите на вкладку **Keys**
3. Нажмите **ADD KEY - Create new key - JSON**
4. Сохраните скачанный файл

### Размещение ключа на сервере Wazuh

```bash
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-ключа

```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:

```bash
gcloud pubsub topics create wazuh-audit-logs \
  --project=my-gcp-project
```

### Создание подписки

Создайте подписку для топика:

```bash
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-топик:

```bash
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 права на публикацию в топике:

```bash
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 или агенте.

### Базовая конфигурация

```xml
<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>
```

### Конфигурация с фильтрацией

```xml
<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>
```

### Мониторинг нескольких проектов

```xml
<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-политики

```json
{
  "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"
      }
    }
  }
}
```

### Изменение правил фаервола

```json
{
  "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

```json
{
  "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:

```bash
/var/ossec/framework/python/bin/pip3 install google-cloud-pubsub google-cloud-storage
```

## Связанные разделы

- [Мониторинг облачной безопасности](/docs/wazuh/cloud-security/) - обзор облачных интеграций
- [Мониторинг AWS](/docs/wazuh/cloud-security/wazuh-aws-monitoring/) - интеграция с Amazon Web Services
- [Возможности Wazuh](/docs/wazuh/capabilities/) - модули безопасности платформы

