跳至内容

如何使用 Athena 查询我的 CloudTrail 日志以进行 AWS Support API 调用?

3 分钟阅读
0

我想运行 Amazon Athena 查询,在我的 AWS CloudTrail 日志中搜索 AWS Support 对我的 AWS 账户进行的 API 调用。

简短描述

为了帮助您解决问题,AWS Support 可能会收集有关您的 AWS 资源的安全只读元数据。AWS Support 使用名为 AWSServiceRoleForSupport 的 AWS Identity and Access Management (IAM) 服务关联角色来收集元数据。

要查找有关 AWS Support 对您的账户进行的 API 调用的信息,请使用 Athena 查询 CloudTrail 日志

解决方法

使用分区投影手动创建 CloudTrail 表

即使您对 CloudTrail 表进行分区以减少查询的运行时,CloudTrail 日志的大小也会随着时间的推移而增加。针对高度分区表运行的查询会有较长的计划时间,无法快速完成。

要减少查询运行时,请使用分区投影手动创建 CloudTrail 表。

例如,以下 CREATE TABLE 语句在一个 AWS 区域的指定时间段内自动对 CloudTrail 日志使用分区投影:

CREATE EXTERNAL TABLE cloudtrail_logs_pp(  
    eventversion STRING,  
    useridentity STRUCT<  
        type: STRING,  
        principalid: STRING,  
        arn: STRING,  
        accountid: STRING,  
        invokedby: STRING,  
        accesskeyid: STRING,  
        username: STRING,  
        onbehalfof: STRUCT<  
             userid: STRING,  
             identitystorearn: STRING>,  
        sessioncontext: STRUCT<  
            attributes: STRUCT<  
                mfaauthenticated: STRING,  
                creationdate: STRING>,  
            sessionissuer: STRUCT<  
                type: STRING,  
                principalid: STRING,  
                arn: STRING,  
                accountid: STRING,  
                username: STRING>,  
            ec2roledelivery:string,  
            webidfederationdata: STRUCT<  
                federatedprovider: STRING,  
                attributes: map<string,string>>  
        >  
    >,  
    eventtime STRING,  
    eventsource STRING,  
    eventname STRING,  
    awsregion STRING,  
    sourceipaddress STRING,  
    useragent STRING,  
    errorcode STRING,  
    errormessage STRING,  
    requestparameters STRING,  
    responseelements STRING,  
    additionaleventdata STRING,  
    requestid STRING,  
    eventid STRING,  
    readonly STRING,  
    resources ARRAY<STRUCT<  
        arn: STRING,  
        accountid: STRING,  
        type: STRING>>,  
    eventtype STRING,  
    apiversion STRING,  
    recipientaccountid STRING,  
    serviceeventdetails STRING,  
    sharedeventid STRING,  
    vpcendpointid STRING,  
    vpcendpointaccountid STRING,  
    eventcategory STRING,  
    addendum STRUCT<  
      reason:STRING,  
      updatedfields:STRING,  
      originalrequestid:STRING,  
      originaleventid:STRING>,  
    sessioncredentialfromconsole STRING,  
    edgedevicedetails STRING,  
    tlsdetails STRUCT<  
      tlsversion:STRING,  
      ciphersuite:STRING,  
      clientprovidedhostheader:STRING>  
  )  
PARTITIONED BY (  
   `timestamp` string)  
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'  
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'  
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'  
LOCATION  
  's3://example-bucket/AWSLogs/account-id/CloudTrail/aws-region'  
TBLPROPERTIES (  
  'projection.enabled'='true',   
  'projection.timestamp.format'='yyyy/MM/dd',   
  'projection.timestamp.interval'='1',   
  'projection.timestamp.interval.unit'='DAYS',   
  'projection.timestamp.range'='2020/01/01,NOW',   
  'projection.timestamp.type'='date',   
  'storage.location.template'='s3://example-bucket/AWSLogs/account-id/CloudTrail/aws-region/${timestamp}')

**注意:**在 LOCATIONTBLPROPERTIES 子句中,将 example-bucket 替换为您的存储桶名称,将 account-id 替换为您的账户 ID,将 aws-region 替换为您的区域。对于 projection.timestamp.range,将 2020/01/01 替换为开始日期。

要运行上述查询并创建分区 CloudTrail 日志表,请完成以下步骤:

  1. 打开 Athena 控制台
  2. 选择 New query(新建查询),然后选择对话框以清除示例查询。
  3. 输入前面的查询,然后选择 Run Query(运行查询)。

有关详细信息,请参阅使用分区投影在 Athena 中创建 CloudTrail 日志表

在 CloudTrail 日志表中搜索 AWS Support API 调用

以下为示例查询,您可以使用这些查询在指定时间范围内在 CloudTrail 日志表中搜索 AWS Support 调用。这些示例使用 2025/01/012025/01/07 作为指定的时间范围。

**注意:**在以下示例查询中,将 default 替换为您在其中创建 cloudtrail_logs_pp 表的数据库的名称。

计算 AWS Support API 调用的数量

以下查询计算了 AWS Support 对您的账户进行的 API 调用的总数:

SELECT COUNT(*)  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'

获取所有 AWS Support API 调用

以下查询显示了 AWS Support 对您的账户进行的所有 API 调用:

SELECT *  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'  
 LIMIT 10

按用户名和事件源计算 AWS Support API 调用的数量

以下查询显示了 AWS Support 对您的账户进行的每个用户名和事件源的 API 调用总数:

SELECT useridentity.sessioncontext.sessionissuer.username,  
       eventsource,  
       COUNT(*) AS number_of_event  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'  
 GROUP BY useridentity.sessioncontext.sessionissuer.username,  
       eventsource  
 ORDER BY number_of_event DESC

获取 AWS Support 对您的账户进行的 API 调用的 ARN

以下查询显示了 AWS Support 对您的账户进行的所有 API 调用的 ARN:

SELECT useridentity.arn  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND regexp_like(useridentity.arn, 'AWSServiceRoleForSupport')  
 LIMIT 10

获取 AWS Support 对您的账户进行 API 调用的主体 ID

以下查询显示了 AWS Support 对您的账户进行的所有 API 调用的主体 ID:

SELECT useridentity.principalid  
  FROM "default"."cloudtrail_logs_pp"  
WHERE timestamp <= '2025/01/07'  
      AND timestamp > '2025/01/01'  
      AND regexp_like(useridentity.arn, 'AWSServiceRoleForSupport')  
LIMIT 10

相关信息

添加和删除 IAM 身份权限

Athena 中的身份和访问管理

如何使用分区投影为 Athena 查询创建 CloudTrail 表?

AWS 官方已更新 1 年前