こんにちは。middleです。
前回の続きです!
★今回のお題
特定のS3バケットのオブジェクトに、変更操作(上書き)が行われた場合、検知したい
※ポイント
〜新しいオブジェクトが置かれた時は、別に検知しなくてよし〜
★懸念点&解決方法
新規オブジェクトが追加された時と、既存オブジェクトが変更された時とで、区別できるのでしょうか??
秘技サポート問い合わせをしたところ、答えはNOでした。
S3のイベント通知および、CloudTrailのデータイベントでは、追加および変更を区別することができません。
※一部抜粋&改変してます。
要するに新規オブジェクトが追加された時と、既存オブジェクトが変更された時と、双方同一イベントということでございますね……。
じゃあ今回のやりたいことは不可能かというとそうではなく、以下をご提案をしていただきました!!
S3のイベントメッセージには「e Tag」および「sequencer」が含まれています。
この値を比較することで、追加および変更を区別できるかと思います。
※一部抜粋&改変してます。
■参考:
イベントメッセージの構造 – Amazon Simple Storage Service
★で、結局どうしたか
「監査ログをS3バケットへ保存するサービス(※)以外、S3バケットへの書き込みを禁止しているので、検知の機能は実装しない」ことにしました。
※今回はCloudTrail、CloudWatchLogs、Config、ELBでした
つまり何が言いたいかと言いますと
人が意図的にオブジェクトを操作することはできない
イコール
オブジェクトの変更操作はそもそもできないので、検知する機能の実装は不要
ということでございます。
バケットポリシーやIAMポリシー等々でS3オブジェクトへの書き込みは禁止してるので、「気にしなくていいじゃん」とのご意見をいただき、このような結論となりました。
※ここから余談
前回の冒頭の”考え方“についてなのですが
私はちょっと面倒だなあ〜と思いつつ「e Tag」および「sequencer」の値を比較して通知する仕組みを実装しようと思っていたので、このご意見を聞いて「なるほどな〜」と思いました。
もちろん仕組み実装が不可欠なケースもあるかと存じますが、なくても構わない時に実装するのはある意味自己満足(?)なのかなと……。
自己満足は言い方が悪い気がしますが……。
取捨選択とか優先度だとか、いろいろ改めて考えるきっかけとなりました。
実はこの件があったのは昨年の6月なのですが、それからを振り返ってみて、仕事で”妥協“ができるようになったかな、と思いました。
ということで以上です。
お疲れ様でした 🙂