S3のオブジェクトロックは削除されないように保護する機能です。
作成されたオブジェクトをコンプライアンス上の要請などで削除や変更できないように制限をかけられます。オペレーションミスを防止する目的ではなく、削除の意図を持って削除しようとする人から保護します。
ロックの対象
オブジェクトに対してロックします。バケット全体に対してではありません。
オブジェクトに対する設定というのは特定のKeyの特定のバージョンに対する設定です。特定のKeyに対してロックをかけても、そのKeyに対して引き続き上書き変更や削除を行うことはできます。あくまでロックをかけたそのバージョンを削除できないということです。また、上書きしてできた新しいバージョンにはロックの設定は引き継がれず新規オブジェクトと同じ扱いです。
この機能を使うにはバケットのオブジェクトロックの機能が有効となっている必要があります。
バケットのオブジェクトロック有効化
バケットに対する設定の注意事項:
- バケットのオブジェクトロック有効化はバケット作成時にのみ設定可能。あとからの変更は不可
- バケットのオブジェクトロック有効化をするには同時にバージョニングも有効化する必要あり
- オブジェクトロック有効化されているバケットはバージョニングを止めることができない
- バケットのオブジェクトロックが有効化だからといって直ちにバケット内すべてのオブジェクトがロックされるわけではない
バケット作成時の画面
オブジェクトロックを有効化するかどうかのみです。
この他に、オブジェクトに対する設定(ロックをかけるかどうかや、モード、保持期限)のデフォルト値をバケットに対して設定できます。デフォルト値はバケット作成後のPropertiesの画面で設定します。あとから変更もできます。
オブジェクトに対する設定
オブジェクトロックは2つの機能があります。片方だけ使うことも両方同時に使うこともできます。
- リテンションモード (retention mode)
- リーガルホールド (legal hold)
リテンションモードにはさらに2つのモードがあります。これはどちらかを選択して使います。
- ガバナンスモード (governance mode)
- コンプライアンスモード (compliance mode)
つまり次のうちのいずれかになります。
- オブジェクトロックをかけない
- リテンションモードのガバナンスモード
- リテンションモードのコンプライアンスモード
- リーガルホールド
- リテンションモードのガバナンスモードで、かつリーガルホールド
- リテンションモードのコンプライアンスモードで、かつリーガルホールド
ロックを解除できる条件
- リテンションモードのガバナンスモード
- 保持期限が到来すると自動で解除
- IAMでガバナンスモード解除の権限を持っているユーザまたはロールが解除操作
- リテンションモードのコンプライアンスモード
- 保持期限が到来すると自動で解除
- リーガルホールド
- IAMでリーガルホールド解除の権限を持っているユーザまたはロールが解除操作
リテンションモードとリーガルホールドの比較
違いは期限があるかどうかです。
リテンションモードは保持期限を設定します。保持期限がすぎたら、リテンションモードが解除されます。
リーガルホールドは無期限です。
どちらも削除できないようにロックされる効果は同じです。
リテンションモードは生成され続けるオブジェクトを一定期間保持する義務がある場合に便利です。
リーガルホールドは事件・事故・訴訟が起きたときに証拠を保全する必要がある場合に便利です。解決するまで無期限に特定のオブジェクトを保護できます。
リテンションモードとリーガルホールドを同時に設定していた場合は、リテンションモードの保持期限をすぎるとリテンションモードのみが解除され、リーガルホールドはそのままです。つまり保持期限を過ぎてもロックされたままです。
リーガルホールドはIAMでリーガルホールド解除の権限を持っていれば解除が可能です。
ガバナンスモードとコンプライアンスモードの比較
違いは期限内にロックを解除できるかどうかです。
ガバナンスモードは期限内であってもIAMでガバナンスモード解除の権限を持っていれば解除が可能です。
コンプライアンスモードは期限内に解除することはできません。たとえroot権限であっても解除できません。
オブジェクトのPropertiesの画面
リテンションモードの選択とリーガルホールドの設定は独立しています。リテンションモードをガバナンスモードまたはコンプライアンスモードにすると、解除される日付(期限)を設定できます。
バケットのPropertiesの画面
リテンションモードのデフォルト値を設定できます。保持期限は日数で設定します。リーガルホールドはデフォルトで有効にすることはできません。
以上。