{S3}S3 オブジェクトロックの使用

オブジェクトロックは、オブジェクトリテンションの管理をするための 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