おれさまラボの実験ノート

実際に手を動かして理解を深めるブログ。

Amazon S3にログを保存する場合のバケット設定の方法

はじめに

あまり体系的にS3バケットの設計を学んだことがなかったので、クラウド破産を回避するAWS実践ガイドに書かれていたS3の設定方法は非常に勉強になりました。実際にやってみた手順と気付きを残しておきます。

参考:クラウド破産を回避するAWS実践ガイド - KOS-MOS - BOOTH

S3とは

S3(Simple Storage Service)は、AWSが提供するオブジェクトストレージサービスで、あらゆるデータを保存できるクラウド上のスペースのことです。

ログバケットの設計

CloudTrailやAWS Configのログは外から見れるようにする必要性がないので、非公開にすべきです。

<ログバケットの要件>

  • 非公開であること
  • 改ざんされないこと
  • 古いログは削除されること

<要件を満たすための設定>

  • ブロックパブリックアクセス:予期しないオブジェクトの公開を禁止する
  • バージョニング:意図しない変更・削除からオブジェクトを復元可能にする
  • デフォルト暗号化:ディスク書き込み時にオブジェクトを暗号化する
  • ライフサイクルルール:作成から一定期間過ぎたオブジェクトを自動削除する

ブロックパブリックアクセス

S3ダッシュボードからCloudTrailのログ保存用バケットをクリックする。

[アクセス権限] タブから [ブロックパブリックアクセス] を選択し、右方の [編集] ボタンをクリックする。

[パブリックアクセスをすべてブロック] にチェックを入れ、[保存] ボタンをクリックする。

モーダルウィンドウが表示されたらテキストフィールドに「確認」と入力し、[確認] ボタンをクリックする。

これで、CloudTrailのログ保存用バケットにはパブリックアクセスできなくなった。

💡:商用環境で行う場合は、万が一のために現在時刻を控えておくこと。

💡:動作確認するにはブラウザから http://<s3-bucket-name>.s3.amazonaws.com/ にアクセスすればよい。AccessDenied というコードが返ってくればパブリックアクセスが禁止されていることになる。

💡:これによってCloudTrailログのS3バケットへの書き込みが止まっていないことも確認すればより安心できる。確認は [概要] タブから該当のログディレクトリまで掘っていき、最新のログがパブリックアクセスを禁止した時刻よりも後であることを確認すれば良い。

💡:バケット一覧に戻って、[アクセス] 欄が「非公開」となっていることも併せて確認しておきたい。

バージョニング

CloudTrailのログ保存用バケットの [プロパティ] タブから [バージョニング] を選択する。

[バージョニングの有効化] にチェックを入れて [保存] ボタンをクリックする。

バージョニングが有効になっていることを確認する。

💡:バージョニング以外にも「オブジェクトロック」という強力な機能がある。これは、指定した期間内のオブジェクト削除を不可にする強力な機能だが、S3バケット作成時にしか設定できない。オブジェクトロック機能を使いたい場合は、S3バケットを作成してから、CloudTrailなどの設定を行うようにする。

😃:なんかサポートに言えばオブジェクトロックを有効にしてくれそうな気もする。

→ 探したらあった。参考URLを参照のこと。

参考:既存の S3 バケットでオブジェクトロックを有効化する手順 | Developers.IO

💡:新規の S3 バケット作成時には [詳細設定] から [オブジェクトロック] を設定することができる。

デフォルト暗号化

ログ保存時に暗号化する機能。

💡:実はCloudTrailやAWS ConfigのログはS3で設定しなくても勝手に暗号化される。それでも明示的にS3のデフォルト暗号化を有効にするのは「暗号化しなくてよいオブジェクトはない」という発想から。

CloudTrailのログ保存用バケットの [プロパティ] タブから [デフォルト暗号化] を選択する。

[AES-256] を選択し、[保存] をクリックする。

ライフサイクルルール

古いログを自動で削除する仕組み。

CloudTrailのログ保存用バケットの [管理] タブから [ライフサイクル] を選択、[ライフサイクルルールの追加] をクリックする。

任意のルール名を入力し、[バケット内のすべてのオブジェクトに適用] にチェックを入れたら [次へ] をクリックする。

💡:同じS3バケットにCloudTrail以外のログも入っている場合は [スコープを特定のプレフィックスまたはタグに制限] にチェックを入れ、対象を絞るようにする。

ストレージクラスの移行は何もチェックせずに [次へ] をクリックする。

以下のとおり有効期限を設定して [次へ] をクリックする。

これで180日間ログが保存されることになり、仮に期限前に削除されても180日間は保存されることになる。

以上