ablog

不器用で落着きのない技術者のメモ

S3 Object Lock について

たぶんこんな感じ。

S3 Object Lock とは

バージョニングされた過去バージョンを消せなくする機能。オブジェクトの上書きはできるが過去バージョンを消せない。従って、バージョニングを有効化しないと S3 Object Lock を有効化できない。

期間保持と法的保有

バケット*1に対して設定する一定期間オブジェクトバージョンを削除できない「期間保持」とオブジェクトに対して設定する解除するまで永久にオブジェクトバージョンを削除できない「法的保有」がある。
保持期間(Retention period)では過去バージョンを削除できない期間を設定できる。長くは変更できるが、短くはできない。法的保有(Legal hold)はオブジェクトレベルのみの設定でバケットレベルでは設定できず、有効化しているとそのオブジェクトの全過去バージョンを削除できない。s3:PutObjectLegalHold 権限を持つIAMユーザー/ロールで無効化するまでオブジェクトバージョンを削除できない。保持期間(Retention period)と法的保有(Legal hold)の両方を有効化できるが、全過去バージョンを削除できなくなるので法的保有(Legal hold)のみ有効化しているのと同じ動作になる。

期間保持のガバナンスモードとコンプライアンスモード

期間保持には「ガバナンスモード」と「コンプライアンスモード」があり両方共バケットレベルでは設定後に無効化できるが、オブジェクトに対しては「コンプライアンスモード」で作成されたオブジェクトは保持期間を過ぎるまで二度とバージョンを消せなくなる。「コンプライアンスモード」にしたバケットを削除するにはアカウントを解約するしかない。「ガバナンスモード」は明示的に s3:BypassGovernanceRetention 権限*2を付与されたIAMユーザー/ロールでは無効化して削除できる。

利用例

バケットのプロパティで保持期間90日に設定し、Organizations の Service Control Policy(SCP) で子アカウントの s3:PutBucketObjectLockConfiguration と s3:PutObjectRetention を Deny すると、そのバケットに作成されたオブジェクトは90日間削除できない。「コンプライアンスモード」の場合はこの期間はどうやっても削除できない。「ガバナンスモード」の場合は、親アカウントでSCPをデタッチしてs3:BypassGovernanceRetention 権限を持ったIAMユーザー/ロールでオブジェクトの保持期限を無効化して削除することができる。

*1:オブジェクト毎にも設定できる

*2: s3:PutObjectRetention 権限も必要