You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用boto3查询所有区域的CloudTrail事件

问题原因

boto3调用lookup_eventsAPI时默认仅查询客户端初始化时指定区域的CloudTrail事件,该API本身为区域级服务,即使CloudTrail开启了多区域配置,也无法直接通过单个区域的客户端拉取到所有区域的事件记录。

解决方案

方案1:遍历所有区域分别查询后合并结果

这是最直接的解决方案,无需额外配置其他服务,实现逻辑如下:

  1. 拉取当前AWS账户所有已启用的区域列表
  2. 为每个区域初始化独立的CloudTrail客户端
  3. 分别调用lookup_events查询对应区域的事件,处理分页后合并所有结果
    代码示例:
import boto3
from datetime import datetime

all_run_instances_events = []
# 初始化EC2客户端拉取全量启用区域
ec2_client = boto3.client('ec2', region_name='us-east-1')
enabled_regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']]

# 遍历每个区域查询事件
for region in enabled_regions:
    ct_client = boto3.client('cloudtrail', region_name=region)
    next_token = None
    while True:
        request_params = {
            "LookupAttributes": [
                {
                    "AttributeKey": "EventName",
                    "AttributeValue": "RunInstances"
                }
            ],
            "StartTime": datetime(2021,8,21),
            "EndTime": datetime(2021,8,24)
        }
        if next_token:
            request_params["NextToken"] = next_token
        try:
            resp = ct_client.lookup_events(**request_params)
            all_run_instances_events.extend(resp["Events"])
            next_token = resp.get("NextToken")
            if not next_token:
                break
        except Exception as err:
            print(f"区域{region}查询失败,跳过:{str(err)}")
            break

# 输出最终结果数量
print(f"所有区域共查询到{len(all_run_instances_events)}条RunInstances事件")

方案2:通过Athena查询CloudTrail投递的S3日志

如果你的多区域CloudTrail已配置将日志统一投递到S3存储桶,该方案查询效率更高,尤其适合查询时间范围较大的场景:

  1. 在Athena中为CloudTrail日志创建映射表
  2. 直接通过SQL语句过滤EventName = 'RunInstances'且时间范围匹配的记录,可一次性返回所有区域的事件
-- 示例查询SQL,替换对应库表、时间参数即可
SELECT eventTime, awsRegion, eventName, userIdentity, requestParameters, responseElements
FROM your_cloudtrail_table_name
WHERE 
    eventTime >= '2021-08-21T00:00:00Z'
    AND eventTime < '2021-08-25T00:00:00Z'
    AND eventName = 'RunInstances'
注意事项
  • 确保IAM身份具备ec2:DescribeRegions、所有区域的cloudtrail:LookupEvents权限,若使用Athena方案还需要对应S3存储桶的读取权限和Athena操作权限
  • lookup_events单次调用最多返回50条记录,必须处理NextToken分页逻辑,否则会出现结果缺失
  • 需确认多区域CloudTrail已开启管理事件采集,RunInstances属于管理事件范畴,默认开启即可采集

内容的提问来源于stack exchange,提问作者Trey Yi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:36:02