S3 버킷에서 조건부 삭제 강제하기
S3 버킷에서 조건부 삭제 강제하기
Amazon S3 버킷 정책을 사용하면 일반 용도 버킷에서 객체에 대한 조건부 삭제를 If-Match 헤더로 강제할 수 있어요. If-Match 헤더가 없다면 요청은 403 Access Denied로 거부돼요. 버킷 정책은 리소스 기반 정책으로, 버킷과 그 안의 객체에 대한 액세스 권한을 부여하는 데 사용할 수 있어요. 오직 버킷 소유자만 버킷에 정책을 연결할 수 있어요. 버킷 정책에 대한 자세한 내용은 Amazon S3용 버킷 정책을 참고하세요.
다음 예시들은 클라이언트가 If-Match HTTP 헤더를 사용하도록 강제하는 버킷 정책에서 조건을 사용하는 방법을 보여줘요.
출처: 문서
본문
예시 1: ETag 값과 함께 If-Match 헤더를 사용한 조건부 삭제만 허용
이 버킷 정책을 사용하면 ETag 값과 함께 If-Match 헤더를 포함한 DeleteObject와 DeleteObjects 요청의 조건부 삭제만 허용할 수 있어요. Null 조건은 If-Match 헤더가 존재함을 보장하고, 특정 ETag 값을 사용한 조건부 삭제는 s3:DeleteObject와 s3:GetObject 권한이 모두 필요하므로 s3:GetObject 권한을 부여해요. 모든 비조건부 삭제는 거부되고 조건부 삭제는 통과하게 돼요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowConditionalDeletes",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Alice"
},
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
"Condition": {
"Null": {
"s3:if-match": "false"
}
}
},
{
"Sid": "AllowGetObjectBecauseConditionalDeleteIfMatchETag",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Alice"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
}
]
}
예시 2: * 값과 함께 If-Match 헤더를 사용한 조건부 삭제만 허용
이 버킷 정책을 사용하면 * 값과 함께 If-Match 헤더를 포함한 DeleteObject와 DeleteObjects 요청의 조건부 삭제만 허용할 수 있어요. Null 조건은 If-Match 헤더가 존재함을 보장해요. s3:GetObject가 부여되지 않았으므로 특정 ETag 값을 사용한 조건부 삭제는 실패하고, 객체 존재 여부를 확인하며 s3:DeleteObject 권한만 필요로 하는 If-Match: *만 성공해요. 모든 비조건부 삭제는 거부되고, If-Match: * 조건부 삭제만 성공해요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowConditionalDeletes",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Alice"
},
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
"Condition": {
"Null": {
"s3:if-match": "false"
}
}
}
]
}