如何导出AWS CloudTrail日志

如何导出AWS CloudTrail日志

SOC Prime Team
SOC Prime Team linkedin icon 关注

对于过去90天的管理事件,可以使用CloudTrail控制台(事件历史 → 下载事件 → JSON)或aws cloudtrail lookup-events。对于更早的数据,或像S3对象读取这样的数据事件,请读取你在S3的线索日志文件。它们位于s3://<bucket>/AWSLogs/<account-id>/CloudTrail/<region>/YYYY/MM/DD/下。

CloudTrail是你AWS控制平面的审计日志:每次控制台登录,每个API调用,每次角色假设。在云事件中,这是每个人首先要求的东西。Prime Core有262个针对CloudTrail的检测规则,映射到177个MITRE ATT&CK技术。其中包括:滥用云账户 (T1078.004)、攻击者关闭云日志记录 (T1562.008) 和从云存储中窃取数据 (T1530)。

在您开始之前

事件历史和线索是不同的东西。 事件历史一直开启并免费。它保留每个区域90天的管理事件。线索是你配置的东西:它写入S3,保留日志的时间长短由你决定,还可以包括数据事件。检查你包含的内容:

aws cloudtrail describe-trails

aws cloudtrail get-trail-status --name <trail-name>

IsLogging: false 在应该运行的线索上本身就是一个发现。

区域很重要。 事件历史以区域为单位,来自全球服务(如IAM)的事件通常会记录在us-east-1中。如果您在eu-west-1中查找CreateUser调用,将找不到它。

权限。 cloudtrail:LookupEvents用于事件历史。对于线索文件,需要在bucket上有s3:ListBucket和s3:GetObject权限,如果线索是用KMS密钥加密的,还需要kms:Decrypt权限。

选项1:控制台下载

打开CloudTrail,进入 事件历史,设置时间范围及任何过滤器(事件名称、用户、资源),然后选择 下载事件 → JSON。下载将遵循您的过滤器,所以请先检查它们。它仅涵盖当前区域。

选项2:从CLI执行lookup-events

aws cloudtrail lookup-events --region us-east-1 

  --start-time 2026-10-19T00:00:00Z --end-time 2026-10-20T00:00:00Z

  --output json > ct_use1_1019.json

需要知道的两件事。首先,每个结果都将实际事件包装成一个JSON 字符串 在CloudTrailEvent中。将其解包为每行一个干净事件:

jq -c '.Events[].CloudTrailEvent | fromjson' ct_use1_1019.json > ct_use1_1019.jsonl

第二,lookup-events在每个账户和区域上速率有限,每次调用只接受一个–lookup-attributes过滤器。宽时间窗口需要一段时间,因此尽量缩小窗口的范围。为了覆盖每个区域,循环aws ec2 describe-regions –query ‘Regions[].RegionName’ –output text。

选项3:从S3获取线索文件

这是在超过90天的历史和数据事件中进行查找的途径:

aws s3 cp s3://my-trail-bucket/AWSLogs/123456789012/CloudTrail/eu-west-1/2026/10/19/ ./ct/ --recursive

gunzip ./ct/*.json.gz

jq -c '.Records[]' ./ct/*.json > ct_euw1_1019.jsonl

每个文件包含一个Records数组,jq行将所有文件展平为每行一个事件。组织线索将组织ID添加到路径中:AWSLogs/<org-id>/<account-id>/CloudTrail/…。如果您使用CloudTrail Lake,可以通过事件运行SQL并保存结果。

查找什么

事件重要性
ConsoleLogin检查additionalEventData.MFAUsed、失败和未识别的源IP
CreateUser、CreateAccessKey、AttachUserPolicy新身份和密钥:经典的持久性和特权提升
StopLogging、DeleteTrail、PutEventSelectors有人减少CloudTrail看到的内容
从异常来源AssumeRole角色和账户间的横向移动
访问被拒绝错误码的突然增加使用被盗凭据进行侦察
GetSecretValue、GetObject的突发数据访问;如果开启了S3数据事件,GetObject才会出现

上传、净化并在LogTotal中查看

  1. 上传。 打开 logtotal.com 并拖入.jsonl(或.json文件)。
  2. 净化。 [what gets masked: account IDs, ARNs, IPs, access key IDs, usernames]. Look it over before you continue.
  3. 查看。 

当事情出错时

症状可能原因Fix
lookup-events未返回任何结果错误的区域;IAM事件通常在us-east-1中存在查询us-east-1,或循环所有区域
没有超过90天的事件事件历史保留期限使用S3中的线索文件
没有GetObject事件线索上未启用S3数据事件这是预期的;启用它们以备将来使用
读取线索文件时权限被拒绝缺少kms:Decrypt或bucket策略修复IAM或bucket策略
ThrottlingExceptionlookup-events速率限制使用较小的时间窗口;让CLI重试

FAQ

事件历史是否包括数据事件?

否。只有管理事件。数据事件仅在为记录它们而设置了线索或事件数据存储时存在。

事件多快显示?

通常在API调用后的几分钟内。S3中的线索文件成批到达,因此一个非常近期的事件可能尚未在文件中。

加入 SOC Prime 的 Detection as Code 平台 以提高对与您的业务最相关的威胁的可见性。为了帮助您开始并带来即时价值,现在与 SOC Prime 专家预约会议。