如何使用 Athena 查询我的 CloudTrail 日志以进行 AWS Support API 调用?
我想运行 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}')
**注意:**在 LOCATION 和 TBLPROPERTIES 子句中,将 example-bucket 替换为您的存储桶名称,将 account-id 替换为您的账户 ID,将 aws-region 替换为您的区域。对于 projection.timestamp.range,将 2020/01/01 替换为开始日期。
要运行上述查询并创建分区 CloudTrail 日志表,请完成以下步骤:
- 打开 Athena 控制台。
- 选择 New query(新建查询),然后选择对话框以清除示例查询。
- 输入前面的查询,然后选择 Run Query(运行查询)。
有关详细信息,请参阅使用分区投影在 Athena 中创建 CloudTrail 日志表。
在 CloudTrail 日志表中搜索 AWS Support API 调用
以下为示例查询,您可以使用这些查询在指定时间范围内在 CloudTrail 日志表中搜索 AWS Support 调用。这些示例使用 2025/01/01 到 2025/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
相关信息
- 语言
- 中文 (简体)
