Wazuh AWS - мониторинг сервисов Amazon Web Services
Wazuh обеспечивает мониторинг безопасности Amazon Web Services через модуль aws-s3, который собирает журналы из S3-бакетов и обрабатывает события облачных сервисов AWS. Модуль поддерживает более 15 сервисов AWS, включая CloudTrail, GuardDuty, VPC Flow Logs, WAF и другие. Интеграция позволяет централизовать анализ облачных событий в Wazuh для обнаружения несанкционированного доступа, изменений конфигурации и сетевых аномалий.
Поддерживаемые сервисы AWS
Модуль aws-s3 обрабатывает журналы следующих сервисов:
| Сервис | Тип бакета | Назначение |
|---|---|---|
| AWS CloudTrail | cloudtrail | Журнал вызовов AWS API и действий пользователей |
| Amazon VPC Flow Logs | vpcflow | Сетевой трафик в виртуальных частных облаках |
| Amazon GuardDuty | guardduty | Обнаружение угроз и аномалий |
| AWS WAF | waf | Журналы веб-фаервола |
| Amazon Macie | custom | Обнаружение конфиденциальных данных в S3 |
| AWS Config | config | Отслеживание изменений конфигурации ресурсов |
| AWS Trusted Advisor | custom | Рекомендации по безопасности и оптимизации |
| AWS KMS | custom | Операции с ключами шифрования |
| Amazon Inspector | custom | Оценка уязвимостей EC2-инстансов |
| Amazon CloudWatch Logs | cloudwatch | Журналы приложений и системные логи |
| Amazon S3 Server Access | server_access | Журналы доступа к S3-бакетам |
| Amazon ECR Image Scanning | custom | Сканирование образов контейнеров |
| Elastic Load Balancer (ALB/CLB/NLB) | alb / clb / nlb | Журналы балансировщиков нагрузки |
| Amazon Security Lake | security_lake | Централизованное хранилище событий безопасности |
| AWS Security Hub | custom | Агрегация результатов безопасности |
Конфигурация модуля aws-s3
Модуль настраивается в файле ossec.conf на сервере Wazuh или агенте.
Базовая конфигурация для CloudTrail
<wodle name="aws-s3">
<disabled>no</disabled>
<interval>10m</interval>
<run_on_start>yes</run_on_start>
<skip_on_error>yes</skip_on_error>
<bucket type="cloudtrail">
<name>my-cloudtrail-bucket</name>
<aws_profile>default</aws_profile>
</bucket>
</wodle>Конфигурация для нескольких сервисов
<wodle name="aws-s3">
<disabled>no</disabled>
<interval>10m</interval>
<run_on_start>yes</run_on_start>
<skip_on_error>yes</skip_on_error>
<bucket type="cloudtrail">
<name>my-cloudtrail-bucket</name>
<aws_profile>production</aws_profile>
</bucket>
<bucket type="vpcflow">
<name>my-vpcflow-bucket</name>
<aws_profile>production</aws_profile>
</bucket>
<bucket type="guardduty">
<name>my-guardduty-bucket</name>
<aws_profile>production</aws_profile>
</bucket>
<bucket type="waf">
<name>my-waf-bucket</name>
<aws_profile>production</aws_profile>
</bucket>
<bucket type="config">
<name>my-config-bucket</name>
<aws_profile>production</aws_profile>
</bucket>
</wodle>Параметры модуля
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
disabled | no | Включение или отключение модуля |
interval | 10m | Интервал опроса S3-бакетов (s/m/h/d) |
run_on_start | yes | Выполнение при старте сервиса |
skip_on_error | yes | Продолжение работы при ошибке обработки |
only_logs_after | - | Сбор логов начиная с указанной даты (YYYY-MMM-DD) |
regions | все | Ограничение по регионам AWS |
aws_account_id | - | Фильтрация по идентификатору аккаунта |
path | - | Префикс каталога в S3-бакете |
Структура каталогов CloudTrail в S3
Логи CloudTrail сохраняются в S3 по следующей структуре:
<BUCKET>/<PREFIX>/AWSLogs/<ACCOUNT_ID>/CloudTrail/<REGION>/<YEAR>/<MONTH>/<DAY>/Методы аутентификации
Модуль aws-s3 поддерживает три метода аутентификации в AWS.
Профили с ключами доступа
Учетные данные хранятся в файле /root/.aws/credentials:
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEYКонфигурация региона в /root/.aws/config:
[default]
region = us-east-1
[profile production]
region = eu-west-1Ссылка на профиль в ossec.conf:
<bucket type="cloudtrail">
<name>my-cloudtrail-bucket</name>
<aws_profile>production</aws_profile>
</bucket>IAM-роль для EC2
Рекомендуемый метод при работе Wazuh на EC2-инстансе. Временные учетные данные получаются автоматически через Instance Metadata Service. Конфигурация не требует указания профиля или ключей:
<bucket type="cloudtrail">
<name>my-cloudtrail-bucket</name>
</bucket>Для использования этого метода назначьте EC2-инстансу IAM-роль с необходимыми разрешениями через Instance Profile.
Принятие роли (Assume Role)
Позволяет получить временные учетные данные для доступа к ресурсам другого аккаунта AWS. Требует настройки доверительных отношений между аккаунтами:
<bucket type="cloudtrail">
<name>my-cloudtrail-bucket</name>
<aws_profile>default</aws_profile>
<iam_role_arn>arn:aws:iam::123456789012:role/WazuhCloudTrailRole</iam_role_arn>
</bucket>Параметр iam_role_arn содержит ARN IAM-роли, которую модуль примет через STS AssumeRole.
Интеграция с SQS
Для масштабируемой доставки логов из S3 в Wazuh используется Amazon SQS (Simple Queue Service). При большом объеме логов SQS устраняет задержки, связанные с перебором объектов в бакете.
Принцип работы
- S3-бакет настроен на отправку уведомлений о новых объектах в SQS-очередь
- Модуль Wazuh опрашивает SQS-очередь вместо прямого перебора S3
- Каждое сообщение SQS содержит ключ нового объекта в S3
- Модуль скачивает и обрабатывает только указанные объекты
Настройка S3-уведомлений
Создайте Event Notification в настройках S3-бакета:
- Events:
s3:ObjectCreated:* - Destination: SQS Queue
- Queue ARN:
arn:aws:sqs:<REGION>:<ACCOUNT_ID>:<QUEUE_NAME>
Конфигурация SQS в ossec.conf
<wodle name="aws-s3">
<disabled>no</disabled>
<interval>5m</interval>
<run_on_start>yes</run_on_start>
<skip_on_error>yes</skip_on_error>
<bucket type="cloudtrail">
<name>my-cloudtrail-bucket</name>
<aws_profile>default</aws_profile>
<sqs_name>my-cloudtrail-sqs-queue</sqs_name>
</bucket>
</wodle>Преимущества SQS-интеграции
- Более быстрая обработка новых логов (push вместо pull)
- Снижение нагрузки на S3 API (меньше вызовов ListObjects)
- Поддержка мультиаккаунтных развертываний
- Автоматическая обработка ошибок через Dead Letter Queue
Необходимые IAM-разрешения
Для корректной работы модуля aws-s3 IAM-политика должна включать следующие разрешения:
Базовые разрешения для S3
| Действие | Ресурс | Назначение |
|---|---|---|
s3:GetObject | arn:aws:s3:::<BUCKET>/* | Чтение объектов из бакета |
s3:ListBucket | arn:aws:s3:::<BUCKET> | Перечисление объектов в бакете |
Разрешения для SQS (при использовании очереди)
| Действие | Ресурс | Назначение |
|---|---|---|
sqs:ReceiveMessage | arn:aws:sqs:<REGION>:<ACCOUNT>:<QUEUE> | Получение сообщений из очереди |
sqs:DeleteMessage | arn:aws:sqs:<REGION>:<ACCOUNT>:<QUEUE> | Удаление обработанных сообщений |
sqs:GetQueueUrl | arn:aws:sqs:<REGION>:<ACCOUNT>:<QUEUE> | Получение URL очереди |
Разрешения для Assume Role
| Действие | Ресурс | Назначение |
|---|---|---|
sts:AssumeRole | arn:aws:iam::<ACCOUNT>:role/<ROLE> | Принятие IAM-роли в целевом аккаунте |
Пример IAM-политики
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-cloudtrail-bucket",
"arn:aws:s3:::my-cloudtrail-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueUrl"
],
"Resource": "arn:aws:sqs:us-east-1:123456789012:my-cloudtrail-sqs-queue"
}
]
}Анализ CloudTrail
CloudTrail фиксирует все вызовы AWS API, предоставляя полную картину действий пользователей и сервисов в аккаунте.
Обнаружение несанкционированных вызовов API
Wazuh анализирует события CloudTrail с кодом ошибки AccessDenied или UnauthorizedAccess и генерирует алерты. Пример события:
{
"rule": {
"id": "80253",
"level": 3,
"description": "AWS CloudTrail: unauthorized API call"
},
"data": {
"aws": {
"eventName": "DescribeInstances",
"errorCode": "AccessDenied",
"userIdentity": {
"type": "IAMUser",
"userName": "suspicious-user"
},
"sourceIPAddress": "198.51.100.42",
"awsRegion": "us-east-1"
}
}
}Обнаружение входа под root-аккаунтом
Вход под root-аккаунтом AWS генерирует алерт высокого уровня:
{
"rule": {
"id": "80302",
"level": 8,
"description": "AWS CloudTrail: Root account login detected"
},
"data": {
"aws": {
"eventName": "ConsoleLogin",
"userIdentity": {
"type": "Root",
"arn": "arn:aws:iam::123456789012:root"
},
"responseElements": {
"ConsoleLogin": "Success"
},
"sourceIPAddress": "203.0.113.15"
}
}
}Изменения Security Groups
Wazuh обнаруживает добавление разрешающих правил в группы безопасности:
{
"rule": {
"id": "80447",
"level": 5,
"description": "AWS CloudTrail: Security group ingress rule added"
},
"data": {
"aws": {
"eventName": "AuthorizeSecurityGroupIngress",
"requestParameters": {
"groupId": "sg-0a1b2c3d4e5f67890",
"ipPermissions": {
"items": [{
"fromPort": 22,
"toPort": 22,
"ipRanges": {"items": [{"cidrIp": "0.0.0.0/0"}]}
}]
}
}
}
}
}Создание и удаление IAM-пользователей
{
"rule": {
"id": "80258",
"level": 5,
"description": "AWS CloudTrail: IAM user created"
},
"data": {
"aws": {
"eventName": "CreateUser",
"requestParameters": {
"userName": "new-admin-user"
},
"userIdentity": {
"userName": "admin"
}
}
}
}Интеграция GuardDuty
Amazon GuardDuty - это управляемый сервис обнаружения угроз, который анализирует потоки данных из CloudTrail, VPC Flow Logs и DNS-логов. Wazuh импортирует находки GuardDuty и обрабатывает их как алерты.
Конфигурация
<bucket type="guardduty">
<name>my-guardduty-bucket</name>
<aws_profile>default</aws_profile>
</bucket>Пример алерта GuardDuty
{
"rule": {
"id": "80301",
"level": 8,
"description": "AWS GuardDuty: Unusual API call from known malicious IP"
},
"data": {
"aws": {
"service": {
"serviceName": "guardduty",
"action": {
"actionType": "AWS_API_CALL",
"awsApiCallAction": {
"api": "DescribeInstances",
"callerType": "Remote IP"
}
}
},
"severity": 8,
"title": "API DescribeInstances was invoked from a known malicious IP address",
"type": "Recon:EC2/MaliciousIPCaller.Custom"
}
}
}Типы угроз GuardDuty
GuardDuty классифицирует находки по категориям:
- Recon - разведка (сканирование портов, перечисление ресурсов)
- UnauthorizedAccess - несанкционированный доступ
- Trojan - обнаружение троянского ПО
- CryptoCurrency - майнинг криптовалют
- Backdoor - бэкдоры
- Exfiltration - эксфильтрация данных
Мониторинг VPC Flow Logs
VPC Flow Logs фиксируют сетевой трафик на уровне сетевых интерфейсов, подсетей и VPC.
Конфигурация
<bucket type="vpcflow">
<name>my-vpcflow-bucket</name>
<aws_profile>default</aws_profile>
</bucket>Пример алерта VPC Flow Logs
{
"rule": {
"id": "80401",
"level": 4,
"description": "AWS VPC Flow: Rejected connection attempt"
},
"data": {
"aws": {
"vpcflow": {
"srcaddr": "198.51.100.55",
"dstaddr": "10.0.1.25",
"srcport": 44820,
"dstport": 3389,
"protocol": 6,
"action": "REJECT"
}
}
}
}Сценарии использования
Обнаружение компрометации ключей доступа
Комбинация алертов CloudTrail позволяет выявить использование скомпрометированных ключей:
- Множественные вызовы API с ошибкой
AccessDeniedс нового IP-адреса - Успешный вызов API после серии отказов
- Создание новых IAM-пользователей или ключей доступа
Мониторинг соответствия требованиям
- Отслеживание изменений в политиках IAM (PCI DSS 7.1, 7.2)
- Мониторинг шифрования данных через KMS (PCI DSS 3.4)
- Контроль доступа к S3-бакетам с конфиденциальными данными (GDPR Art. 32)
Обнаружение латерального перемещения
- Аномальные паттерны API-вызовов из скомпрометированного EC2
- Доступ к ресурсам в нехарактерных регионах
- Использование ранее неактивных IAM-ролей
Устранение неполадок
Модуль не собирает логи
- Проверьте права доступа IAM-политики:
s3:GetObjectиs3:ListBucket - Убедитесь, что бакет содержит логи в ожидаемой структуре каталогов
- Проверьте файл учетных данных
/root/.aws/credentials - Просмотрите журнал модуля:
/var/ossec/logs/ossec.log
Ошибка AccessDenied при чтении бакета
- Убедитесь, что IAM-политика назначена корректному пользователю или роли
- Проверьте политику бакета (Bucket Policy) на отсутствие явных запретов
- При использовании Assume Role проверьте доверительные отношения роли
- Проверьте, что регион в конфигурации совпадает с регионом бакета
Дублирование алертов
- Используйте
only_logs_afterдля ограничения начальной даты сбора - Не используйте
--reparseв production без необходимости - Проверьте, что один бакет не указан в нескольких блоках конфигурации
Задержки в обработке логов
- Уменьшите значение
interval(например, до 5m) - Настройте SQS-интеграцию для push-доставки уведомлений
- Используйте фильтрацию по регионам (
regions) для уменьшения объема данных - Настройте Dead Letter Queue для SQS для обработки ошибочных сообщений
Зависимости Python
Модуль требует Python 3 и библиотеку boto3. Установка на сервере Wazuh:
/var/ossec/framework/python/bin/pip3 install boto3Связанные разделы
- Мониторинг облачной безопасности - обзор всех облачных интеграций
- Возможности Wazuh - модули безопасности платформы
- Архитектура Wazuh - компоненты и потоки данных