
Wazuh AWS CloudTrail 集成指南从 S3 采集到规则引擎告警的完整实践【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh导读本文基于 Wazuh 开源安全平台的 AWS 集成模块系统讲解如何采集并分析 AWS CloudTrail 日志。AWS CloudTrail 会记录 AWS 基础设施中的每一次 API 调用与账户活动为治理、合规与安全监控提供审计日志Wazuh 通过内置的aws-s3wodle 从 S3 存储桶拉取 CloudTrail 日志交给规则引擎分析并对未授权 API 调用、IAM 变更、安全组修改等可疑活动实时生成告警。读完本文你将掌握 CloudTrail 在 Wazuh 中的完整配置流程、IAM 最小权限方案、底层处理链路与验证方法可直接照搬落地。CloudTrail 日志与 Wazuh 的对接方式AWS CloudTrail 会在您启用后持续记录账户内发生的管理事件与数据事件并默认以JSON文件形式投递到指定的 S3 存储桶。Wazuh 的 AWS 模块位于仓库 wodles/aws负责完成拉取—解析—告警整条链路按周期扫描 S3 存储桶找出新产生的 CloudTrail 日志对象下载并解压*.json.gz文件读取其中的Records字段每条记录即一个 CloudTrail 事件将事件转换为 Wazuh 告警消息aws数据字段携带原始事件信息交由 Wazuh 规则引擎匹配产生告警。在源码层面这一逻辑由 wodles/aws/buckets_s3/cloudtrail.py 中的AWSCloudTrailBucket类实现它继承自 wodles/aws/buckets_s3/aws_bucket.py 中的AWSLogsBucket并在初始化时指定service CloudTrail、field_to_load Records即从日志 JSON 中加载Records数组作为事件列表。入口脚本 wodles/aws/aws_s3.py 会根据命令行参数--type cloudtrail默认值即为cloudtrail实例化该处理类。提示仓库中另有一份同主题文档 docs/ref/modules/integrations/aws-cloudtrail.md本文在此基础上结合源码与测试做了纵深扩充。前置条件开始配置前请确认以下三项均已就绪一个已启用 CloudTrail 并配置将日志投递到 S3 存储桶的 AWS 账户AWS 凭证Access Key 与 Secret Key或一个具备读取该 S3 存储桶权限的 IAM 角色Wazuh 代理端已安装 Python 3 与boto3库AWS SDK for Python模块运行时的依赖。在 ossec.conf 中配置 aws-s3 wodleWazuh 代理的 AWS 模块通过代理配置文件ossec.conf中的wodle nameaws-s3块启用。以下是一个针对 CloudTrail 的最小可用配置wodle nameaws-s3 disabledno/disabled interval10m/interval run_on_startyes/run_on_start skip_on_erroryes/skip_on_error bucket typecloudtrail namemy-cloudtrail-bucket/name access_keyYOUR_ACCESS_KEY/access_key secret_keyYOUR_SECRET_KEY/secret_key regionsus-east-1/regions pathAWSLogs//path only_logs_after2024-01-01/only_logs_after remove_from_bucketno/remove_from_bucket /bucket /wodle上述配置的语义是每 10 分钟扫描一次my-cloudtrail-bucket存储桶解析us-east-1区域、AWSLogs/路径前缀下 2024-01-01 之后产生的 CloudTrail 日志模块启动时立即处理一次处理出错时跳过该文件继续运行且不删除桶内已处理文件。配置选项详解选项是否必填默认值说明disabled否no设为yes时禁用整个 AWS 模块。interval否5s两次 S3 存储桶扫描之间的时间间隔。run_on_start否yes模块启动时立即处理一次日志而不是等到第一个周期结束。skip_on_error否yes处理出错时跳过该文件继续而不是终止模块。bucket是—定义要监控的 S3 存储桶对 CloudTrail 日志必须设为typecloudtrail。name是—S3 存储桶名称。access_key否—AWS 访问密钥 ID使用 IAM 角色认证时无需填写。secret_key否—AWS 秘密访问密钥使用 IAM 角色认证时无需填写。aws_profile否—AWS CLI 配置文件profile名称用于替代密钥认证。iam_role_arn否—要代入的 IAM 角色 ARN用于跨账户访问。iam_role_duration否—代入 IAM 角色会话的持续时间秒。aws_organization_id否—AWS 组织 ID用于过滤该组织下的日志。aws_account_id否—指定要过滤日志的 AWS 账户 ID。aws_account_alias否—AWS 账户别名用于告警信息富化。regions否—逗号分隔的 AWS 区域列表。path否—CloudTrail 日志文件的 S3 Key 前缀过滤器。path_suffix否—S3 Key 后缀过滤器。only_logs_after否—仅处理此日期YYYY-MM-DD之后产生的日志。remove_from_bucket否no处理完成后是否从存储桶删除日志文件。discard_regex否—过滤掉匹配事件的正则表达式需配合field属性指定 JSON 字段名格式为discard_regex fieldfieldNameregex/discard_regex。sts_endpoint否—自定义 AWS STS 终端节点 URL如 VPC Endpoint。service_endpoint否—自定义 AWS S3 终端节点 URL如 VPC Endpoint。关键选项的源码级说明认证方式虽然ossec.conf中仍支持access_key/secret_key但在 wodles/aws/aws_tools.py 的参数定义中这两个参数已标注为 4.4 版本起弃用DEPRECATED_MESSAGE官方推荐改用 IAM 角色或 AWS Profile 认证。iam_role_duration在 wodles/aws/aws_tools.py 的arg_valid_iam_role_duration中校验为 9003600 秒且必须与iam_role_arn同时使用否则会直接报错。path前缀CloudTrail 默认的 S3 目录结构为AWSLogs/account-id/CloudTrail/region/YYYY/MM/DD/...。源码 wodles/aws/buckets_s3/aws_bucket.py 中的AWSLogsBucket会据此拼接get_base_prefix()、get_service_prefix()与get_full_prefix()来定位各账户、各区域的日志目录。remove_from_bucket为yes时模块在成功处理文件后调用delete_object从存储桶删除对象见 wodles/aws/buckets_s3/aws_bucket.py 的iter_files_in_bucket方法。删除操作不可恢复生产环境务必谨慎。去重机制模块使用 SQLite 数据库记录已处理文件的bucket_path、aws_account_id、aws_region与log_key默认库名s3_cloudtrail表名cloudtrail重复扫描时跳过已处理文件并对每个账户/区域最多保留 500 条记录做 DB 维护MAX_RECORD_RETENTION 500。迟到日志处理CloudTrail 等日志类型允许对象延迟到达因此模块在 wodles/aws/buckets_s3/aws_bucket.py 中通过rewind_marker_to_day_folder将 S3 扫描游标回退到前一天避免漏掉乱序到达的日志文件LATE_ARRIVAL_LOG_TABLES中包含cloudtrail。使用 IAM 角色认证相比在配置中明文写入密钥更推荐使用 IAM 角色也支持跨账户或 AWS Profile 认证bucket typecloudtrail namemy-cloudtrail-bucket/name aws_profiledefault/aws_profile iam_role_arnarn:aws:iam::123456789012:role/WazuhRole/iam_role_arn regionsus-east-1,eu-west-1/regions /bucket该示例同时监控us-east-1与eu-west-1两个区域。从源码看aws_profile、iam_role_arn等参数最终会被 src/wazuh_modules/src/wm_aws.c 中的 wodle 执行逻辑转换为aws_s3.py脚本的命令行参数如--iam_role_arn、--only_logs_after、--trail_prefix再由脚本完成实际的 S3 访问因此 ossec.conf 中的标签与命令行选项一一对应。AWS 侧配置启用 CloudTrail登录 AWS Management Console进入CloudTrail服务创建一条 Trail追踪并配置将日志投递到 S3 存储桶如需多区域监控请确保 Trail 对所有区域启用Apply to all regions否则只有 Trail 所在区域的事件会被记录。IAM 最小权限Wazuh 所使用的 IAM 用户或角色需要具备对目标 S3 存储桶的读取权限。最小权限策略如下{ 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/* ] } ] }其中s3:ListBucket用于列举桶内对象扫描日志s3:GetObject用于下载并读取日志文件。如果配置中开启了remove_from_bucket还需额外追加s3:DeleteObject权限否则删除对象会因权限不足而失败。验证集成修改配置后重启 Wazuh 代理使配置生效systemctl restart wazuh-agent随后检查模块运行日志grep aws-s3 /var/ossec/logs/ossec.log正常运行时日志中会出现模块扫描存储桶、发现新日志、处理文件等调试信息调试级别通过-d参数控制。CloudTrail 事件被处理后会生成携带aws数据字段的告警其中包含原始事件信息您可以在 Wazuh 仪表盘中按data.aws相关字段检索例如data.aws.eventName、data.aws.sourceIPAddress等。告警消息的字段富化细节为了让 ES 索引映射保持稳定模块在发送前会对事件做格式化见 wodles/aws/buckets_s3/cloudtrail.py 的reformat_msg方法与 wodles/aws/buckets_s3/aws_bucket.py 的reformat_msg/get_alert_msgadditionalEventData、responseElements、requestParameters等动态字段若其值不是字典类型如字符串、列表会被统一转换为字典{string: str(value)}以规避 ES mapping 冲突requestParameters.disableApiTermination若为布尔值会转换为{value: bool}既非布尔也非字典的异常类型会打印 WARNING 日志对应测试 wodles/aws/tests/test_cloudtrail.py 中的test_aws_cloudtrail_bucket_reformat_msg_disable_api_termination_unexpected_type_prints_warningsourceIPAddress若为 IPv4 地址会额外生成source_ip_address字段以兼容新旧索引模式事件中的None值会在构造告警消息时被递归剔除remove_none_fields告警消息附带log_info含aws_account_alias、log_file、s3bucket与aws_account_id等富化字段。常见问题与排查思路凭据错误若配置了access_key/secret_key但无法读取桶模块在check_bucket阶段会因SignatureDoesNotMatch错误码 3或RequestTimeTooSkewed错误码 19退出后者表示本机时间与 AWS 环境时间偏差过大请先同步系统时钟。区域或前缀不匹配CloudTrail 日志存放路径不符合AWSLogs/account-id/CloudTrail/region/...结构时find_account_ids/find_regions可能找不到任何账户或区域错误码 18请核对path前缀与桶内实际目录。文件解析失败get_log_file捕获解压失败错误码 8、解析失败错误码 9等异常skip_on_erroryes时会跳过该文件并生成一条带error_msg的告警便于追溯。限流ThrottlingS3/STS 请求被限流时ThrottlingException错误码 16模块会提示检查重试配置可适当调大interval或降低扫描频率。告警缺失先确认only_logs_after的日期是否晚于最早日志时间、regions是否覆盖 Trail 启用的全部区域再结合 ossec.log 中的aws-s3日志定位是未扫描到文件还是规则未命中。小结Wazuh 通过aws-s3wodle 将 AWS CloudTrail 审计日志接入统一的安全监控体系配置上只需在ossec.conf声明存储桶、区域与认证方式配合最小权限的 IAM 策略即可处理层面由 wodles/aws/buckets_s3/cloudtrail.py 驱动的扫描—去重—下载解压—字段格式化—告警上报链路保证事件完整入库最终由规则引擎对未授权 API 调用、IAM 变更等敏感操作产生告警。若要深入了解规则编写与告警分析可继续阅读仓库 docs/ref/modules 下的相关模块文档。【免费下载链接】wazuhWazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads.项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考