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"
                }
            }
        }
    ]
}

더 알아보기 (Learn more)