Amazon S3 アクセスログを使用したリクエストの識別
Amazon S3 アクセスログを使用して、Amazon S3 リクエストを識別できます。
注記
-
Amazon S3 リクエストを識別するには、Amazon S3 アクセスログの代わりに AWS CloudTrail データイベントを使用することをお勧めします。CloudTrail データイベントは、設定が容易で、より多くの情報が含まれています。詳細については、「CloudTrail を使用した Amazon S3 リクエストの識別」を参照してください。
-
取得したアクセスリクエスト数に応じて、ログの分析にリソースや時間がさらに必要になる場合があります。
Amazon Athena を使用したリクエストのアクセスログのクエリ
Amazon Athena を使って、Amazon S3 のアクセスログで、Amazon S3 リクエストを識別できます。
Amazon S3 は、サーバーのアクセスログを S3 バケット内のオブジェクトとして保存します。多くの場合、Amazon S3 のログを分析できるツールを使用する方が簡単です。Athena は S3 オブジェクトの分析をサポートしてしるため、Amazon S3 アクセスログに対してクエリを実行するのに使用できます。
例
次の例は、Amazon Athena で Amazon S3 サーバーアクセスログをクエリする方法を示しています。次の例を実行するには、 をユーザー自身の情報に置き換えます。user input placeholders
注記
Athena クエリで Amazon S3 のロケーションを指定するには、ログの送信先となるバケットの S3 URI を指定する必要があります。この URI には、次の形式でバケット名とプレフィックスを含める必要があります。s3:///amzn-s3-demo-bucket1-logs/prefix
https://console.aws.amazon.com/athena/
で Athena コンソールを開きます。 -
クエリエディタで、次のようなコマンドを実行します。
は、データベースにつける名前に置き換えます。s3_access_logs_dbCREATE DATABASEs3_access_logs_db注記
ベストプラクティスとして、データベースは、S3 バケットと同じ AWS リージョンで作成することをお勧めします。
-
クエリエディタで次のようなコマンドを実行して、ステップ 2 で作成したデータベースでテーブルスキーマを作成します。
は、テーブルにつける名前に置き換えます。s3_access_logs_db.mybucket_logsSTRINGおよびBIGINTデータ型の値はアクセスログのプロパティです。これらのプロパティは Athena でクエリできます。LOCATIONの場合は、前述のように S3 バケットとプレフィックスパスを入力します。 -
ナビゲーションペインにある、[データベース] で、データベースを選択します。
-
[テーブル] で、テーブル名の横にある、[Preview table (テーブルのプレビュー)] を選択します。
[結果] ペインに、サーバーアクセスログのデータ (
bucketowner、bucket、requestdatetimeなど) が表示されます。これは、Athena テーブルが正常に作成されたことを意味します。これで Amazon S3 サーバーアクセスログのクエリを実行できるようになりました。
例− 誰がいつオブジェクトを削除したか (タイムスタンプ、IP アドレス、および IAM ユーザー) を表示する
SELECT requestdatetime, remoteip, requester, key FROMs3_access_logs_db.mybucket_logsWHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
例− IAM ユーザーによって実行されたすべてのオペレーションを表示する
SELECT * FROMs3_access_logs_db.mybucket_logsWHERE requester='arn:aws:iam::123456789123:user/user_name';
例− 特定の期間にオブジェクトに対して実行されたすべてのオペレーションを表示する
SELECT * FROMs3_access_logs_db.mybucket_logsWHERE Key='prefix/images/picture.jpg' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');
例− 特定の期間、特定の IP アドレスに送信されたデータの量を表示する
SELECT coalesce(SUM(bytessent), 0) AS bytessenttotal FROMs3_access_logs_db.mybucket_logsWHERE remoteip='192.0.2.1' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2022-06-01','yyyy-MM-dd') AND parse_datetime('2022-07-01','yyyy-MM-dd');
例— 特定の期間内の HTTP 5xx エラーに対応するリクエスト ID を検索する
SELECT requestdatetime, key, httpstatus, errorcode, requestid, hostid FROMs3_access_logs_db.mybucket_logsWHERE httpstatus like '5%' AND timestamp BETWEEN '2024/01/29' AND '2024/01/30'
署名バージョン 2 リクエストの識別
サーバーアクセスログを使用して Signature Version 2 リクエストを識別します。Amazon Athena を使用したログのクエリ実行の詳細については、「Amazon S3 汎用バケットへのログの配信」の「Athena クエリ」セクションを参照してください。
オブジェクトアクセスリクエストの識別
サーバーアクセスログを使用して、オブジェクトアクセスパターンを識別できます。Amazon Athena を使用したログのクエリ実行の詳細については、「Amazon S3 汎用バケットへのログの配信」の「Athena クエリ」セクションを参照してください。