オブジェクトロックは、オブジェクトリテンションの管理をするための 2 つの方法、保持期間およびリーガルホールドを提供します。
オブジェクトロックは、バージョニングされたバケットでのみ機能し、
保持期間とリーガルホールドは個々のオブジェクトバージョンに適用されます。
オブジェクトロックはバケット新規作成時に設定する必要がある
オブジェクトロックにより、オブジェクトが削除または上書きされることを、一定期間または無期限に防止できます。
S3 オブジェクトロックでは、次の 2 つのリテンションモードが提供されます。
ガバナンスモード
→上書きまたは削除するには、ユーザーは s3:BypassGovernanceRetention アクセス許可を持っている必要
コンプライアンスモード
→root ユーザーを含め、ユーザーが、保護されたオブジェクトのバージョンを上書きまたは削除することはできません。
リーガルホールドには関連する保持期間はなく、削除するまで有効です。
リーガルホールドは、s3:PutObjectLegalHold アクセス許可を持つ任意のユーザーが自由に適用および解除できます。
-- 1. コマンド等のインストール
-- 1.1 aws cli version 2 インストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
-- 2. オブジェクトロック機能を有効にしたS3 バケットを作成する。(バージョニングも同時に有効化される)
aws s3api create-bucket \
--bucket bucket123 \
--create-bucket-configuration LocationConstraint=ap-northeast-1 \
--object-lock-enabled-for-bucket
aws s3 ls
-- 3. バケットレベルのオブジェクトロックの設定
-- リテンションモードと保持期間のデフォルト値を指定できる
aws s3api get-object-lock-configuration \
--bucket bucket123
aws s3api put-object-lock-configuration \
--bucket bucket123 \
--object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 1 }}}'
-- 4. バケットにオブジェクトをアップロードする
echo test01 > test01.txt
aws s3 cp test01.txt s3://bucket123
aws s3 ls s3://bucket123 --recursive
aws s3api list-object-versions --bucket bucket123
-- 5. オブジェクトレベルのオブジェクトロックの設定
-- リテンションモードと保持期間の確認
aws s3api get-object-retention \
--bucket bucket123 \
--key test01.txt
-- リーガルホールド確認
aws s3api get-object-legal-hold \
--bucket bucket123 \
--key test01.txt
-- リーガルホールド有効化
aws s3api put-object-legal-hold \
--bucket bucket123 \
--key test01.txt \
--legal-hold Status=ON
-- リーガルホールド無効化
aws s3api put-object-legal-hold \
--bucket bucket123 \
--key test01.txt \
--legal-hold Status=OFF
-- 6. 動作確認
-- 削除できないことを確認
-- バージョン一覧
aws s3api list-object-versions --bucket bucket123
-- バージョン指定の削除
aws s3api delete-object --bucket bucket123 --key test01.txt \
--version-id "tIUsFSjBIje14A7Nm4pEvm.WhTdxixvQ"
→ An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied
-- 1日経過後、削除できることを確認
-- 7. クリーンアップ
-- バケットの削除
aws s3 ls
aws s3 rb s3://bucket123 --force