자습서: Amazon S3에서 정적 웹 사이트 구성 - Amazon Simple Storage Service

자습서: Amazon S3에서 정적 웹 사이트 구성

중요

이제 Amazon S3가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 Amazon S3 내 모든 버킷 암호화의 기본 수준으로 적용합니다. 2023년 1월 5일부터 Amazon S3로의 모든 새 객체 업로드는 추가 비용 없이 성능에 영향을 미치지 않고 자동으로 암호화됩니다. S3 버킷 기본 암호화 구성에 및 신규 객체 업로드에 대한 자동 암호화 상태는 AWS CloudTrail 로그, S3 인벤토리, S3 스토리지 렌즈, Amazon S3 콘솔에서 사용할 수 있으며, AWS Command Line Interface 및 AWS SDK에서 추가 Amazon S3 API 응답 헤더로도 사용할 수 있습니다. 자세한 내용은 기본 암호화 관련 FAQ를 참조하십시오.

웹 사이트처럼 작동하도록 Amazon S3 버킷을 구성할 수 있습니다. 이 예제에서는 Amazon S3에서 웹 사이트를 호스팅하는 절차를 단계별로 살펴봅니다.

중요

다음 자습서에서는 퍼블릭 액세스 차단을 비활성화해야 합니다. 퍼블릭 액세스 차단 설정을 활성화 상태로 유지하는 것이 좋습니다. 네 개의 퍼블릭 액세스 차단 설정을 모두 활성화하여 정적 웹 사이트를 호스팅하려는 경우 Amazon CloudFront 원본 액세스 제어(OAC)를 사용할 수 있습니다. Amazon CloudFront는 안전한 정적 웹 사이트를 설정하는 데 필요한 기능을 제공합니다. Amazon S3 정적 웹 사이트는 HTTP 엔드포인트만 지원합니다. Amazon CloudFront는 Amazon S3의 내구성 있는 스토리지를 사용하면서 HTTPS와 같은 추가 보안 헤더를 제공합니다. HTTPS는 일반적인 HTTP 요청을 암호화하고 일반적인 사이버 공격으로부터 보호함으로써 보안을 강화합니다. 자세한 내용은 Amazon CloudFront 개발자 안내서안전한 정적 웹 사이트 시작하기를 참조하십시오.

1단계: 버킷 만들기

아래 지침에서는 웹 사이트 호스팅용 버킷을 생성하는 방법에 대한 개요를 제공합니다. 버킷 생성에 대한 자세한 단계별 지침은 버킷 생성 섹션을 참조하세요.

버킷을 만들려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 만들기를 선택합니다.

  3. 버킷 이름(예: example.com)을 입력합니다.

  4. 버킷을 생성하려는 리전을 선택합니다.

    지리적으로 가까운 리전을 선택하면 지연 시간과 요금을 최소화하고, 규제 요건을 해결할 수 있습니다. 선택한 리전에 따라 Amazon S3 웹 사이트 엔드포인트가 결정됩니다. 자세한 내용은 웹 사이트 엔드포인트 섹션을 참조하세요.

  5. 기본 설정을 적용하고 버킷을 생성하려면 [Create]를 선택합니다.

2단계: 정적 웹 사이트 호스팅 활성화

버킷을 생성한 후 버킷에 정적 웹 사이트 호스팅을 활성화할 수 있습니다. 새 버킷을 만들거나 기존 버킷을 사용할 수 있습니다.

정적 웹 사이트 호스팅을 활성화하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 정적 웹 사이트 호스팅을 사용 설정하려는 버킷의 이름을 선택합니다.

  3. [속성(Properties)]을 선택합니다.

  4. 정적 웹 사이트 호스팅(Static website hosting)에서 편집(Edit)을 선택합니다.

  5. 이 버킷을 사용하여 웹 사이트를 호스팅합니다.를 선택합니다.

  6. 정적 웹 사이트 호스팅에서 사용을 선택합니다.

  7. 인덱스 문서(Index document)에 인덱스 문서 이름을 입력합니다(일반적으로 index.html).

    인덱스 문서 이름은 대소문자를 구분하며 S3 버킷에 업로드하려는 HTML 인덱스 문서의 파일 이름과 정확히 일치해야 합니다. 웹 사이트 호스팅용 버킷을 구성하는 경우 인덱스 문서를 지정해야 합니다. 루트 도메인이나 임의의 하위 폴더로 요청이 전송되면 Amazon S3가 이 인덱스 문서를 반환합니다. 자세한 내용은 인덱스 문서 구성 섹션을 참조하세요.

  8. 4XX 클래스 오류에 대한 사용자 지정 오류 문서를 제공하려면 [오류 문서(Error document)]에 사용자 지정 오류 문서 파일 이름을 입력합니다.

    오류 문서 이름은 대소문자를 구분하며 S3 버킷에 업로드하려는 HTML 오류 문서의 파일 이름과 정확히 일치해야 합니다. 사용자 지정 오류 문서를 지정하지 않았는데 오류가 발생하면 Amazon S3에서 기본 HTML 오류 문서를 반환합니다. 자세한 내용은 사용자 지정 오류 문서 구성 단원을 참조하십시오.

  9. (선택 사항) 고급 리디렉션 규칙을 지정하려면 리디렉션 규칙(Redirection rules)에 JSON을 입력하여 규칙을 설명합니다.

    예를 들어, 요청의 특정 객체 키 이름 또는 접두사에 따라 조건부로 요청을 라우팅할 수 있습니다. 자세한 내용은 고급 조건부 리디렉션을 사용하도록 리디렉션 규칙 구성 섹션을 참조하세요.

  10. [변경 사항 저장(Save changes)]을 선택합니다.

    Amazon S3는 버킷에 대한 정적 웹 사이트 호스팅을 지원합니다. 페이지 하단의 정적 웹 사이트 호스팅(Static website hosting)에 버킷의 웹 사이트 엔드포인트가 표시됩니다.

  11. 정적 웹 사이트 호스팅에서 엔드포인트를 기록합니다.

    엔드포인트는 버킷의 Amazon S3 웹 사이트 엔드포인트입니다. 버킷을 정적 웹 사이트로 구성한 후 이 엔드포인트를 사용하여 웹 사이트를 테스트할 수 있습니다.

3단계: 퍼블릭 액세스 차단 설정 편집

기본적으로 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 스토리지에 대한 퍼블릭 액세스 차단을 검토하여 퍼블릭 액세스 허용과 관련된 위험을 이해하고 이에 동의하는지 확인하십시오. 퍼블릭 액세스 차단 설정을 해제하여 버킷을 퍼블릭으로 만들면 인터넷상의 모든 사용자가 버킷에 액세스할 수 있습니다. 버킷에 대한 모든 퍼블릭 액세스를 차단하는 것이 좋습니다.

    Amazon S3은 버킷에 대한 퍼블릭 액세스 차단 설정을 해제합니다. 정적 퍼블릭 웹 사이트를 생성하려면 버킷 정책을 추가하기 전에 계정에 대한 퍼블릭 액세스 차단 설정을 편집해야 할 수도 있습니다. 퍼블릭 액세스 차단에 대한 계정 설정이 현재 설정되어 있는 경우 퍼블릭 액세스 차단(버킷 설정)(Block public access (bucket settings)) 아래에 메모가 표시됩니다.

4단계: 버킷 콘텐츠를 공개적으로 사용 가능하도록 설정하는 버킷 정책 추가

S3 퍼블릭 액세스 차단 설정을 편집한 후에는 버킷 정책을 추가하여 버킷에 퍼블릭 읽기 액세스 권한을 부여할 수 있습니다. 퍼블릭 읽기 액세스 권한을 부여하면 인터넷의 모든 사용자가 버킷에 액세스할 수 있습니다.

중요

다음 정책은 하나의 예일 뿐이며 버킷의 콘텐츠에 대한 전체 액세스를 허용합니다. 이 단계를 진행하기 전에 Amazon S3 버킷에 있는 파일을 보호하려면 어떻게 해야 하나요?를 검토하여 S3 버킷의 파일 보안을 위한 모범 사례 및 퍼블릭 액세스 권한 부여와 관련된 위험을 파악할 수 있습니다.

  1. 버킷에서 버킷의 이름을 선택합니다.

  2. Permissions를 선택합니다.

  3. 버킷 정책(Bucket Policy)에서 편집(Edit)을 선택합니다.

  4. 웹 사이트에 대한 퍼블릭 읽기 액세스 권한을 부여하려면 다음 버킷 정책을 복사한 후 버킷 정책 편집기에 붙여 넣습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::Bucket-Name/*" ] } ] }
  5. Resource를 버킷 이름으로 업데이트합니다.

    앞의 버킷 정책 예제에서 Bucket-Name은 버킷 이름의 자리 표시자입니다. 자체 버킷에 이 버킷 정책을 사용하려면 자체 버킷 이름과 일치하도록 이 이름을 업데이트해야 합니다.

  6. [변경 사항 저장(Save changes)]을 선택합니다.

    버킷 정책이 성공적으로 추가되었음을 나타내는 메시지가 나타납니다.

    Policy has invalid resource라는 오류가 표시되면 버킷 정책의 버킷 이름이 사용자의 버킷 이름과 일치하는지 확인합니다. 버킷 정책 추가에 대한 자세한 내용은 S3 버킷 정책을 추가하려면 어떻게 해야 하나요?를 참조하십시오.

    오류 메시지가 나타나고 버킷 정책을 저장할 수 없는 경우 계정 및 버킷의 퍼블릭 액세스 차단 설정에서 버킷에 대한 퍼블릭 액세스를 허용하는지 확인합니다.

5단계: 인덱스 문서 구성

버킷용 정적 웹 사이트 호스팅을 활성화할 때 인덱스 문서의 이름(예: 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>
  2. 인덱스 파일을 로컬에 저장합니다.

    인덱스 문서 파일 이름은 정적 웹 사이트 호스팅 대화 상자에 입력한 인덱스 문서 이름과 정확히 일치해야 합니다. 인덱스 문서 이름은 대/소문자를 구분합니다. 예를 들어 정적 웹 사이트 호스팅 대화 상자에서 인덱스 문서 이름에 index.html을 입력하는 경우, 인덱스 문서 파일은 index.html이 아니라 Index.html이어야 합니다.

  3. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  4. 버킷 목록에서 정적 웹 사이트를 호스팅하는 데 사용할 버킷의 이름을 선택합니다.

  5. 버킷에 정적 웹 사이트 호스팅을 사용 설정하고 인덱스 문서의 정확한 이름(예: index.html)을 입력합니다. 자세한 내용은 웹 사이트 호스팅 사용 설정 섹션을 참조하세요.

    정적 웹 사이트 호스팅을 사용 설정한 후 6단계로 이동합니다.

  6. 버킷에 인덱스 문서를 업로드하려면 다음 중 하나를 수행합니다.

    • 인덱스 파일을 콘솔 버킷 목록으로 끌어다 놓습니다.

    • 업로드를 선택하고 프롬프트의 메시지에 따라 인덱스 파일을 선택하고 업로드합니다.

    단계별 지침은 객체 업로드 섹션을 참조하세요.

  7. (선택 사항) 버킷에 다른 웹 사이트 콘텐츠를 업로드합니다.

6단계: 오류 문서 구성

버킷용 정적 웹 사이트 호스팅을 활성화할 때 오류 문서의 이름(예: 404.html)을 입력합니다. 버킷용 정적 웹 사이트 호스팅을 사용 설정한 후 오류 문서 이름이 있는 HTML 파일을 버킷에 업로드합니다.

오류 문서 구성
  1. 오류 문서를 생성합니다(예: 404.html).

  2. 오류 문서 파일을 로컬에 저장합니다.

    오류 문서 이름은 대/소문자를 구분하며 정적 웹 사이트 호스팅을 사용하도록 설정할 때 입력한 이름과 정확히 일치해야 합니다. 예를 들어 정적 웹 사이트 호스팅 대화 상자에서 오류 문서 이름에 404.html을 입력하는 경우, 오류 문서 파일은 404.html이어야 합니다.

  3. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  4. 버킷 목록에서 정적 웹 사이트를 호스팅하는 데 사용할 버킷의 이름을 선택합니다.

  5. 버킷에 정적 웹 사이트 호스팅을 사용 설정하고 오류 문서의 정확한 이름(예: 404.html)을 입력합니다. 자세한 내용은 웹 사이트 호스팅 사용 설정사용자 지정 오류 문서 구성 단원을 참조하세요.

    정적 웹 사이트 호스팅을 사용 설정한 후 6단계로 이동합니다.

  6. 버킷에 오류 문서를 업로드하려면 다음 중 하나를 수행합니다.

    • 오류 문서 파일을 콘솔 버킷 목록으로 끌어다 놓습니다.

    • 업로드를 선택하고 프롬프트의 메시지에 따라 인덱스 파일을 선택하고 업로드합니다.

    단계별 지침은 객체 업로드 섹션을 참조하세요.

7단계: 웹 사이트 엔드포인트 테스트

버킷에 대한 정적 웹 사이트 호스팅을 구성한 후 웹 사이트 엔드포인트를 테스트할 수 있습니다.

참고

Amazon S3에서는 웹 사이트에 대한 HTTPS 액세스를 지원하지 않습니다. HTTPS를 사용하려는 경우 Amazon CloudFront를 사용하여 Amazon S3에서 호스팅되는 정적 웹 사이트를 제공할 수 있습니다.

자세한 내용은 CloudFront를 사용하여 Amazon S3에 호스팅된 정적 웹 사이트를 제공하려면 어떻게 해야 하나요?최종 사용자와 CloudFront 간의 통신에 HTTPS 요구를 참조하십시오.

  1. 버킷에서 버킷의 이름을 선택합니다.

  2. [속성(Properties)]을 선택합니다.

  3. 페이지 하단의 정적 웹 사이트 호스팅(Static website hosting)에서 버킷 웹 사이트 엔드포인트(Bucket website endpoint)를 선택합니다.

    인덱스 문서가 별도의 브라우저 창에서 열립니다.

이제 Amazon S3에 웹 사이트가 호스팅되었습니다. 이 웹 사이트는 Amazon S3 웹 사이트 엔드포인트를 통해 제공됩니다. 하지만, 사용자가 만든 웹 사이트의 콘텐츠를 표시하기 위해 example.com과 같은 도메인을 사용하고자 할 수도 있습니다. 또한 Amazon S3의 루트 도메인 지원을 통해 http://www.example.comhttp://example.com 모두에 대한 요청을 처리하고자 할 수도 있습니다. 이 경우 다음 단계를 따라야 합니다. 관련 예제는 자습서: Route 53에 등록된 사용자 지정 도메인을 사용하여 정적 웹 사이트 구성 섹션을 참조하세요

8단계: 정리

실습용으로만 정적 웹 사이트를 생성한 경우에는 요금이 발생하지 않도록 할당한 AWS 리소스를 삭제합니다. AWS 리소스를 삭제한 후에는 웹 사이트를 사용할 수 없습니다. 자세한 내용은 버킷 삭제 단원을 참조하십시오.