설명
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
}