对于过去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中查看
- 上传。 打开 logtotal.com 并拖入.jsonl(或.json文件)。
- 净化。 [what gets masked: account IDs, ARNs, IPs, access key IDs, usernames]. Look it over before you continue.
- 查看。
当事情出错时
| 症状 | 可能原因 | Fix |
|---|---|---|
| lookup-events未返回任何结果 | 错误的区域;IAM事件通常在us-east-1中存在 | 查询us-east-1,或循环所有区域 |
| 没有超过90天的事件 | 事件历史保留期限 | 使用S3中的线索文件 |
| 没有GetObject事件 | 线索上未启用S3数据事件 | 这是预期的;启用它们以备将来使用 |
| 读取线索文件时权限被拒绝 | 缺少kms:Decrypt或bucket策略 | 修复IAM或bucket策略 |
| ThrottlingException | lookup-events速率限制 | 使用较小的时间窗口;让CLI重试 |
FAQ
事件历史是否包括数据事件?
否。只有管理事件。数据事件仅在为记录它们而设置了线索或事件数据存储时存在。
事件多快显示?
通常在API调用后的几分钟内。S3中的线索文件成批到达,因此一个非常近期的事件可能尚未在文件中。