S3のオブジェクトロックはwrite-once-read-many (WORM) モデルを使用して、オブジェクトを保管している。オブジェクトロックを使用すれば、規定の期間中のオブジェクトの削除や上書きを防ぐことができる。
オブジェクトロックは2つの方法でオブジェクトの保管を管理している。
1つ目は保管期間、オブジェクトのロック期間を指定することにより、その期間中のオブジェクトは削除や上書きができなくなる。
2つ目はリーガルホールド、保管期間と同じ保護をオブジェクトに提供するが、期限の期限切れはない。
オブジェクトロックの設定には以下2つの権限が必要となる。
s3:BypassGovernanceRetention
は個別のオブジェクトのロック設定変更やオブジェクト削除の権限、
s3:PutBucketObjectLockConfiguration
はバケットのオブジェクトロックの設定変更の権限。
IAMポリシーでオブジェクトロックの設定を制御する場合の例は以下となる。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "test",
"Effect": "Allow",
"Action": ["s3:BypassGovernanceRetention","s3:PutBucketObjectLockConfiguration"],
"Resource": ["arn:aws:s3:::*/*", "arn:aws:s3:::*"]
}
]
}
S3のリソースポリシーで制御することもできる。ユーザーごとに制限したい場合は、タグを使用することで実現できる。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "test",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:BypassGovernanceRetention",
"s3:PutBucketObjectLockConfiguration"
],
"Resource": [
"arn:aws:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
],
"Condition": {
"StringEquals": {
"aws:PrincipalTag/Role": "Admin"
}
}
}
]
}