最初に
AWS S3のオブジェクトロックは、データを誤って削除・上書きしないように保護するための機能です。本記事では、S3オブジェクトロックの種類や、AWS CLIとコンソールでの削除権限の違いについて解説し、実際に試した結果を共有します。
1. オブジェクトロックの種類と説明
S3オブジェクトロックには以下の2種類があります。
1.1 ガバナンスモード
- 指定されたユーザー(rootアカウントまたは特定のIAMユーザー)がオブジェクトの削除・変更を制御できる。
- 権限を持つユーザーはロックを解除し、オブジェクトの変更・削除が可能。
1.2 コンプライアンスモード
- 設定された保持期間が経過するまで、どのユーザーもオブジェクトを削除・変更できない。
- AWSアカウントのrootユーザーでさえ変更不可。
2. オブジェクトロックの削除権限について
S3のオブジェクトロックを操作するには、以下のIAM権限が必要です。
必要なIAMポリシー例
{
"Effect": "Allow",
"Action": [
"s3:GetObjectRetention",
"s3:PutObjectRetention",
"s3:BypassGovernanceRetention",
"s3:DeleteObject"
],
"Resource": "*"
}
-
s3:GetObjectRetention
:オブジェクトの保持ルールを取得。 -
s3:PutObjectRetention
:オブジェクトの保持ルールを設定。 -
s3:BypassGovernanceRetention
:ガバナンスモードのロックを解除して削除可能にする。 -
s3:DeleteObject
:オブジェクトを削除。
3. オブジェクトの削除の権限はAWS CLIとコンソール上では違う
AWS CLIとS3マネジメントコンソールでは、オブジェクトロックが有効な場合の削除の挙動に違いがあります。
AWS CLIでの削除
CLIでは s3:BypassGovernanceRetention
の権限を付与し、--bypass-governance-retention
オプションを指定することで、ガバナンスモードのオブジェクトを削除できます。
aws s3 rm s3://objectlock-test-hoge/my-object --bypass-governance-retention
コンソールでの削除
S3管理コンソールでは、ガバナンスモードが有効なオブジェクトの削除を試みると、s3:BypassGovernanceRetention
の権限が付与されていても、デフォルトでは削除ができません。
4. その理由
AWS CLIでは明示的に --bypass-governance-retention
を指定することで、ガバナンスモードを解除して削除できます。しかし、S3コンソールでは、削除前にオブジェクトの保持ルールを変更する操作が必要です。
この違いは、GUIを通じた誤操作を防ぐためのAWSの設計意図によるものと考えられます。
5. CLIとコンソール上からやってみた
5.1 バケットとオブジェクトの作成
5.2 AWS CLIでの削除試行
ガバナンスモードでは --bypass-governance-retention
を指定しないと削除できません。
aws s3 rm s3://objectlock-test-hoge/test.cli.txt
An error occurred (AccessDenied) when calling the DeleteObject operation
というエラーが発生。
--bypass-governance-retention
をつけると削除可能。
aws s3 rm s3://objectlock-test-hoge/test.cli.txt --bypass-governance-retention
5.3 コンソール上での削除試行
IAMポリシーにs3:GetBucketObjectLockConfiguration
を追加すると削除可能。
{
"Effect": "Allow",
"Action": [
"s3:GetObjectRetention",
"s3:PutObjectRetention",
"s3:BypassGovernanceRetention",
"s3:GetBucketObjectLockConfiguration",
"s3:DeleteObject"
],
"Resource": "*"
}
6. まとめ
- S3オブジェクトロックには「ガバナンスモード」と「コンプライアンスモード」がある。
- オブジェクトの削除には適切なIAM権限が必要。
- AWS CLIとコンソールでは削除の挙動が異なる。
- AWS CLIでは
--bypass-governance-retention
を明示的に指定すると削除可能。 - コンソール上での削除には、
s3:GetBucketObjectLockConfiguration
の権限が必要。
S3オブジェクトロックを正しく理解し、安全に運用しましょう!