Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

Amazon S3 サーバーアクセスのログ記録

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

サーバーアクセスのログ記録を有効にする方法

バケットへのアクセスのリクエストを追跡するため、サーバーアクセスのログ記録を有効にすることができます。アクセスログのレコードごとに 1 つのアクセスリクエストの詳細として、リクエスタ、バケット名、リクエスト時刻、リクエストアクション、レスポンスのステータス、エラーコード (存在する場合) などの情報が取り込まれます。

注記

Amazon S3 バケットに対するサーバーアクセスのログ記録を有効にしても追加料金は発生しませんが、システムが配信するログファイルについては、通常のストレージ料金がかかります(ログはいつでも削除できます)。 ログファイルの配信に伴うデータ転送料金はありませんが、配信済みのログファイルへのアクセスには、他のすべてのデータ転送と同じ料金がかかります。

ログ記録はデフォルトでは無効になっています。ログ記録が有効になっている場合、ログはソースバケットと同じ AWS リージョンのバケットに保存されます。

ログ記録を有効にするには、以下を実行する必要があります。

  • Amazon S3 によるアクセスログの配信元のバケットにログ記録設定を追加し、ログ配信をオンにします。このバケットをソースバケットと呼びます。

  • アクセスログの保存先のバケットに対する書き込みアクセス許可を Amazon S3 ログ配信グループに付与します。このバケットをターゲットバケットと呼びます。

ログ配信をオンにするには、以下のログ記録設定情報を指定します。

  • Amazon S3 でアクセスログをオブジェクトとして保存するターゲットバケットの名前。ログの保存先のバケットとして、ソースバケットと同じリージョンにあるユーザー所有のバケットを指定できます。これにはソースバケット自体も含まれます。

    ログを管理しやすくするため、ソースとは別のバケットにアクセスログを保存することをお勧めします。アクセスログの保存先をソースバケットにする場合は、ログオブジェクトを簡単に区別できるように、すべてのログオブジェクトキーにプレフィックスを指定し、オブジェクト名を共通の文字列で始めてください。

    ソースバケットとターゲットバケットが同じである場合、バケットに書き込まれるログに関する追加のログが作成されます。この動作に伴ってわずかにストレージ料金が増えるため、ユースケースとして最適とは言えません。さらに、ログに関する追加のログのために、必要なログを見つけにくくなります。

    注記

    ソースバケットとターゲットバケットの両方を同じ AWS アカウントが所有すること、さらに両方のバケットが同じリージョンにあることが必要です。

  • (オプション) すべてのログオブジェクトキーに割り当てる Amazon S3 のプレフィックス。プレフィックスを使用すると、ログオブジェクトを見つけやすくなります。

    たとえば、プレフィックス値として logs/ を指定すると、Amazon S3 で作成するすべてのログオブジェクトのキーが、次の例に示すように、logs/ プレフィックスで開始されます。

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

    キープレフィックスは、ログを削除するときに役立ちます。たとえば、Amazon S3 のライフサイクル設定ルールを指定し、特定のキープレフィックスを持つオブジェクトを削除できます。詳細については、「Amazon S3 ログファイルの削除」を参照してください。

  • (オプション) 生成済みのログを他のユーザーが利用するためのアクセス許可。デフォルトでは、バケット所有者には常に、ログオブジェクトへの完全なアクセス権が与えられます。オプションで他のユーザーにもアクセス権を与えることができます。

サーバーアクセスのログ記録を有効にする方法の詳細については、「コンソールを使用したログ記録の有効化」と「プログラムを使用したログ記録の有効化」を参照してください。

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

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

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

このキーで、YYYYmmDDHHMMSS は、ログファイルを配信した年、月、日、時、分、秒をそれぞれ表す数字です。

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

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

ログの配信方法

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

Amazon S3 は、ログ配信グループと呼ばれる特別なログ配信アカウントを使用してアクセスログを書き込みます。このような書き込みは、通常のアクセスコントロールの制約に従います。ログ配信グループにターゲットバケットへの書き込みアクセス許可を付与するには、ターゲットバケットのアクセスコントロールリスト (ACL) に付与エントリを追加する必要があります。Amazon S3 コンソールを使用してバケットへのログ記録を有効にすると、コンソールは、ソースバケットでのログ記録の有効化とターゲットバケットでの ACL の更新の両方を行って、ログ配信グループに書き込みアクセス許可を付与します。

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

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

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

サーバーのログ作成機能はベストエフォート型であるため、AWS ポータルで利用できる使用状況レポート (AWS マネジメントコンソール でレポートされる請求およびコスト管理レポート) には、サーバーログに記録されていないアクセスリクエストが含まれる場合があります。

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

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