AWS S3 정적 웹사이트 호스팅의 공개 범위 점검

정적 사이트 콘텐츠와 공개 권한을 의도한 범위로 제한

설명

S3 정적 웹사이트는 의도적으로 공개 콘텐츠를 제공할 수 있습니다. 웹사이트 설정만으로 객체가 공개되지는 않지만, 공개 읽기 권한이 있으면 웹사이트 엔드포인트에서 콘텐츠를 제공할 수 있습니다. 이 엔드포인트는 HTTPS를 지원하지 않습니다.

잠재적 영향

공개 권한이 과도하면 게시하려던 파일 외의 데이터가 노출될 수 있으며, HTTP 전송은 도청이나 변조에 취약합니다.

해결 방법

호스팅이 불필요하면 웹사이트 구성을 제거하고 공개 권한도 회수하세요. 사이트가 필요하면 공개 콘텐츠를 별도 버킷에 두고 HTTPS를 제공하세요. 비공개 버킷과 CloudFront를 사용할 때는 S3 REST 원본과 적절한 원본 접근 제어를 구성하세요.

예시

다음 발췌 예시는 웹사이트 구성을 제거하고 S3 Block Public Access를 적용합니다. 기존 버킷 정책과 다른 접근 권한도 함께 확인해야 합니다.

변경 전

hcl
resource "aws_s3_bucket" "website_bucket" {
  bucket = "s3-website-test.hashicorp.com"
}

resource "aws_s3_bucket_website_configuration" "website" {
  bucket = aws_s3_bucket.website_bucket.id

  index_document {
    suffix = "index.html"
  }

  error_document {
    key = "error.html"
  }
}

변경 후

hcl
resource "aws_s3_bucket" "website_bucket" {
  bucket = "s3-website-test.hashicorp.com"
}

resource "aws_s3_bucket_public_access_block" "website_bucket" {
  bucket = aws_s3_bucket.website_bucket.id

  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

참조