와일드카드 주체와 삭제 작업을 지정한 S3 버킷 정책

와일드카드 주체에 S3 삭제 권한을 허용하면 의도하지 않은 객체 삭제나 설정 제거로 이어질 수 있습니다. 필요한 주체, 작업과 리소스로 권한을 제한하고 조건과 복구 수단을 확인하세요.

설명

와일드카드 주체에 삭제 작업을 허용하는 버킷 정책은 필요한 사용자나 서비스보다 넓은 범위에 권한을 줄 수 있습니다. 실제 접근은 정책 조건, 리소스 범위, 명시적 거부와 공개 접근 차단(Block Public Access)에 따라 달라집니다. 조건이 있는 와일드카드 허용을 인터넷 전체의 무조건적인 삭제 권한으로 해석해서는 안 됩니다.

삭제 관련 작업에는 객체 삭제뿐 아니라 정책이나 설정의 제거도 포함됩니다. 버전 관리가 활성화된 버킷에서 버전 ID 없는 DeleteObject는 삭제 마커를 만들며, 특정 버전의 영구 삭제에는 s3:DeleteObjectVersion이 필요합니다. 실제 허용 작업과 버킷 상태를 구분해 확인하세요.

잠재적 영향

  • 삭제 권한이 필요 없는 주체에게 권한이 허용되면 객체가 제거되거나 삭제 마커 때문에 현재 객체를 읽지 못할 수 있습니다.
  • 서비스가 사용하는 객체나 필요한 설정을 잃으면 서비스 중단으로 이어질 수 있습니다.
  • 복구에는 버전 확인과 백업이 필요할 수 있으며, 버전 관리만으로 모든 영구 삭제를 방지하지는 못합니다.

해결 방법

  • 삭제 권한을 필요한 역할, 정확한 작업과 버킷 또는 객체 ARN으로 제한하세요. s3:*와 같은 광범위한 권한은 제거하세요.
  • 전체 정책의 조건과 명시적 거부, 공개 접근 차단을 검토하고 실제 적용된 정책을 확인하세요. S3 모듈 3.7.0의 사용자 지정 정책은 attach_policy = true여야 적용됩니다.
  • 객체 삭제와 버전 삭제 권한을 구분하고 복구 절차를 시험하세요. 정상적인 정리 작업은 유지하면서 승인하지 않은 삭제 요청이 거부되는지 확인하세요.

예시

참조하는 aws_s3_bucket.example은 별도로 정의해야 합니다. 203.0.113.10/32는 설명용 주소이므로 실제 요청의 출발지에 맞게 바꾸세요. 두 정책은 서로 다른 구성을 설명하며 같은 버킷에 함께 적용하지 않습니다.

IP 조건이 있는 삭제 허용

hcl
resource "aws_s3_bucket_policy" "delete_open_policy" {
  bucket = aws_s3_bucket.example.id

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Id": "MYBUCKETPOLICY",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:DeleteObject",
      "Resource": "${aws_s3_bucket.example.arn}/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "203.0.113.10/32"}
      }
    }
  ]
}
POLICY
}

IP 조건에 맞는 요청에 객체 삭제를 허용하지만 주체를 특정 역할로 제한하지 않습니다. 공유된 출발지 주소의 모든 사용자가 삭제 권한을 필요로 하는 것은 아니므로 승인된 역할도 명시하세요.

IP 조건이 있는 명시적 거부

hcl
resource "aws_s3_bucket_policy" "delete_restricted_policy" {
  bucket = aws_s3_bucket.example.id

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Id": "MYBUCKETPOLICY",
  "Statement": [
    {
      "Sid": "IPDeny",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "${aws_s3_bucket.example.arn}/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "203.0.113.10/32"}
      }
    }
  ]
}
POLICY
}

이 거부는 지정한 IP 조건에 맞는 객체 작업에만 적용됩니다. 다른 IP에서 오는 요청을 차단하는 구성도, 필요한 역할에 삭제 권한을 제한하는 완성된 조치도 아닙니다. 정상 사용자를 차단하지 않도록 전체 정책의 허용과 거부를 함께 검토하세요.

참조