サーバーアクセスログによるリクエストのログ記録
サーバーアクセスのログには、バケットに対するリクエストの詳細が記録されます。サーバーアクセスログは、運用分析、セキュリティ体制の理解、ユーザーへの払い戻しに使用できます。
Amazon S3 は定期的にアクセスログレコードを収集し、統合して、選択されたターゲットに配信します。Amazon CloudWatch Logs または Amazon S3 汎用バケットにログを配信できます。
注記
サーバーアクセスログには、2019 年 3 月 20 日以降に開設されたリージョンで発生するリージョン違いによるリダイレクトエラーに関する情報は記録されません。リージョン違いによるリダイレクトエラーは、オブジェクトまたはバケットに対するリクエストがそのバケットがあるリージョン以外で行われた場合に発生します。
配信オプション
サーバーアクセスログは 2 つの送信に配信できます。そのうちの 1 つまたは両方を使用できます。
-
Amazon CloudWatch Logs – CloudWatch Logs ロググループに構造化された形式でログを配信します。CloudWatch Logs Insights を使用してログをクエリし、アカウントとリージョン間でログを集約し、AWS KMS を使用してログを暗号化できます。ロググループから、JSON または Apache Parquet 形式で Amazon S3 にログを配信したり、SQL 分析のために Apache Iceberg 形式の S3 テーブルにログをミラーリングしたりすることもできます。CloudWatch が出力したログの取り込みレートが適用されます。
-
Amazon S3 汎用バケット – 指定した Amazon S3 バケットに、スペース区切りのテキスト形式でログを配信します。ログの配信に料金はかかりません。料金は、ログファイルのストレージに対してのみ発生します。ソースと送信先バケットの両方が同じ AWS リージョン にあり、同じ AWS アカウント が所有している必要があります。
以下の表は、これら 2 つの配信オプションを比較したものです。
| 機能 | Amazon CloudWatch Logs | Amazon S3 汎用バケット |
|---|---|---|
| 送信先 | CloudWatch Logs ロググループ、Amazon S3 (JSON または Parquet)、または Amazon Data Firehose。CloudWatch Logs ロググループの配信は、Iceberg 形式の S3 Tables にログをミラーリングするように拡張できます。 | Amazon S3 バケット (スペース区切りテキスト) |
| ログの形式 | 構造化 JSON (ロググループ)、JSON または Apache Parquet (Amazon S3)、Apache Iceberg (S3 テーブル) | スペース区切りテキスト |
| クエリ | CloudWatch Logs Insights (ロググループ)、Amazon Athena または Spark (S3 テーブル) | Amazon Athena |
| S3 Tables による SQL 分析 | はい (自動 Iceberg ミラーリング) | いいえ (ETL が必要) |
| クロスアカウント集約 | はい (Amazon S3 および Firehose のターゲットはクロスアカウント配信をサポート) | いいえ (同じアカウントのみ) |
| クロスリージョン集約 | はい (Amazon S3 および Firehose のターゲットはクロスリージョン配信をサポート) | いいえ (同じリージョンのみ) |
| AWS KMS 暗号化 | はい | いいえ (SSE-S3 のみ) |
| セットアップ | CloudWatch Logs API または Amazon S3 コンソール | Amazon S3 API (PutBucketLogging) またはコンソール |
| 配信レイテンシー | 数時間以内 | 数時間以内 |
ベストエフォート型のサーバーログ配信
サーバーアクセスログレコードの配信は、ベストエフォートベースで行われます。ログ記録用に適切にバケットを設定した場合、そのバケットへのほとんどのリクエストについてログレコードが配信されます。ほとんどのログレコードは、記録された時間から数時間以内に配信されますが、配信間隔は短くなる場合もあります。
サーバーログの完全性や適時性は保証されません。リクエストのログレコードが、リクエストが実際に処理されてからかなり後に配信されたり、配信すらされないこともあり得ます。ログレコードが重複している場合さえあります。サーバーログの目的は、バケットに対するトラフィックの特性を理解することです。ログレコードが損失したり、ログレコードが重複したりすることはまれであるとはいえ、すべてのリクエストが完全に報告されるとは限りません。
サーバーログ作成機能はベストエフォート型であるため、使用状況レポートには、サーバーログに記録されていないアクセスリクエストが含まれる場合があります。このような使用状況レポートは、AWS Billing and Cost Management コンソールの [Cost & usage reports] で確認できます。
バケットのログ記録ステータスの変更が有効になるまでには時間がかかる
バケットのログ記録ステータスの変更がログファイルの配信に反映されるまでには時間がかかります。例えば、バケットのログを有効にする場合、その後数時間に行われるリクエストは記録される場合もあれば、されない場合もあります。ログ記録のターゲットバケットをバケット A からバケット B に変更するとします。次の 1 時間、一部のログはバケット A に引き続き配信され、他のログは新しいターゲットバケット B に配信される可能性があります。同様に、配信に使用される CloudWatch Logs ロググループを変更すると、移行中に一部のログが以前のロググループに引き続き配信される可能性があります。いずれの場合も、最終的には新しい設定が有効になるため、追加の操作は不要です。
料金
サーバーアクセスログ記録のコストは、使用する配信オプションによって異なります。
-
Amazon CloudWatch Logs – ボリュームベースの階層化された料金設定で、CloudWatch 出力ログの取り込みに対して料金が発生します。CloudWatch Logs は保存前にログを圧縮するため、保存されたボリュームは取り込まれたボリュームよりも大幅に少なくなります。S3 Tables ミラーリングを有効にすると、ストレージやテーブルのメンテナンスに追加料金はかかりません。S3 Tables の料金でクエリリクエストに対してのみ、料金が発生します。現在の料金については、「CloudWatch の料金
」を参照してください。 -
Amazon S3 汎用バケット – ログ配信に料金はかかりません。標準の Amazon S3 ストレージ料金でのログファイルのストレージに対してのみ、料金が発生します。ログファイルの配信にデータ転送料金はかかりません。ただし、ログファイルへのアクセスには通常のデータ転送料金がかかります。現在の料金については、「Amazon S3 の料金
」を参照してください。
サーバーアクセスログの配信と使用の詳細については、以下のセクションを参照してください。