S3 Object Lock利用シーン
①一定期間または無期限でオブジェクトの削除や上書きを防止したい
②WORM( write-once-read-many) ストレージを必要とする規制要件を満たすために
※SEC 17a-4、CFTC、FINRAの規制
リンク:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html
※ 本文は長いので、時間がない方は最後のサマリーだけを見て頂ければと思います。
設定方法
①保持期間の設定
- バケットに設定したら、以降にアップロードされたObject全部自動的に適用される
- オブジェクトごとに設定する。
以下2モードのどちらかを設定する
Governance mode <特殊権限で外せる>
Compliance mode <期限まで外せない>
②リーガルホールドの有効化(オブジェクト単位のみ、明示的に削除可能)
保存期間と同じ保護を提供しますが、有効期限はありません。その代わり、お客様が明示的に削除するまで、リーガルホールドは有効です。
リーガルホールドは、保存期間とは独立しています。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/batch-ops-legal-hold.html
結果
Tips
①バケットを作成するタイミングで有効にするしか設定できません。
また、有効にしたら外せません。
②既存バケットはAWSサポートへ連絡すると対応してくれそうです。
③既存オブジェクトを有効するには以下2種類
・バケットに入れ直す
※リーガルホールドの場合、一つずつ設定する必要があります。
・バッチオペレーション機能を利用する。
既存オブジェクトの一斉適用
大量のオブジェクトにあるバケットに対して、バッチオペレーションを利用して自動的に設定することが可能です。
ステップは簡単にまとめてみました。
①ソースバケットのロック機能を有効化
②Targetバケットのロック機能を有効化
③ソースバケットにReplicationルールを設定する
④ソースバケットにマニフェストを作成する
⑤バッチオプションジョブを作成する
最後に現状のねじれ(?)現象を申し上げたら本記事を完了したいと思います。
・ロックの状態でレプリケーションを設定することができません。
・バケット作成するタイミングでロックをかけないと、ロックの有効化できません。
つまり、現状上記の操作はサポートから協力していただかないと、既存バケット(バッチオペレーション)は利用できない状況でございます。
(ということで、最後のバッチオペレーション検証は一旦後回しにしました)
サマリー
データの改ざん/誤削除/保存期間の要件に対して、S3のObjectロック機能の以下のどちらを利用すれば解決可能
・保持期間(Retetion Period)
>バケット単位設定、設定以降直下に可能するObject自動適用
>オブジェクト単位はバケットの設定を上書きして、保持期間をより長く設定することも可能
>2種類ある
Governance mode : 特別権限を持つと削除可能です
Compliance mode : 指定期限までいかなる方法でも削除/変更できない
>既存バケット/オブジェクトに対しては、バッチオペレーションなど利用して一斉更新は可能です。
・リーガルホールドの有効化(Legal hold)
>オブジェクト単位設定
>自動有効機能はないので、個別設定要
>AWSCLIなど利用して、バッチにて列挙で更新
>明示的な設定変更が可能