勉強前
そもそもロックできるってのは知らなかった
そもそもオブジェクトロック とは
s3のオブジェクトを削除されないように保護する機能です。
オブジェクトロックの機能は一定期間 or 無期限でオブジェクトの特定のバージョンが削除または上書きされるのを防ぐ機能です
オブジェクトロックの種類
まず上位概念で以下があります。
- リテンションモード
- オブジェクトごとにロックする期間を指定します。
- バケットに最小保持期限と最大保持期限を設定することも可能なので必ずしもオブジェクト単位でやらないといけないというわけではないです。
- リーガルホールド
- 原則として無期限にオブジェクトをロックします。
- ただし、s3:PutObjectLegalHold の権限があるユーザであれば解除することができるので絶対に消せないというものではないです。
また、リテンションモードには以下のモードが存在します。
- ガバナンスモード
- s3:BypassGovernanceRetention の権限を持ってる人は保護を上書きすることができる
- なので、その人が上書きしないようにするためにはこの権限を外すだけでOK
- aws cliだと上記の権限だけでOKですが、マネコンからだと s3:GetBucketObjectLockConfiguration も必要になる
- コンプライアンス要件が比較的緩やかな場合に使用
- s3:BypassGovernanceRetention の権限を持ってる人は保護を上書きすることができる
- コンプライアンスモード
- ルートユーザを含むすべてのユーザが削除できない
- コンプライアンス要件が厳密な場合に使用
なぜそもそもロックする必要があるのか
オブジェクトロックはデータの不変性を保つことになります。
要するにデータを書き換えられないようにすること。
ランサムウェアや人的事故等からデータを保護して、削除される可能性を下げることが可能です。
また、特にコンプライアンスモードでは法令などで一定期間データを保持する必要がある場合があります。
その際にでもデータの不変性が保証されます。
注意点
- オブジェクトロック有効化はバケット作成時のみ可能。
- あとから変更することはできない。
- やりたい場合は別オブジェクトを作成して移行する必要がある
- オブジェクトロックをするにはバージョニング有効化が必須になります
勉強後
確かに何年間データ保持してくださいとかあるから
わざとじゃなくてもやってしまう可能性あるからそこで保護できるのはいいよね。
最近ランサムウェアとかでデータを削除されたり暗号化されたりもあるし。