AWS サポートによる API コールの CloudTrail ログを、Athena を使用してクエリする方法を教えてください。
Amazon Athena クエリを実行して、使用している AWS アカウントに対して AWS サポートが行った API コールを AWS CloudTrail ログで特定したいです。
簡単な説明
AWS サポートは、問題の解決を支援する目的で、お使いの AWS リソースに関する保護された読み取り専用メタデータを収集する場合があります。AWS サポート は、メタデータの収集に AWSServiceRoleForSupport という AWS Identity and Access Management (IAM) サービスリンクロールを使用します。
AWS サポートがお客様のアカウントに対して行う 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 コンソールを開きます。
- [新しいクエリ] を選択してから、ダイアログボックスを選択してサンプルクエリをクリアします。
- 上記のクエリを入力した後、[クエリを実行] を選択します。
詳細については、「パーティションプロジェクションを使用して Athena の CloudTrail ログ用テーブルを作成する」を参照してください。
CloudTrail のログテーブルで AWS サポートの API コールを特定する
CloudTrail ログテーブルで、指定した時間範囲の AWS サポートによるコールを特定するために使用できるクエリの例を次に示します。この例では、指定する時間範囲に 2025/01/01 から 2025/01/07 を使用しています。
注: 次のクエリ例で、default は cloudtrail_logs_pp テーブルを作成したデータベースの名前に置き換えます。
AWS サポートによる API コール数をカウントする
次のクエリは、AWS サポートがお客様のアカウントに対して行った API コールの総数をカウントします。
SELECT COUNT(*) FROM "default"."cloudtrail_logs_pp" WHERE timestamp <= '2025/01/07' AND timestamp > '2025/01/01' AND sourceipaddress = 'support.amazonaws.com'
すべての AWS サポートによる API コールを取得する
次のクエリは、AWS サポートがお客様のアカウントに対して行ったすべての 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 サポートによる API コールの回数をユーザー名とイベントソースごとにカウントする
次のクエリは、AWS サポートがお客様のアカウントに対して行った各ユーザー名とイベントソースに関する 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 サポートがアカウントに対して行った API コールの ARN を取得する
次のクエリは、AWS サポートがお客様のアカウントに対して行ったすべての 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 サポートがアカウントに対して行った API コールのプリンシパル ID を取得する
次のクエリは、AWS サポートがお客様のアカウントに対して行ったすべての 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
関連情報
パーティションプロジェクションを使用して Athena クエリ用の CloudTrail テーブルを作成する方法を教えてください

関連するコンテンツ
- 質問済み 7ヶ月前lg...
- 質問済み 5ヶ月前lg...
- 質問済み 2年前lg...
- AWS公式更新しました 2ヶ月前