정적 웹사이트 호스팅이 설정된 S3 버킷

S3 웹사이트는 공개할 콘텐츠와 전송 보호 요구를 확인한 뒤 운영하세요.

설명

S3의 정적 웹사이트 호스팅은 정당한 공개 콘텐츠 제공 기능입니다. WebsiteConfiguration만으로 객체 읽기 권한이 생기지는 않지만, 웹사이트 엔드포인트로 제공할 객체는 공개 읽기가 가능해야 합니다. S3 웹사이트 엔드포인트 자체는 HTTPS를 지원하지 않습니다.

잠재적 영향

  • 공개 읽기를 허용한 범위에 설정 파일이나 백업이 섞이면 의도하지 않은 정보가 공개될 수 있습니다.
  • HTTP로 직접 제공하는 콘텐츠는 전송 중 기밀성과 무결성을 TLS로 보호할 수 없습니다. S3에 저장된 콘텐츠를 변경하려면 별도의 쓰기 권한이나 다른 침해 경로가 필요합니다.

해결 방법

  • 필요하지 않은 웹사이트 설정과 공개 허용 정책을 제거하고 퍼블릭 액세스 차단을 활성화하세요.
  • 웹사이트가 필요하면 공개 파일을 분리하고 배포 권한과 읽기 범위를 제한하세요. 민감한 파일이나 비밀정보를 넣지 마세요.
  • HTTPS와 비공개 원본이 필요하면 S3 REST 원본과 CloudFront 원본 액세스 제어(OAC) 같은 구성을 검토하세요. S3 웹사이트 엔드포인트는 CloudFront에서 사용자 지정 원본으로 취급되어 OAC를 사용할 수 없습니다.

예시

변경 전은 객체 공개 읽기 정책을 사용하는 웹사이트 예제입니다. 실제 서비스에는 콘텐츠 업로드가 필요하며 상위 계정의 공개 차단이 적용되면 이 정책은 거부될 수 있습니다. 변경 후는 웹사이트를 더 이상 제공하지 않을 때의 설정이며, 서비스 중단 전에 대체 경로를 준비해야 합니다.

변경 전

yaml
Resources:
  Bucket2:
    Type: AWS::S3::Bucket
    Properties:
      OwnershipControls:
        Rules:
          - ObjectOwnership: BucketOwnerEnforced
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: false
        IgnorePublicAcls: true
        RestrictPublicBuckets: false
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
  WebsiteReadPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref Bucket2
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal: '*'
            Action: s3:GetObject
            Resource: !Sub '${Bucket2.Arn}/*'

ACL은 비활성화하고 정책으로 객체 읽기를 공개합니다. 이 버킷에는 의도적으로 공개할 파일만 배포해야 합니다.

변경 후

yaml
Resources:
  Bucket2:
    Type: AWS::S3::Bucket
    Properties:
      OwnershipControls:
        Rules:
          - ObjectOwnership: BucketOwnerEnforced
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true

같은 버킷에서 웹사이트 설정과 공개 읽기 정책을 제거하고 네 가지 공개 차단 옵션을 켭니다. 이 변경만으로 대체 HTTPS 웹사이트가 구성되는 것은 아닙니다.

참조