サーバーアクセスログによるリクエストのログ記録 - Amazon Simple Storage Service

サーバーアクセスログによるリクエストのログ記録

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

注記

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

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

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

  1. 送信先バケット (別名ターゲットバケット) の名前を指定します。このバケットは、Amazon S3 がアクセスログをオブジェクトとして保存する場所です。ソースと送信先バケットの両方が同じ AWS リージョン にあり、同じアカウントが所有している必要があります。送信先バケットには S3 オブジェクトロックのデフォルト保持期間設定を指定できません。また、送信先バケットでは [リクエスタ支払い] を有効にできません。

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

    ソースバケットと送信先バケットが同じである場合、バケットに書き込まれるログに関する追加のログが作成されます。ストレージの請求額がいくらか増える可能性があるため、この方法はお勧めしていません。また、ログに関する追加のログのために、必要なログを見つけにくくなります。

    アクセス ログをソースバケットに保存する場合は、すべてのログオブジェクトキーに対して送信先プレフィックス (別名ターゲットプレフィックス) を指定することをお勧めします。プレフィックスを指定すると、すべてのログオブジェクト名が共通の文字列で始まるため、ログオブジェクトを識別しやすくなります。

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

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

    プレフィックス値 logs を指定すると、ログオブジェクトは次のように表示されます。

    logs2013-11-01-21-32-16-E568B2907131C0C0

    プレフィックス は、複数のバケットログが同じ送信先バケットにログを記録する場合にもソースバケットの識別に役立ちます。

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

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

  4. (オプション) ログファイルのログオブジェクトキー形式を設定します。ログオブジェクトキーの形式 (別名ターゲットオブジェクトキー形式) には 2 つのオプションがあります。

    • 日付ベース以外のパーティション分割 – これはオリジナルのログオブジェクトキーの形式です。この形式を選択すると、ログファイルのキー形式は次のとおりになります。

      [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

      例えば、logs/ をプレフィックスとして指定すると、ログオブジェクトには次のような名前が付けられます。

      logs/2013-11-01-21-32-16-E568B2907131C0C0
    • 日付ベースのパーティション分割 – 日付ベースのパーティショニングを選択した場合、ログ形式で使用される日付ソースとして、ログファイルのイベント時間または配信時間を選択できます。この形式を使用すると、ログのクエリが簡単になります。

      日付ベースのパーティション分割を選択すると、ログファイルのキー形式は次のとおりになります。

      [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

      例えば、logs/ をターゲットプレフィックスとして指定すると、ログオブジェクトには次のような名前が付けられます。

      logs/123456789012/us-west-2/DOC-EXAMPLE-SOURCE-BUCKET/2023/03/01/2023-03-01-21-32-16-E568B2907131C0C0

      配信時間配信の場合、ログファイル名の時刻はログファイルの配信時間に対応します。

      イベント時間配信の場合、年、月、日はイベントが発生した日に対応し、時、分、秒はキーで 00 に設定されます。このようなログファイルに配信されるログは、特定の日のみを対象とします。

    AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を使用してログを設定する場合は、TargetObjectKeyFormat を使用してログオブジェクトのキー形式を指定します。日付ベース以外のパーティション分割を指定するには、SimplePrefix を使用します。日付ベースのパーティション分割を指定するには、PartitionedPrefix を使用します。PartitionedPrefix を使用する場合は、PartitionDateSourceEventTime または DeliveryTime を指定します。

    SimplePrefix の場合、ログファイルキー形式は、次のとおりです。

    [TargetPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

    イベント時刻または配信時刻の PartitionedPrefix の場合、ログファイルのキー形式は次のとおりになります。

    [TargetPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]

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

Amazon S3 では、送信先バケットにログオブジェクトをアップロードする際に、次のオブジェクトキー形式を使用します。

  • 日付ベース以外のパーティション分割 – これはオリジナルのログオブジェクトキーの形式です。この形式を選択すると、ログファイルのキー形式は次のとおりになります。

    [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]
  • 日付ベースのパーティション分割 – 日付ベースのパーティショニングを選択した場合、ログ形式で使用される日付ソースとして、ログファイルのイベント時間または配信時間を選択できます。この形式を使用すると、ログのクエリが簡単になります。

    日付ベースのパーティション分割を選択すると、ログファイルのキー形式は次のとおりになります。

    [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[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 コンソールを使用してサーバーアクセスのログ記録を有効にすると、コンソールは、送信先バケットのバケットポリシーを自動的に更新して、ログ記録サービスのプリンシパルにこれらの許可を付与します。サーバーアクセスのログ配信許可の付与の詳細については、ログ配信許可 を参照してください。

注記

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

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

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

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

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

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

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

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

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

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