S3 の サーバーアクセスログを有効したがログが記録されないときの対処方法

2021.10.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

S3 で サーバーアクセスログを有効にしました。ログが記録されるまで数時間がかかるとドキュメントに書いてあったので、丸一日時間をおいてアクセスしましたがいくら待ってもログが記録されません。
ログを記録するにはどうしたら良いでしょうか。

Amazon S3 サーバーアクセスログを有効にします。 - Amazon Simple Storage Service

サーバーアクセスのログ記録を有効にすると、ログがターゲットバケットに配信されるまでに数時間かかることがあります。

どう対応すればいいの?

ログの出力先バケットで次の条件を満たしているか確認してください。

  1. 「デフォルトの暗号化」が無効、もしくは有効でかつ Amazon S3 マスターキーになっている
  2. 「オブジェクトロック」が無効になっている
  3. 「アクセスコントロールリスト」で「S3 ログ配信グループ」のアクセスを許可している
  4. 「バケットポリシー」でログ配信を許可している

いずれかの条件を満たしない場合、サーバーアクセスログを有効にしてもログは記録されません。 また、ごくまれにログが記録されない場合もあるため、動作確認をする際は何回か操作することをオススメします。

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

サーバーログの目的は、バケットに対するトラフィックの特性を理解することです。ログレコードが失われることはまれですが、すべてのリクエストが完全に報告されるとは限りません。

確認する方法

1. 「デフォルトの暗号化」が無効、もしくは有効でかつ Amazon S3 マスターキーになっている

Amazon S3 コンソールから、出力先バケットの「プロパティ」タブを開きます。

「デフォルトの暗号化」が「無効」になっているか、

もしくは「有効」で「Amazon S3 マスターキー (SSE-S3)」になっていることを確認します。

「AWS Key Management Service キー (SSE-KMS)」の場合は、変更が必要です。

2. 「オブジェクトロック」が無効になっている

同じく「プロパティ」タブを開きます。

「オブジェクトロック」が無効になっていることを確認します。

3. 「アクセスコントロールリスト」で「S3 ログ配信グループ」のアクセスを許可している

「アクセス許可」タブを開きます。

「アクセスコントロールリスト (ACL)」で「S3 ログ配信グループ」にアクセス許可があることを確認します。

「-」になっている場合は、変更が必要です。

4. 「バケットポリシー」でログ配信を許可している

同じく「アクセス許可」タブを開きます。

バケットポリシーにログ配信を拒否するポリシーがないことを確認します。(許可するポリシーは不要です)

"Effect": "Deny"で拒否するポリシーがある場合は、ログ配信が拒否されないか確認します。

参考資料