S3のオブジェクトロックのリテンションモードとリーガルホールドを組み合わせた場合についてまとめてみた。

S3のオブジェクトロックのリテンションモードとリーガルホールドを組み合わせた場合についてまとめてみました。
2022.06.07

こんにちは。新卒3期生の南です。

AWS認定試験の勉強中にオブジェクトロックのリテンションモードとリーガルホールドを組み合わせた場合の挙動について少々疑問点があったので、まとめてみました。

オブジェクトロックとは

オブジェクトロックとはS3のオブジェクトに対して上書きや削除を防ぐことができる機能となります。

バージョニングとの用途の違いとしては、

  • バージョニング
    • オペレーションミスを防ぐため  
  • オブジェクトロック
    • 意図した上書き、削除を防ぐため  

の違いがあるので、S3に保存しているログの改ざん防止という要件で使われる場合が多いでしょう。

オブジェクトロックには大きく二つの種類があります。

  • リテンションモード
    • 期限付きのロック
  • リーガルホールド
    • 無期限のロック

その中でもリテンションモードには以下二つのモードを提供しています。

  • ガバナンスモード
    • 特定の権限を持たないユーザーはオブジェクトの上書き、削除ができない
  • コンプライアンスモード
    • ルートユーザーを含め、すべてのユーザーはオブジェクトの上書き、削除ができない

リテンションモードとリーガルホールドの違い

リテンションモードとリーガルホールドの二つの違いとして、期限の有無が挙げられます。
リテンションモードでは設定の際に保護期間を指定します。この間オブジェクトは保護され、保護期間が過ぎることで自動でリテンションモードは解除されます。

一方リーガルホールドでは有効期限はありません。明示的にロックの削除を行わない限り、リーガルホールドは維持されます。

ロック解除の条件

いったんそれぞれのロック解除条件について整理してみます。

  • リテンションモード
    • ガバナンスモード
      • s3:BypassGovernanceRetentionの権限を持つユーザー/ロールはオブジェクトに対して操作可能(権限があれば、ロックされていないものとして操作が可能)
      • 保護期間が切れることで操作可能
    • コンプライアンスモード
      • 保護期間が切れることで操作可能
  • リーガルホールド
    • s3:PutObjectLegalHoldの権限を持つユーザー/ロールのみロックの無効化が可能

注意点としてリーガルホールドがオンの場合にオブジェクトの操作をするには、リーガルホールドの有効化・無効化が必要になります。

リテンションモード、リーガルホールド時の挙動

長くなりましたが、本題です。
S3のオブジェクトロックの設定の際に、リテンションモード、リーガルホールドを片方でも両方でも使うことが出来ます。

つまり、いずれかになります。

  • オブジェクトロックなし
  • リテンションモードのガバナンスモード(期間a)
  • リテンションモードのコンプライアンスモード(期間b)
  • リーガルホールド(期間c)
  • リテンションモードのガバナンスモード & リーガルホールド(期間d)
  • リテンションモードのコンプライアンスモード & リーガルホールド(期間e)

  • 期間aの場合
    • ガバナンスモードが有効であるため、s3:BypassGovernanceRetentionの権限が必要
  • 期間bの場合
    • コンプライアンスモードが有効であるため、操作が不可能
  • 期間cの場合
    • リーガルホールドが有効であるためs3:PutObjectLegalHoldが必要
  • 期間dの場合
    • ガバナンスモードかつリーガルホールドが有効であるため、s3:BypassGovernanceRetentionおよびs3:PutObjectLegalHoldが必要
  • 期間eの場合
    • コンプライアンスモードが有効であるため、操作が不可能

まとめ

コンプライアンスモードが有効の期間は本当に誰も触れないという認識で大丈夫でした。(機能が存在する意味を考えれば当然だと思いますが)
一方ガバナンスモードかつリーガルホールドが有効の場合はどちらの権限も必要ということですね。