튜토리얼: Amazon S3에서 정적 웹사이트 구성

튜토리얼: Amazon S3에서 정적 웹사이트 구성

중요 Amazon S3는 이제 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 모든 버킷의 기본 암호화 수준으로 적용해요. 2023년 1월 5일부터 Amazon S3에 업로드되는 모든 새 객체는 추가 비용이나 성능 영향 없이 자동으로 암호화돼요. S3 버킷 기본 암호화 구성과 새 객체 업로드에 대한 자동 암호화 상태는 CloudTrail 로그, S3 인벤토리, S3 Storage Lens, Amazon S3 콘솔, 그리고 AWS CLI와 AWS SDK의 추가 Amazon S3 API 응답 헤더로 확인할 수 있어요. 자세한 내용은 기본 암호화 FAQ를 참고하세요.

Amazon S3 버킷을 웹사이트처럼 작동하도록 구성할 수 있어요. 이 예시는 Amazon S3에서 웹사이트를 호스팅하는 단계를 안내해요.

출처: 문서

본문

중요 다음 튜토리얼은 Block Public Access를 비활성화해야 해요. Block Public Access를 활성화된 상태로 유지할 것을 권장해요. 네 가지 Block Public Access 설정을 모두 켜둔 채 정적 웹사이트를 호스팅하려면 Amazon CloudFront 오리진 접근 제어(OAC)를 사용할 수 있어요. Amazon CloudFront는 안전한 정적 웹사이트를 설정하는 데 필요한 기능을 제공해요. Amazon S3 정적 웹사이트는 HTTP 엔드포인트만 지원해요. Amazon CloudFront는 HTTPS 같은 추가 보안 헤더를 제공하면서 Amazon S3의 내구성 있는 스토리지를 사용해요. HTTPS는 일반 HTTP 요청을 암호화해 일반적인 사이버 공격으로부터 보호함으로써 보안을 강화해요. 자세한 내용은 Amazon CloudFront Developer Guide의 안전한 정적 웹사이트 시작하기를 참고하세요.

1단계: 버킷 생성 (Step 1: Create a bucket)

다음 안내는 웹사이트 호스팅용 버킷을 만드는 방법의 개요예요. 버킷 생성에 대한 자세한 단계별 안내는 일반 목적 버킷 생성을 참고하세요.

버킷을 만드는 방법은 다음과 같아요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. Create bucket을 선택해요.
  3. Bucket name을 입력해요(예: example.com).
  4. 버킷을 만들 리전을 선택해요. 지연 시간과 비용을 최소화하거나 규제 요구 사항을 충족하려면 지리적으로 가까운 리전을 선택해요. 선택한 리전이 Amazon S3 웹사이트 엔드포인트를 결정해요. 자세한 내용은 웹사이트 엔드포인트를 참고하세요.
  5. 기본 설정을 수락하고 버킷을 만들려면 Create를 선택해요.

2단계: 정적 웹사이트 호스팅 활성화 (Step 2: Enable static website hosting)

버킷을 만든 뒤 버킷의 정적 웹사이트 호스팅을 활성화할 수 있어요. 새 버킷을 만들거나 기존 버킷을 사용할 수 있어요.

정적 웹사이트 호스팅을 활성화하는 방법은 다음과 같아요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. 왼쪽 탐색 창에서 General purpose buckets를 선택해요.
  3. 버킷 목록에서 정적 웹사이트 호스팅을 활성화할 버킷의 이름을 선택해요.
  4. Properties를 선택해요.
  5. Static website hosting 아래에서 Edit를 선택해요.
  6. Use this bucket to host a website를 선택해요.
  7. Static website hosting 아래에서 Enable을 선택해요.
  8. Index document에 인덱스 문서의 파일 이름(일반적으로 index.html)을 입력해요. 인덱스 문서 이름은 대소문자를 구분하며, S3 버킷에 업로드할 HTML 인덱스 문서의 파일 이름과 정확히 일치해야 해요. 버킷을 웹사이트 호스팅용으로 구성할 때 인덱스 문서를 지정해야 해요. 루트 도메인이나 하위 폴더에 요청이 들어오면 Amazon S3는 이 인덱스 문서를 반환해요. 자세한 내용은 인덱스 문서 구성을 참고하세요.
  9. 4XX 클래스 오류에 자신의 사용자 지정 오류 문서를 제공하려면 Error document에 사용자 지정 오류 문서 파일 이름을 입력해요. 오류 문서 이름은 대소문자를 구분하며, S3 버킷에 업로드할 HTML 오류 문서의 파일 이름과 정확히 일치해야 해요. 사용자 지정 오류 문서를 지정하지 않고 오류가 발생하면 Amazon S3는 기본 HTML 오류 문서를 반환해요. 자세한 내용은 사용자 지정 오류 문서 구성을 참고하세요.
  10. (선택 사항) 고급 리디렉션 규칙을 지정하려면 Redirection rules에 규칙을 설명하는 JSON을 입력해요. 예를 들어 요청의 특정 객체 키 이름이나 접두사에 따라 요청을 조건부로 라우팅할 수 있어요. 자세한 내용은 고급 조건부 리디렉션을 사용하도록 리디렉션 규칙 구성을 참고하세요.
  11. Save changes를 선택해요. Amazon S3가 버킷에 정적 웹사이트 호스팅을 활성화해요. 페이지 아래 Static website hosting에서 버킷의 웹사이트 엔드포인트를 볼 수 있어요.
  12. Static website hosting 아래에서 Endpoint를 확인해요. Endpoint는 버킷의 Amazon S3 웹사이트 엔드포인트예요. 버킷을 정적 웹사이트로 구성한 뒤 이 엔드포인트로 웹사이트를 테스트할 수 있어요.

3단계: Block Public Access 설정 편집 (Step 3: Edit Block Public Access settings)

기본적으로 Amazon S3는 계정과 버킷에 대한 공개 접근을 차단해요. 버킷을 정적 웹사이트 호스팅에 사용하려면 다음 단계로 공개 액세스 차단 설정을 편집할 수 있어요.

경고 이 단계를 완료하기 전에 Amazon S3 스토리지에 대한 공개 액세스 차단을 검토해 공개 접근을 허용할 때의 위험을 이해하고 수용했는지 확인해요. 공개 액세스 차단 설정을 꺼서 버킷을 공개로 만들면 인터넷의 누구든지 버킷에 접근할 수 있게 돼요. 버킷에 대한 모든 공개 액세스를 차단할 것을 권장해요.

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. 정적 웹사이트로 구성한 버킷의 이름을 선택해요.
  3. Permissions를 선택해요.
  4. Block public access (bucket settings) 아래에서 Edit를 선택해요.
  5. Block all public access를 해제하고 Save changes를 선택해요. Amazon S3가 버킷의 Block Public Access 설정을 꺼요. 공개 정적 웹사이트를 만들려면 버킷 정책을 추가하기 전에 계정의 Block Public Access 설정을 편집해야 할 수도 있어요. 계정의 Block Public Access 설정이 현재 켜져 있다면 Block public access (bucket settings) 아래에 메모가 표시돼요.

4단계: 버킷 콘텐츠를 공개하도록 버킷 정책 추가 (Step 4: Add a bucket policy that makes your bucket content publicly available)

S3 Block Public Access 설정을 편집한 뒤 버킷에 공개 읽기 접근을 부여하는 버킷 정책을 추가할 수 있어요. 공개 읽기 접근을 부여하면 인터넷의 누구든지 버킷에 접근할 수 있어요.

중요 다음 정책은 예시일 뿐이며 버킷 내용에 전체 접근을 허용해요. 이 단계를 진행하기 전에 Amazon S3 버킷의 파일을 어떻게 안전하게 보호할 수 있나요?를 검토해 S3 버킷의 파일 보안 모범 사례와 공개 접근을 부여할 때의 위험을 이해하는지 확인해요.

  1. Buckets 아래에서 버킷 이름을 선택해요.
  2. Permissions를 선택해요.
  3. Bucket Policy 아래에서 Edit를 선택해요.
  4. 웹사이트에 공개 읽기 접근을 부여하려면 다음 버킷 정책을 복사해 Bucket policy editor에 붙여넣어요.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [ "s3:GetObject" ],
      "Resource": [ "arn:aws:s3:::Bucket-Name/*" ]
    }
  ]
}
  1. Resource를 자신의 버킷 이름으로 업데이트해요. 위 예시 버킷 정책에서 Bucket-Name은 버킷 이름의 자리 표시자예요. 이 버킷 정책을 자신의 버킷에 사용하려면 이 이름을 자신의 버킷 이름과 일치하도록 업데이트해야 해요.
  2. Save changes를 선택해요. 버킷 정책이 성공적으로 추가되었다는 메시지가 나타나요. Policy has invalid resource라는 오류가 보이면 버킷 정책의 버킷 이름이 버킷 이름과 일치하는지 확인해요. 버킷 정책 추가에 대한 자세한 내용은 S3 버킷 정책을 추가하는 방법을 참고하세요. 오류 메시지가 뜨고 버킷 정책을 저장할 수 없다면 계정 및 버킷의 Block Public Access 설정을 확인해 버킷에 공개 접근을 허용하는지 확인해요.

5단계: 인덱스 문서 구성 (Step 5: Configure an index document)

버킷에 정적 웹사이트 호스팅을 활성화할 때 인덱스 문서 이름(예: index.html)을 입력해요. 버킷에 정적 웹사이트 호스팅을 활성화한 뒤에는 이 인덱스 문서 이름과 같은 HTML 파일을 버킷에 업로드해요.

인덱스 문서를 구성하는 방법은 다음과 같아요.

  1. index.html 파일을 만들어요. index.html 파일이 없다면 다음 HTML로 만들 수 있어요.
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>My Website Home Page</title>
  </head>
  <body>
    <h1>Welcome to my website</h1>
    <p>Now hosted on Amazon S3!</p>
  </body>
</html>
  1. 인덱스 파일을 로컬에 저장해요. 인덱스 문서 파일 이름은 Static website hosting 대화 상자에 입력한 인덱스 문서 이름과 정확히 일치해야 해요. 인덱스 문서 이름은 대소문자를 구분해요. 예를 들어 Static website hosting 대화 상자의 Index document 이름에 index.html을 입력했다면, 인덱스 문서 파일 이름도 index.html이어야 하고 Index.html이면 안 돼요.
  2. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  3. 왼쪽 탐색 창에서 General purpose buckets를 선택해요.
  4. 버킷 목록에서 정적 웹사이트 호스팅에 사용할 버킷 이름을 선택해요.
  5. 버킷에 정적 웹사이트 호스팅을 활성화하고 인덱스 문서의 정확한 이름(예: index.html)을 입력해요. 자세한 내용은 웹사이트 호스팅 활성화를 참고하세요. 정적 웹사이트 호스팅을 활성화한 뒤 6단계로 진행해요.
  6. 인덱스 문서를 버킷에 업로드하려면 다음 중 하나를 수행해요. 인덱스 파일을 콘솔의 버킷 목록에 끌어다 놓거나, Upload를 선택해 프롬프트에 따라 인덱스 파일을 선택해 업로드해요. 단계별 안내는 객체 업로드를 참고하세요.
  7. (선택 사항) 다른 웹사이트 콘텐츠를 버킷에 업로드해요.

6단계: 오류 문서 구성 (Step 6: Configure an error document)

버킷에 정적 웹사이트 호스팅을 활성화할 때 오류 문서 이름(예: 404.html)을 입력해요. 버킷에 정적 웹사이트 호스팅을 활성화한 뒤에는 이 오류 문서 이름과 같은 HTML 파일을 버킷에 업로드해요.

오류 문서를 구성하는 방법은 다음과 같아요.

  1. 예를 들어 404.html 같은 오류 문서를 만들어요.
  2. 오류 문서 파일을 로컬에 저장해요. 오류 문서 이름은 대소문자를 구분하며, 정적 웹사이트 호스팅을 활성화할 때 입력한 이름과 정확히 일치해야 해요. 예를 들어 Static website hosting 대화 상자의 Error document 이름에 404.html을 입력했다면, 오류 문서 파일 이름도 404.html이어야 해요.
  3. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  4. 왼쪽 탐색 창에서 General purpose buckets를 선택해요.
  5. 버킷 목록에서 정적 웹사이트 호스팅에 사용할 버킷 이름을 선택해요.
  6. 버킷에 정적 웹사이트 호스팅을 활성화하고 오류 문서의 정확한 이름(예: 404.html)을 입력해요. 자세한 내용은 웹사이트 호스팅 활성화와 사용자 지정 오류 문서 구성을 참고하세요. 정적 웹사이트 호스팅을 활성화한 뒤 6단계로 진행해요.
  7. 오류 문서를 버킷에 업로드하려면 다음 중 하나를 수행해요. 오류 문서 파일을 콘솔의 버킷 목록에 끌어다 놓거나, Upload를 선택해 프롬프트에 따라 인덱스 파일을 선택해 업로드해요. 단계별 안내는 객체 업로드를 참고하세요.

7단계: 웹사이트 엔드포인트 테스트 (Step 7: Test your website endpoint)

버킷의 정적 웹사이트 호스팅을 구성한 뒤 웹사이트 엔드포인트를 테스트할 수 있어요.

참고 Amazon S3는 웹사이트에 대한 HTTPS 접근을 지원하지 않아요. HTTPS를 사용하려면 Amazon CloudFront로 Amazon S3에 호스팅된 정적 웹사이트를 제공할 수 있어요.

자세한 내용은 Amazon S3에 호스팅된 정적 웹사이트를 제공하도록 CloudFront를 사용하는 방법과 뷰어와 CloudFront 사이의 통신에 HTTPS 요구를 참고하세요.

  1. Buckets 아래에서 버킷 이름을 선택해요.
  2. Properties를 선택해요.
  3. 페이지 아래 Static website hosting에서 Bucket website endpoint를 선택해요. 인덱스 문서가 별도 브라우저 창에서 열려요.

이제 Amazon S3에 호스팅된 웹사이트가 생겼어요. 이 웹사이트는 Amazon S3 웹사이트 엔드포인트에서 사용할 수 있어요. 하지만 만들어진 웹사이트의 콘텐츠를 제공하는 데 사용하고 싶은 도메인(예: example.com)이 있을 수 있어요. http://www.example.com과 http://example.com 모두에 대한 요청을 제공하도록 Amazon S3 루트 도메인 지원을 사용하고 싶을 수도 있어요. 이 경우 추가 단계가 필요해요. 예시는 튜토리얼: Route 53에 등록된 사용자 지정 도메인으로 정적 웹사이트 구성을 참고하세요.

8단계: 정리 (Step 8: Clean up)

정적 웹사이트를 학습 목적으로만 만들었다면 요금이 더 이상 발생하지 않도록 할당했던 AWS 리소스를 삭제해요. AWS 리소스를 삭제하면 웹사이트는 더 이상 사용할 수 없어요. 자세한 내용은 일반 목적 버킷 삭제를 참고하세요.

더 알아보기 (Learn more)