サーバーアクセスログを使用したリクエストのログ記録 - Amazon Simple Storage Service

サーバーアクセスログを使用したリクエストのログ記録

サーバーアクセスのログには、バケットに対するリクエストの詳細が記録されます。サーバーアクセスのログは、多くのアプリケーションに役立ちます。例えば、アクセスのログ情報は、セキュリティやアクセスの監査に役立ちます。また、顧客基盤について知り、Amazon S3 の請求を理解することにも役立ちます。

注記

サーバーアクセスログには、2019 年 3 月 20 日より後に開設されたリージョンで発生するリージョン違いによるリダイレクトエラーに関する情報は記録されません。リージョン違いによるリダイレクトエラーは、オブジェクトまたはバケットに対するリクエストがそのバケットがあるリージョン以外で行われた場合に発生します。

ログ配信を有効にするにはどうすればよいですか?

ログ配信を有効にするには、次の基本的な手順を実行します。詳細については、Amazon S3 サーバーアクセスログを有効にします。 を参照してください。

  1. ターゲットバケットの名前を指定します。このバケットは、Amazon S3 がアクセスログをオブジェクトとして保存する場所です。ソースバケットとターゲットバケットの両方が同じ AWS リージョンにあり、同じアカウントによって所有されている必要があります。

    ログの保存先のバケットとして、ソースバケットと同じリージョンにあるユーザー所有のバケットを指定できます。これにはソースバケット自体も含まれます。ただし、ログを管理しやすくするため、アクセスログは別のバケットに保存することをお勧めします。

    ソースバケットとターゲットバケットが同じである場合、バケットに書き込まれるログに関する追加のログが作成されます。ストレージの請求額がいくらか増える可能性があるため、この方法はお勧めしていません。また、ログに関する追加のログのために、必要なログを見つけにくくなります。アクセスログの保存先をソースバケットにする場合は、ログオブジェクトを簡単に区別できるように、すべてのログオブジェクトキーにプレフィックスを指定し、オブジェクト名を共通の文字列で始めてください。

    キープレフィックスは、複数のバケットが同じターゲットバケットにログを記録する場合に、ソースバケットを区別するためにも役立ちます。

  2. (オプション) Amazon S3 のすべてのログオブジェクトのキーにプレフィックスを割り当てます。プレフィックスを使用すると、ログオブジェクトを見つけやすくなります。例えば、プレフィックスの値として logs/ を指定すると、Amazon S3 で作成する各ログオブジェクトのキーの先頭に logs/ というプレフィックスが付きます。

    logs/2013-11-01-21-32-16-E568B2907131C0C0

    キープレフィックスは、ログを削除するときにも役立ちます。例えば、特定のキープレフィックスを使用して、Amazon S3 のライフサイクル設定ルールを指定することができます。詳細については、Amazon S3 ログファイルの削除 を参照してください。

  3. (オプション) 他人が生成したログにアクセスできるようにターゲットに付与する許可を設定します。デフォルトでは、バケット所有者のみにログオブジェクトへのフルアクセスが許可されます。(サーバーアクセスログが保存されている) ターゲットバケットが S3 オブジェクト所有権のバケット所有者強制設定を使用してアクセスコントロールリスト (ACL) を無効化する場合、ACL を使用するターゲット権限のアクセス許可を付与することはできません。ただし、ターゲットバケットのバケットポリシーを更新して、他のユーザーにアクセス権を付与することはできます。詳細については、Amazon S3 での Identity and Access Management および ログ配信許可 を参照してください。

ログオブジェクトのキーフォーマット

Amazon S3 では、ターゲットバケットにログオブジェクトをアップロードする際に、以下のオブジェクトキーフォーマットを使用します。

TargetPrefixYYYY-mm-DD-HH-MM-SS-UniqueString/

このキーで、YYYYmmDDHHMMSS は、ログファイルを配信した年、月、日、時、分、秒をそれぞれ表す数字です。これらの日付と時刻は協定世界時 (UTC) です。

ある時点で配信されたログファイルには、その時点より前に書き込まれたレコードが含まれます。特定の期間のすべてのログレコードが配信されたかどうかを知る方法はありません。

キーの UniqueString コンポーネントは、ファイルの上書きを防止するためのものです。意味はないため、ログ処理ソフトウェアでは無視されます。

プレフィックスの末尾であることを示すには、末尾のスラッシュ / が必要です。

ログを配信する方法

Amazon S3 は定期的にアクセスログレコードを収集し、レコードをまとめてログファイルを作成し、そのログファイルを、ログオブジェクトとしてターゲットバケットにアップロードします。複数のソースバケットでログ記録の配信先が同じターゲットバケットである場合、これらのすべてのソースバケットのアクセスログがターゲットバケットに収容されます。ただし、各ログオブジェクトは、ソースバケット別にアクセスログレコードをレポートします。

Amazon S3 は特別なログ配信アカウントを使用してサーバーアクセスログを書き込みます。このような書き込みは、通常のアクセスコントロールの制約に従います。ターゲットバケットのバケットポリシーを更新して、アクセスログ配信用のロギングサービスプリンシパル (logging.s3.amazonaws.com) へのアクセス権を付与することをお勧めします。ただし、バケットのアクセスコントロールリスト (ACL) を使用して S3 配信グループにアクセスログ配信のアクセス権を付与することもできます。バケット ACL を使用して S3 ログ配信グループへのアクセスを許可することはお勧めしません。

サーバーアクセスログを有効にし、バケットポリシーを通じてアクセスログ配信のアクセスを許可する場合は、ターゲットバケットのバケットポリシーを更新して、s3:PutObject にロギングサービスプリンシパルのアクセスを許可します。Amazon S3 コンソールを使用してバケットへのサーバーアクセスログ記録を有効にすると、コンソールは、ターゲットバケット上のバケットポリシーを自動的に更新して、ログサービスのプリンシパルにこれらの許可を付与します。サーバーアクセスのログ配信許可の付与の詳細については、ログ配信許可 を参照してください。

注記

Amazon S3 は、VPC エンドポイントポリシーで拒否されている場合、VPC エンドポイントリクエストのリクエスタまたはバケット所有者へのサーバーアクセスログの配信をサポートしません。

S3 オブジェクト所有権のバケット所有者強制設定

ターゲットバケットが、オブジェクト所有権のバケット所有者強制設定を使用している場合、ACL は無効になり、アクセス許可に影響しなくなります。ログサービスプリンシパルへのアクセスを許可するには、ターゲットバケットのバケットポリシーを更新する必要があります。オブジェクトの所有権の詳細については、サーバーアクセスログ用の S3 ログ配信グループへのアクセスを許可します。 を参照してください。

ベストエフォート型のサーバーログ配信

サーバーアクセスログレコードの配信は、ベストエフォートで行われます。ログ記録用に適切にバケットを設定した場合、そのバケットへのほとんどのリクエストについてログレコードが配信されます。ほとんどのログレコードは、記録された時間から数時間以内に配信されますが、配信間隔は短くなる場合もあります。

サーバーログの完全性や適時性は保証されません。リクエストのログレコードが、リクエストが実際に処理されてからかなり後に配信されたり、配信すらされないこともあり得ます。ログレコードが重複している場合さえあります。サーバーログの目的は、バケットに対するトラフィックの特性を理解することです。ログレコードが失われたり、ログレコードが重複したりすることはまれですが、すべてのリクエストが完全に報告されるとは限りません。

その結果、サーバーログ作成機能はベストエフォート型であるため、使用状況レポートには、サーバーログに記録されていないアクセスリクエストが含まれる場合があります。この使用状況レポートは、AWS Billing and Cost Management コンソールの [コストと使用状況レポート] にあります。

バケットのログ記録ステータスの変更が有効になるまでには時間がかかる

バケットのログ記録ステータスの変更がログファイルの配信に反映されるまでには時間がかかります。例えば、バケットのログを有効にする場合、その後数時間に行われるリクエストは記録されることもあれば、されないこともあります。ログ記録のターゲットバケットをバケット A からバケット B に変更すると、その後 1 時間は一部のログがバケット A に引き続き配信されたり、新しいターゲットバケット B に配信されたりします。いずれにしても、最終的に新しい設定が有効になるため、ユーザー側の操作は一切不要です。

ログ記録とログファイルの詳細については、次のセクションを参照してください。