

# CloudFront 시작하기
<a name="GettingStarted"></a>

이 섹션의 주제들은 Amazon CloudFront에서 콘텐츠 전송을 시작하는 방법을 보여 줍니다.

[AWS 계정 설정](setting-up-cloudfront.md) 주제에서는 다음 튜토리얼의 사전 요구 사항(예: AWS 계정 생성 및 관리 액세스 권한이 있는 사용자 생성)을 설명합니다.

기본 배포 튜토리얼에서는 Amazon S3 오리진에 인증된 요청을 전송하기 위해 오리진 액세스 제어(OAC)를 설정하는 방법을 보여 줍니다.

보안 정적 웹 사이트 튜토리얼에서는 Amazon S3 오리진에서 OAC를 사용하여 도메인 이름에 대한 안전한 정적 웹 사이트를 생성하는 방법을 보여 줍니다. 이 튜토리얼에서는 구성 및 배포에 Amazon CloudFront(CloudFront) 템플릿을 사용합니다.

**Topics**
+ [AWS 계정 설정](setting-up-cloudfront.md)
+ [CloudFront 표준 배포 시작](GettingStarted.SimpleDistribution.md)
+ [표준 배포 시작(AWS CLI)](get-started-cli-tutorial.md)
+ [안전한 정적 웹 사이트 시작하기](getting-started-secure-static-website-cloudformation-template.md)

# AWS 계정 설정
<a name="setting-up-cloudfront"></a>

이 주제에서는 AWS 계정 생성과 같이 Amazon CloudFront 사용을 준비하기 위한 예비 단계를 설명합니다.

**Topics**
+ [AWS 계정에 가입](#sign-up-for-aws)
+ [관리자 액세스 권한이 있는 사용자 생성](#create-an-admin)
+ [CloudFront에 액세스하는 방법 선택](#introduction-accessing-cloudfront)

## AWS 계정에 가입
<a name="sign-up-for-aws"></a>

AWS 계정이 없는 경우 다음 절차에 따라 계정을 생성합니다.

**AWS 계정에 가입하려면**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)을 엽니다.

1. 온라인 지시 사항을 따르세요.

   등록 절차 중 전화 또는 텍스트 메시지를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

   *AWS 계정 루트 사용자*에 가입하면 AWS 계정루트 사용자가 만들어집니다. 루트 사용자에게는 계정의 모든 AWS 서비스및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 [루트 사용자 액세스 권한이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)을 수행하는 것입니다.

가입 프로세스가 완료되면 AWS은 사용자에게 확인 이메일을 전송합니다. 언제든지 [https://aws.amazon.com/](https://aws.amazon.com/)으로 이동하고 **내 계정**을 선택하여 현재 계정 활동을 확인하고 계정을 관리할 수 있습니다.

## 관리자 액세스 권한이 있는 사용자 생성
<a name="create-an-admin"></a>

AWS 계정에 가입하고 AWS 계정 루트 사용자에 보안 조치를 한 다음, AWS IAM Identity Center을 활성화하고 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 생성합니다.

**귀하의 AWS 계정 루트 사용자보호**

1.  **루트 사용자**를 선택하고 AWS 계정 이메일 주소를 입력하여 [AWS Management Console](https://console.aws.amazon.com/)에 계정 소유자로 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

   루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In사용 설명서*의 [루트 사용자로 로그인](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)을 참조하세요.

1. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

   지침은 *IAM 사용 설명서*의 [AWS 계정루트 사용자용 가상 MFA 디바이스 활성화(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)를 참조하세요.

**관리자 액세스 권한이 있는 사용자 생성**

1. IAM Identity Center를 활성화합니다.

   지침은 *AWS IAM Identity Center사용 설명서*의 [AWS IAM Identity Center설정](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)을 참조하세요.

1. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

   IAM Identity Center 디렉터리를 ID 소스로 사용하는 방법에 대한 자습서는 *AWS IAM Identity Center사용 설명서*의 [기본 IAM Identity Center 디렉터리로 사용자 액세스 구성](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)을 참조하세요.

**관리 액세스 권한이 있는 사용자로 로그인**
+ IAM IDentity Center 사용자로 로그인하려면 IAM Identity Center 사용자를 생성할 때 이메일 주소로 전송된 로그인 URL을 사용합니다.

  IAM Identity Center 사용자로 로그인하는 데 도움이 필요한 경우 *AWS Sign-In 사용 설명서*의 [AWS액세스 포털에 로그인](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)을 참조하세요.

**추가 사용자에게 액세스 권한 할당**

1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)를 참조하세요.

1. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [그룹 추가](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)를 참조하세요.

## CloudFront에 액세스하는 방법 선택
<a name="introduction-accessing-cloudfront"></a>

Amazon CloudFront에 액세스하는 방법은 다음과 같습니다.
+ **AWS Management Console** – 이 가이드의 절차는 AWS Management Console을 사용하여 태스크를 수행하는 방법을 설명합니다.
+ **AWS SDK** – AWS에서 SDK를 제공하는 프로그래밍 언어를 사용하는 경우 SDK를 사용하여 CloudFront에 액세스할 수 있습니다. SDK는 인증을 단순화하고, 개발 환경에 쉽게 통합되며, CloudFront 명령에 액세스할 수 있도록 합니다. 자세한 내용은 [AWS SDK와 함께 CloudFront 사용](sdk-general-information-section.md) 섹션을 참조하세요.
+ **CloudFront API** – SDK를 사용할 수 없는 프로그래밍 언어를 사용하는 경우 API 작업 및 API 요청 방법에 대한 자세한 내용을 [Amazon CloudFront API 참조](https://docs.aws.amazon.com/cloudfront/latest/APIReference/Welcome.html)에서 확인하십시오.
+ **AWS CLI** - AWS Command Line Interface(AWS CLI)는 AWS 서비스를 관리하는 통합 도구입니다. AWS CLI 설치 및 구성 방법에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서에서 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.
+ **Tools for Windows PowerShell** - Windows PowerShell을 사용한 경험이 있다면 AWS Tools for Windows PowerShell을 사용하는 것이 좋습니다. 자세한 내용은 *AWS Tools for PowerShell 사용자 가이드*에서 [AWS Tools for Windows PowerShell 설치](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)를 참조하세요.

# CloudFront 표준 배포 시작
<a name="GettingStarted.SimpleDistribution"></a>

이 섹션에 나온 절차에서는 CloudFront를 사용하여 다음을 수행하는 표준 배포 설정 방법을 보여줍니다.
+ 배포 오리진으로 사용할 S3 버킷을 생성합니다.
+ 객체의 원래 버전을 Amazon Simple Storage Service(S3) 버킷에 저장합니다.
+ 오리진 액세스 제어(OAC)를 사용하여 Amazon S3 오리진에 인증된 요청을 전송합니다. OAC는 CloudFront를 통해 요청을 전송하여 최종 사용자가 S3 버킷에 직접 액세스하는 것을 방지합니다. OAC에 대한 자세한 내용은 [Amazon S3 오리진에 대한 액세스 제한](private-content-restricting-access-to-s3.md)을 참조합니다.
+ 객체에 대한 URL에 CloudFront 도메인 이름을 사용합니다(예: `https://d111111abcdef8.cloudfront.net/index.html`).
+ 기본 24시간(최소 시간 0초) 동안 CloudFront 엣지 로케이션에 객체를 보관합니다.

이 중 대부분은 CloudFront 배포를 생성할 때 자동으로 구성됩니다.

**Topics**
+ [사전 조건](#GettingStartedSignup)
+ [Amazon S3 버킷 생성](#GettingStartedCreateBucket)
+ [버킷에 콘텐츠 업로드](#GettingStartedUploadContent)
+ [OAC와 함께 Amazon S3 오리진을 사용하는 CloudFront 배포 생성](#GettingStartedCreateDistribution)
+ [CloudFront를 통해 콘텐츠에 액세스](#GettingStartedAccessingDistributions)
+ [정리](#GettingStartedDistributionCleanup)
+ [기본 배포 향상](#GettingStartedDistributionNotes)

## 사전 조건
<a name="GettingStartedSignup"></a>

시작하기 전에 먼저 [AWS 계정 설정](setting-up-cloudfront.md)의 단계를 완료해야 합니다.

## Amazon S3 버킷 생성
<a name="GettingStartedCreateBucket"></a>

Amazon S3 버킷은 파일(객체) 또는 폴더를 위한 컨테이너입니다. CloudFront는 S3 버킷을 소스로 사용하여 거의 모든 유형의 파일을 배포할 수 있습니다. 예를 들어 CloudFront에서는 텍스트, 이미지 및 비디오를 배포할 수 있습니다. Amazon S3에 저장할 수 있는 데이터의 양에는 최대값이 없습니다.

이 자습서에서는 사용자는 기본 웹페이지를 생성하는 데 사용할 샘플 `hello world` 파일이 포함된 S3 버킷을 생성합니다.

**버킷을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 이 시작하기에서는 hello world 샘플을 사용하는 것이 좋습니다. *hello world* 웹 페이지 [hello-world-html.zip](samples/hello-world-html.zip)을 다운로드합니다. 압축을 풀고 브라우저를 실행 중인 데스크톱과 같은 편리한 위치에 `css` 폴더와 `index` 파일을 저장합니다.

1. **버킷 생성**을 선택합니다.

1. Amazon Simple Storage Service 사용 설명서의 [범용 버킷 이름 지정 규칙](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html#general-purpose-bucket-names)을 준수하는 고유한 **버킷 이름**을 입력합니다.**

1. **리전**의 경우 지리적으로 가까운 AWS 리전을 선택하는 것이 좋습니다. 이렇게 하면 지연 시간이 줄어들고 비용이 줄어듭니다.
   + 다른 리전을 선택하는 것도 효과가 있습니다. 예를 들어 규제 요구 사항을 해결하기 위해 이 작업을 수행할 수 있습니다.

1. 다른 모든 설정은 기본값으로 두고 **버킷 생성**(Create bucket)을 선택합니다.

## 버킷에 콘텐츠 업로드
<a name="GettingStartedUploadContent"></a>

Amazon S3 버킷을 생성한 후에는 압축이 풀린 `hello world` 파일의 콘텐츠를 버킷에 업로드합니다. (이 파일을 [Amazon S3 버킷 생성](#GettingStartedCreateBucket)에 다운로드하고 압축을 풀었습니다.)

**Amazon S3에 콘텐츠를 업로드하려면**

1. **범용 버킷** 섹션에서 새 버킷의 이름을 선택합니다.

1. **업로드**를 선택합니다.

1. **업로드** 페이지에서 `css` 폴더와 `index` 파일을 드롭 영역에 끌어다 놓습니다.

1. 다른 모든 설정은 기본값으로 두고 **업로드**를 선택합니다.

## OAC와 함께 Amazon S3 오리진을 사용하는 CloudFront 배포 생성
<a name="GettingStartedCreateDistribution"></a>

이 자습서에서, 사용자는 오리진 액세스 제어(OAC)가 있는 Amazon S3 오리진을 사용하는 CloudFront 배포를 생성합니다. OAC를 사용하면 Amazon S3 오리진에 인증된 요청을 안전하게 전송할 수 있습니다. OAC에 대한 자세한 내용은 [Amazon S3 오리진에 대한 액세스 제한](private-content-restricting-access-to-s3.md)을 참조합니다.<a name="GettingStartedCreateDistributionProcedure"></a>

**OAC를 사용하는 Amazon S3 오리진으로 CloudFront 배포를 생성하려는 경우**

1. [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다

1. **배포 생성**을 선택합니다.

1. 표준 배포에 **배포 이름**을 입력합니다. 이름은 태그로서 `Name` 키의 값으로 표시됩니다. 이 값은 나중에 변경할 수 있습니다. 표준 배포에 최대 50개의 태그를 추가할 수 있습니다. 자세한 내용은 [배포 태깅](tagging.md) 섹션을 참조하세요.

1. **단일 웹사이트 또는 앱**, **다음**을 선택합니다.

1. **다음**을 선택합니다.

1. **오리진 유형** 페이지에서 **Amazon S3**를 선택합니다.

1. **S3 오리진**에서 ** S3 찾아보기**를 선택하고 이 자습서용으로 생성한 S3 버킷을 선택합니다.

1. **설정**에서 **권장 오리진 설정 사용**을 선택합니다. CloudFront는 오리진 액세스 제어(OAC) 설정을 포함하여 Amazon S3 오리진에 대한 기본 권장 캐시 및 오리진 설정을 사용합니다. 권장 설정에 대한 자세한 내용은 [사전 구성된 배포 설정 참조](template-preconfigured-origin-settings.md) 섹션을 참조하시기 바랍니다.

1. **다음**을 선택합니다.

1. **보안 보호 활성화** 페이지에서 AWS WAF 보안 보호 기능을 사용 설정할지 여부를 선택합니다.

1. **다음**을 선택합니다.

1. **배포 생성**을 선택합니다. CloudFront는 S3 버킷 정책을 자동으로 업데이트합니다.

1. 새 배포에 대한 **세부 정보** 섹션을 검토합니다. 배포가 완료되면 **마지막 수정** 필드가 **배포 중**에서 날짜 및 시간으로 변경됩니다.

1. CloudFront가 배포에 할당하는 도메인 이름을 기록해 둡니다. `d111111abcdef8.cloudfront.net`와 유사하게 표시됩니다.

이 자습서의 배포 및 S3 버킷을 프로덕션 환경에서 사용하기 전에 먼저 특정 요구 사항에 맞게 구성해야 합니다. 프로덕션 환경에서 액세스를 구성하는 방법에 대한 자세한 내용은 [보안 액세스 구성 및 콘텐츠에 대한 액세스 제한](SecurityAndPrivateContent.md) 섹션을 참조합니다.

## CloudFront를 통해 콘텐츠에 액세스
<a name="GettingStartedAccessingDistributions"></a>

CloudFront를 통해 콘텐츠에 액세스하려면 CloudFront 배포의 도메인 이름과 콘텐츠의 기본 페이지를 결합합니다. (배포 도메인 이름을 [OAC와 함께 Amazon S3 오리진을 사용하는 CloudFront 배포 생성](#GettingStartedCreateDistribution)에 기록했습니다.)
+ 배포 도메인 이름은 `d111111abcdef8.cloudfront.net`와 같을 수 있습니다.
+  웹 사이트의 기본 페이지 경로는 일반적으로 `/index.html`입니다.

따라서 CloudFront를 통해 콘텐츠에 액세스하기 위한 URL은 다음과 같을 수 있습니다.

`https://d111111abcdef8.cloudfront.net/index.html`.

이전 단계를 수행했고 **hello world 웹 페이지를 사용했다면 **Hello world\$1**라고 써있는 웹 페이지가 표시됩니다.

이 S3 버킷에 더 많은 콘텐츠를 업로드하는 경우 CloudFront 배포 도메인 이름과 S3 버킷의 객체 경로를 결합하여 CloudFront를 통해 콘텐츠에 액세스할 수 있습니다. 예를 들어 `new-page.html`이라는 새 파일을 S3 버킷의 루트에 업로드하는 경우 URL은 다음과 같습니다.

`https://d111111abcdef8.cloudfront.net/new-page.html`.

## 정리
<a name="GettingStartedDistributionCleanup"></a>

실습용으로만 배포 및 S3 버킷을 생성한 경우에는 요금이 발생하지 않도록 삭제합니다. 먼저 배포를 삭제합니다. 자세한 내용은 다음 링크를 참조하세요.
+ [배포 삭제](HowToDeleteDistribution.md)
+ [버킷 삭제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)

## 기본 배포 향상
<a name="GettingStartedDistributionNotes"></a>

이 시작하기 튜토리얼에서는 배포 생성에 필요한 최소한의 프레임워크를 제공합니다. 다음과 같은 개선 사항을 살펴보는 것이 좋습니다.
+ CloudFront 프라이빗 콘텐츠 기능을 사용하여 Amazon S3 버킷의 콘텐츠에 대한 액세스를 제한할 수 있습니다. 비공개 콘텐츠를 배포하는 방법에 대한 자세한 내용은 [서명된 URL과 서명된 쿠키를 사용하여 프라이빗 콘텐츠 제공](PrivateContent.md)를 참조하십시오.
+ 사용자 지정 도메인 이름(예: `d111111abcdef8.cloudfront.net` 대신 `www.example.com`)을 사용하도록 CloudFront 배포를 구성할 수 있습니다. 자세한 내용은 [사용자 지정 URL 사용](CNAMEs.md) 섹션을 참조하세요.
+ 이 자습서에서는 오리진 액세스 제어(OAC)가 있는 Amazon S3 오리진을 사용합니다. 하지만 오리진이 [웹 사이트](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteEndpoints.html) 엔드포인트로 구성된 S3 버킷인 경우에는 OAC를 사용할 수 없습니다. 이 경우에는 CloudFront를 사용자 지정 오리진으로 사용하여 버킷을 설정해야 합니다. 자세한 내용은 [웹 사이트 엔드포인트로 구성된 Amazon S3 버킷 사용](DownloadDistS3AndCustomOrigins.md#concept_S3Origin_website) 섹션을 참조하세요. OAC에 대한 자세한 내용은 [Amazon S3 오리진에 대한 액세스 제한](private-content-restricting-access-to-s3.md)을 참조합니다.

# 표준 배포 시작(AWS CLI)
<a name="get-started-cli-tutorial"></a>

이 섹션에 나온 절차에서는 CloudFront에서 AWS CLI를 사용하여 다음을 수행하는 기본 구성 설정 방법을 보여줍니다.
+ 배포 오리진으로 사용할 Amazon S3 버킷 생성.
+ 객체의 원래 버전을 S3 버킷에 저장.
+ 오리진 액세스 제어(OAC)를 사용하여 Amazon S3 오리진에 인증된 요청 전송. OAC는 CloudFront를 통해 요청을 전송하여 최종 사용자가 S3 버킷에 직접 액세스하는 것을 방지합니다. OAC에 대한 자세한 내용은 [Amazon S3 오리진에 대한 액세스 제한](private-content-restricting-access-to-s3.md)을 참조합니다.
+ 객체에 대한 URL에 CloudFront 도메인 이름(예: `https://d111111abcdef8.cloudfront.net/index.html`) 사용.
+ 기본 24시간(최소 시간 0초) 동안 CloudFront 엣지 로케이션에 객체 보관.

이러한 옵션은 대부분 사용자 지정이 가능합니다. CloudFront 배포 옵션을 사용자 지정하는 방법은 [배포 생성](distribution-web-creating-console.md) 단원을 참조하세요.

## 사전 조건
<a name="get-started-cli-prereqs"></a>

시작하기 전에 먼저 [AWS 계정 설정](setting-up-cloudfront.md)의 단계를 완료해야 합니다.

AWS CLI를 설치하고 자격 증명을 사용하여 구성. 자세한 내용은 *AWS CLI 사용 설명서*에서 [AWS CLI 시작하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)를 참조하세요.



## Amazon S3 버킷 생성
<a name="get-started-cli-create-bucket"></a>

Amazon S3 버킷은 파일(객체) 또는 폴더를 위한 컨테이너입니다. CloudFront는 S3 버킷을 소스로 사용하여 거의 모든 유형의 파일을 배포할 수 있습니다. 예를 들어 CloudFront에서는 텍스트, 이미지 및 비디오를 배포할 수 있습니다. Amazon S3에 저장할 수 있는 데이터의 양에는 최대값이 없습니다.

이 자습서에서는 S3 버킷을 생성하고 기본 웹페이지를 생성하는 데 사용할 HTML 파일을 업로드합니다.

```
aws s3 mb s3://amzn-s3-demo-bucket/ --region us-east-1
```

*amzn-s3-demo-bucket*을 전역적으로 고유한 버킷 이름으로 바꿉니다. AWS 리전의 경우 지리적으로 가까운 리전을 선택하는 것이 좋습니다. 이렇게 하면 지연 시간과 비용이 줄어듭니다. 물론 다른 리전을 선택하는 것도 가능합니다. 예를 들어 규제 요구 사항을 해결하기 위해 이렇게 할 수 있습니다.

## 버킷에 콘텐츠 업로드
<a name="get-started-cli-upload-content"></a>

이 자습서에서는 기본적인 "Hello World" 웹페이지의 샘플 콘텐츠 파일을 다운로드하고 추출합니다.

```
# Create a temporary directory
mkdir -p ~/cloudfront-demo

# Download the sample Hello World files
curl -o ~/cloudfront-demo/hello-world-html.zip https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/samples/hello-world-html.zip

# Extract the zip file
unzip ~/cloudfront-demo/hello-world-html.zip -d ~/cloudfront-demo/hello-world
```

이렇게 하면 `index.html` 파일과 `css` 폴더가 있는 디렉터리가 생성됩니다. 이러한 파일을 S3 버킷에 업로드합니다.

```
aws s3 cp ~/cloudfront-demo/hello-world/ s3://amzn-s3-demo-bucket/ --recursive
```

## 오리진 액세스 제어(OAC) 생성
<a name="get-started-cli-create-oac"></a>

이 자습서에서는 오리진 액세스 제어(OAC)를 생성합니다. OAC를 사용하면 Amazon S3 오리진에 인증된 요청을 안전하게 전송할 수 있습니다. OAC에 대한 자세한 내용은 [Amazon S3 오리진에 대한 액세스 제한](private-content-restricting-access-to-s3.md)을 참조합니다.

```
aws cloudfront create-origin-access-control \
    --origin-access-control-config Name="oac-for-s3",SigningProtocol=sigv4,SigningBehavior=always,OriginAccessControlOriginType=s3
```

출력의 OAC ID를 환경 변수로 저장합니다. 예시 값을 실제 OAC ID로 바꿉니다. 다음 단계에서 이 값을 사용합니다.

```
OAC_ID="E1ABCD2EFGHIJ"
```

## 표준 배포 생성
<a name="get-started-cli-create-classic"></a>

`distribution-config.json`이라는 이름으로 배포 구성 파일을 만듭니다. `Id`, `DomainName`, `TargetOriginId` 값을 포함해 예시 버킷 이름을 실제 버킷 이름으로 바꿉니다.

```
cat > distribution-config.json << EOF
{
    "CallerReference": "cli-example-$(date +%s)",
    "Origins": {
        "Quantity": 1,
        "Items": [
            {
                "Id": "S3-amzn-s3-demo-bucket",
                "DomainName": "amzn-s3-demo-bucket.s3.amazonaws.com",
                "S3OriginConfig": {
                    "OriginAccessIdentity": ""
                },
                "OriginAccessControlId": "$OAC_ID"
            }
        ]
    },
    "DefaultCacheBehavior": {
        "TargetOriginId": "S3-amzn-s3-demo-bucket",
        "ViewerProtocolPolicy": "redirect-to-https",
        "AllowedMethods": {
            "Quantity": 2,
            "Items": ["GET", "HEAD"],
            "CachedMethods": {
                "Quantity": 2,
                "Items": ["GET", "HEAD"]
            }
        },
        "DefaultTTL": 86400,
        "MinTTL": 0,
        "MaxTTL": 31536000,
        "Compress": true,
        "ForwardedValues": {
            "QueryString": false,
            "Cookies": {
                "Forward": "none"
            }
        }
    },
    "Comment": "CloudFront distribution for S3 bucket",
    "Enabled": true
}
EOF
```

표준 배포를 생성합니다.

```
aws cloudfront create-distribution --distribution-config file://distribution-config.json
```

출력의 배포 ID와 도메인 이름을 환경 변수로 저장합니다. 예제 값을 사용자의 값으로 바꿉니다. 이 자습서 뒷부분에서 이 정보가 필요합니다.

```
DISTRIBUTION_ID="EABCD1234XMPL"
DOMAIN_NAME="d111111abcdef8.cloudfront.net"
```

이 자습서의 배포 및 S3 버킷을 프로덕션 환경에서 사용하기 전에 먼저 특정 요구 사항에 맞게 구성해야 합니다. 프로덕션 환경에서 액세스를 구성하는 방법에 대한 자세한 내용은 [보안 액세스 구성 및 콘텐츠에 대한 액세스 제한](SecurityAndPrivateContent.md) 섹션을 참조합니다.

## S3 버킷 정책 업데이트
<a name="get-started-cli-update-bucket-policy"></a>

CloudFront가 객체에 액세스할 수 있도록 S3 버킷 정책을 업데이트합니다. 예시 버킷 이름을 실제 버킷 이름으로 바꿉니다.

```
# Get your AWS account ID
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

# Create the bucket policy
cat > bucket-policy.json << EOF
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::$ACCOUNT_ID:distribution/$DISTRIBUTION_ID"
                }
            }
        }
    ]
}
EOF

# Apply the bucket policy
aws s3api put-bucket-policy \
    --bucket amzn-s3-demo-bucket \
    --policy file://bucket-policy.json
```

## 배포 작업 확인
<a name="get-started-cli-confirm-deployment"></a>

배포를 생성한 후 배포를 완료하는 데 다소 시간이 걸립니다. 배포 상태가 `InProgress`에서 `Deployed`로 변경되면 다음 단계로 진행합니다.

```
aws cloudfront get-distribution --id $DISTRIBUTION_ID --query 'Distribution.Status'
```

또는 `wait` 명령을 사용하여 배포 작업을 기다릴 수 있습니다.

```
aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
```

## CloudFront를 통해 콘텐츠에 액세스
<a name="get-started-cli-access-content"></a>

CloudFront를 통해 콘텐츠에 액세스하려면 CloudFront 배포의 도메인 이름과 콘텐츠의 기본 페이지를 결합합니다. 예시 CloudFront 도메인 이름을 실제 도메인 이름으로 바꿉니다.

```
https://d111111abcdef8.cloudfront.net/index.html
```

이전 단계를 수행했고 HTML 파일을 생성했다면 **Hello world\$1**라고 써있는 웹 페이지가 표시됩니다.

이 S3 버킷에 더 많은 콘텐츠를 업로드하는 경우 CloudFront 배포 도메인 이름과 S3 버킷의 객체 경로를 결합하여 CloudFront를 통해 콘텐츠에 액세스할 수 있습니다. 예를 들어 `new-page.html`이라는 새 파일을 S3 버킷의 루트에 업로드하는 경우 URL은 다음과 같습니다.

`https://d111111abcdef8.cloudfront.net/new-page.html`.

## 정리
<a name="get-started-cli-cleanup"></a>

실습용으로만 배포 및 S3 버킷을 생성한 경우에는 요금이 발생하지 않도록 삭제합니다. 먼저 배포를 비활성화하고 삭제합니다.

**표준 배포를 비활성화 및 삭제하려면(AWS CLI)**

1. 먼저 배포를 비활성화합니다.

   ```
   # Get the current configuration and ETag
   ETAG=$(aws cloudfront get-distribution-config --id $DISTRIBUTION_ID --query 'ETag' --output text)
   
   # Create a modified configuration with Enabled=false
   aws cloudfront get-distribution-config --id $DISTRIBUTION_ID | \
   jq '.DistributionConfig.Enabled = false' > temp_disabled_config.json
   
   # Update the distribution to disable it
   aws cloudfront update-distribution \
       --id $DISTRIBUTION_ID \
       --distribution-config file://<(jq '.DistributionConfig' temp_disabled_config.json) \
       --if-match $ETAG
   ```

1. 배포가 비활성화될 때까지 기다립니다.

   ```
   aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
   ```

1. 배포를 삭제합니다.

   ```
   # Get the current ETag
   ETAG=$(aws cloudfront get-distribution-config --id $DISTRIBUTION_ID --query 'ETag' --output text)
   
   # Delete the distribution
   aws cloudfront delete-distribution --id $DISTRIBUTION_ID --if-match $ETAG
   ```

**S3 버킷을 삭제하려면(AWS CLI)**
+ S3 버킷과 해당 콘텐츠를 삭제합니다. 예시 버킷 이름을 실제 버킷 이름으로 바꿉니다.

  ```
  # Delete the bucket contents
  aws s3 rm s3://amzn-s3-demo-bucket --recursive
  
  # Delete the bucket
  aws s3 rb s3://amzn-s3-demo-bucket
  ```

이 자습서용으로 생성된 로컬 파일을 정리하려면 다음 명령을 실행합니다.

```
# Clean up local files
rm -f distribution-config.json bucket-policy.json temp_disabled_config.json
rm -rf ~/cloudfront-demo
```

선택적으로 이 자습서용으로 생성한 OAC를 삭제할 수 있습니다.

```
# Get the OAC ETag
OAC_ETAG=$(aws cloudfront get-origin-access-control --id $OAC_ID --query 'ETag' --output text)

# Delete the OAC
aws cloudfront delete-origin-access-control --id $OAC_ID --if-match $OAC_ETAG
```

# 안전한 정적 웹 사이트 시작하기
<a name="getting-started-secure-static-website-cloudformation-template"></a>

이 주제에서 설명하는 솔루션을 통해 도메인 이름에 대한 안전한 정적 웹 사이트를 생성하여 Amazon CloudFront를 시작할 수 있습니다. *정적 웹 사이트*는 HTML, CSS, JavaScript, 이미지 및 비디오와 같은 정적 파일만 사용하며, 서버나 서버 측 처리가 필요하지 않습니다. 이 솔루션을 사용하면 웹 사이트에서 다음과 같은 이점을 얻을 수 있습니다.
+ **[Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)의 내구성이 뛰어난 스토리지 사용** - 이 솔루션은 정적 웹 사이트의 콘텐츠를 호스팅하는 Amazon S3 버킷을 생성합니다. 웹 사이트를 업데이트하려면 새 파일을 S3 버킷에 업로드하면 됩니다.
+ **Amazon CloudFront 콘텐츠 전송 네트워크를 통해 속도 향상** - 이 솔루션은 짧은 지연 시간으로 최종 사용자에게 웹 사이트를 제공하는 CloudFront 배포를 생성합니다. 배포는 웹 사이트가 S3에서 직접 액세스하지 않고 CloudFront를 통해서만 액세스할 수 있도록 [오리진 액세스 제어](private-content-restricting-access-to-s3.md)(OAC)로 구성됩니다.
+ **HTTPS 및 보안 헤더에 의해 보호** – 이 솔루션은 [AWS Certificate Manager(ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)에 SSL/TLS 인증서를 생성하고 이를 CloudFront 배포에 연결합니다. 이 인증서를 사용하면 배포가 HTTPS를 사용하여 도메인의 웹 사이트를 안전하게 제공할 수 있습니다.
+ **[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)으로 구성 및 배포** – 이 솔루션은 CloudFormation 템플릿을 사용하여 모든 구성 요소를 설정하므로 구성 요소 구성보다 웹 사이트의 콘텐츠에 더 집중할 수 있습니다.

이 솔루션은 GitHub의 오픈 소스입니다. 코드를 보거나 끌어오기 요청을 제출하거나 문제를 열려면 로 이동합니다[https://github.com/aws-samples/amazon-cloudfront-secure-static-site](https://github.com/aws-samples/amazon-cloudfront-secure-static-site)

**Topics**
+ [솔루션 개요](#cloudformation-website-overview)
+ [솔루션 배포](#deploy-secure-static-website-cloudformation)

## 솔루션 개요
<a name="cloudformation-website-overview"></a>

다음 다이어그램은 이 정적 웹 사이트 솔루션의 작동 방식에 대한 개요를 보여줍니다.

![\[CloudFront가 있는 안전한 정적 웹 사이트의 개요 다이어그램\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-secure-static-website-overview-github.png)


1. 최종 사용자는 www.example.com에서 웹 사이트를 요청합니다.

1. 요청된 객체가 캐싱된 경우 CloudFront가 캐시의 객체를 최종 사용자에게 반환합니다.

1. 객체가 CloudFront 캐시에 없는 경우 CloudFront는 오리진(S3 버킷)에서 객체를 요청합니다.

1. S3가 객체를 CloudFront로 반환합니다.

1. CloudFront가 객체를 캐시합니다.

1. 객체가 최종 사용자에게 반환됩니다. 동일한 CloudFront 엣지 로케이션에 들어오는 객체에 대한 후속 요청은 CloudFront 캐시에서 제공됩니다.

## 솔루션 배포
<a name="deploy-secure-static-website-cloudformation"></a>

이 안전한 정적 웹 사이트 솔루션을 배포하기 위해 다음 옵션 중 하나를 선택할 수 있습니다.
+ CloudFormation 콘솔을 사용하여 기본 콘텐츠가 포함된 솔루션을 배포한 다음, 웹 사이트 콘텐츠를 Amazon S3에 업로드합니다.
+ 솔루션을 컴퓨터에 복제하여 웹 사이트 콘텐츠를 추가합니다. 그런 다음 AWS Command Line Interface(AWS CLI)를 사용하여 솔루션을 배포합니다.

**참고**  
CloudFormation 템플릿을 배포하려면 미국 동부(버지니아 북부) 리전을 사용해야 합니다.

**Topics**
+ [사전 조건](#deploy-website-cloudformation-prerequisites)
+ [CloudFormation 콘솔을 사용합니다.](#deploy-website-cloudformation-console)
+ [로컬로 솔루션 복제](#deploy-website-cloudformation-clone)
+ [액세스 로그 찾기](#deploy-website-cloudformation-logs)

### 사전 조건
<a name="deploy-website-cloudformation-prerequisites"></a>

이 솔루션을 사용하려면 다음과 같은 사전 요구 사항이 있어야 합니다.
+ example.com과 같이 Amazon Route 53 호스팅 영역을 가리키는 등록된 도메인 이름. 호스팅 영역은 이 솔루션을 배포하는 동일한 AWS 계정에 있어야 합니다. 등록된 도메인 이름이 없는 경우 [Route 53에 등록](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html)할 수 있습니다. 등록된 도메인 이름이 있지만 Route 53 호스팅 영역을 가리키지 않는 경우 [Route 53를 DNS 서비스로 구성](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-configuring.html)합니다.
+ IAM 역할을 생성하는 CloudFormation 템플릿을 시작할 수 있는 AWS Identity and Access Management(IAM) 권한 및 솔루션의 모든 AWS 리소스를 생성할 수 있는 권한. 자세한 내용은 AWS CloudFormation 사용 설명서에서 [AWS Identity and Access Management를 사용한 액세스 제어](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) 섹션을 참조하세요.**

이 솔루션을 사용하는 동안 발생하는 비용에 대한 책임은 귀하에게 있습니다. 비용에 대한 자세한 내용은 [각 AWS 서비스의 요금 페이지를 참조하세요](https://aws.amazon.com/pricing/).

### CloudFormation 콘솔을 사용합니다.
<a name="deploy-website-cloudformation-console"></a>

**CloudFormation 콘솔을 사용하여 배포하려면**

1. [CloudFormation 콘솔에서 이 솔루션을 시작합니다](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=amazon-cloudfront-secure-static-site-templates-main&templateURL=https://s3.amazonaws.com/solution-builders-us-east-1/amazon-cloudfront-secure-static-site/latest/main.yaml). 필요한 경우 AWS 계정에 로그인합니다.

1. CloudFormation 콘솔에서 이 솔루션의 CloudFormation 템플릿을 지정하는 필드가 미리 채워져 있는 **스택 생성** 마법사가 열립니다.

   페이지 하단에서 [**Next**]를 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 다음 필드에 값을 입력합니다.
   + **SubDomain** - 웹 사이트에 사용할 하위 도메인을 입력합니다. 예를 들어, 하위 도메인이 *www*인 경우 웹 사이트는 *www*.example.com에서 사용할 수 있습니다. 다음 글머리 기호에 설명된 대로 example.com을 도메인 이름으로 바꿉니다.
   + **DomainName** - 도메인 이름(예: *example.com*)을 입력합니다. 이 도메인은 Route 53 호스팅 영역을 가리켜야 합니다.
   + **HostedZoneId** — 도메인 이름을 위한 Route 53 호스팅 영역 ID.
   + **CreateApex** - (선택 사항) CloudFront 구성에서 도메인 apex(example.com)에 대한 별칭을 생성합니다.

1. 마친 후에는 **다음**을 선택합니다.

1. (선택 사항) **스택 옵션 구성(Configure stack options)** 페이지에서 [태그 및 기타 스택 옵션을 추가](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html)합니다.

1. 마친 후에는 **다음**을 선택합니다.

1. **검토** 페이지에서 페이지 하단으로 스크롤한 다음 **기능** 섹션에서 두 상자를 선택합니다. 이러한 기능을 통해 CloudFormation은 스택의 리소스에 대한 액세스를 허용하는 IAM 역할을 생성하고 리소스의 이름을 동적으로 지정할 수 있습니다.

1. [**Create stack**]을 선택합니다.

1. 스택 생성이 완료될 때까지 기다립니다. 스택은 일부 중첩된 스택을 생성하고 완료하는 데 몇 분 정도 걸릴 수 있습니다. 완료되면 **상태**가 **CREATE\$1COMPLETE**로 변경됩니다.

   상태가 **CREATE\$1COMPLETE**이면 https://*www.example.com*으로 이동하여 웹 사이트를 봅니다(www.example.com을 3단계에서 지정한 하위 도메인 및 도메인 이름으로 바꿉니다). 웹 사이트의 기본 콘텐츠가 표시됩니다.  
![\[이 솔루션의 정적 웹 사이트 기본 콘텐츠입니다. “나는 정적 웹 사이트입니다!”라고 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-secure-static-website-content.png)

**웹 사이트의 기본 콘텐츠를 사용자 고유의 콘텐츠로 바꾸려면**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. 이름이 **amazon-cloudfront-secure-static-site-s3bucketroot-**로 시작하는 버킷을 선택합니다.
**참고**  
이름에 **s3bucketlogs**가 아닌 **s3bucketroot**가 있는 버킷을 선택해야 합니다. 이름에 **s3bucketroot**가 있는 버킷에는 웹 사이트 콘텐츠가 포함되어 있습니다. **s3bucketlogs**가 있는 버킷에는 로그 파일만 포함되어 있습니다.

1. 웹 사이트의 기본 콘텐츠를 삭제한 다음, 직접 업로드합니다.
**참고**  
이 솔루션의 기본 콘텐츠가 있는 웹 사이트를 본 경우, 일부 기본 콘텐츠가 CloudFront 엣지 로케이션에 캐싱될 가능성이 높습니다.. 최종 사용자가 업데이트된 웹 사이트 콘텐츠를 볼 수 있도록 하려면 파일을 *무효화*하여 CloudFront 엣지 로케이션에서 캐싱된 복사본을 제거합니다. 자세한 내용은 [파일을 무효화하여 콘텐츠 제거](Invalidation.md) 섹션을 참조하세요.

### 로컬로 솔루션 복제
<a name="deploy-website-cloudformation-clone"></a>

**사전 조건**:

이 솔루션을 배포하기 전에 웹 사이트 콘텐츠를 추가하려면 Node.js 및 npm이 필요한 솔루션의 아티팩트를 로컬로 패키징해야 합니다. 자세한 내용은 [https://www.npmjs.com/get-npm](https://www.npmjs.com/get-npm) 단원을 참조하세요.

**웹 사이트 콘텐츠를 추가하고 솔루션을 배포하려면**

1. 에서 솔루션을 복제하거나 다운로드합니다[https://github.com/aws-samples/amazon-cloudfront-secure-static-site](https://github.com/aws-samples/amazon-cloudfront-secure-static-site) 복제하거나 다운로드한 후 명령 프롬프트 또는 터미널을 열고 해당 `amazon-cloudfront-secure-static-site` 폴더로 이동합니다.

1. 다음 명령을 실행하여 솔루션의 아티팩트를 설치하고 패키징합니다.

   ```
   make package-static
   ```

1. 웹 사이트의 콘텐츠를 `www` 폴더에 복사하여 기본 웹 사이트 콘텐츠를 덮어씁니다.

1. 다음 AWS CLI 명령을 실행하여 솔루션의 아티팩트를 저장할 Amazon S3 버킷을 생성합니다. *amzn-s3-demo-bucket-for-artifacts*를 사용자 고유의 버킷 이름으로 바꿉니다.

   ```
   aws s3 mb s3://amzn-s3-demo-bucket-for-artifacts --region us-east-1
   ```

1. 솔루션의 아티팩트를 CloudFormation 템플릿으로 패키징하려면 다음 AWS CLI 명령을 실행합니다. *amzn-s3-demo-bucket-for-artifacts*를 이전 단계에서 생성한 버킷의 이름으로 바꿉니다.

   ```
   aws cloudformation package \
       --region us-east-1 \ 
       --template-file templates/main.yaml \
       --s3-bucket amzn-s3-demo-bucket-for-artifacts \
       --output-template-file packaged.template
   ```

1. 다음 명령을 실행하여 CloudFormation으로 솔루션을 배포하고 다음 값을 바꿉니다.
   + *your-CloudFormation-stack-name* - CloudFormation 스택의 이름으로 바꿉니다.
   + *example.com* - 도메인 이름으로 바꿉니다. 이 도메인은 동일한 AWS 계정의 Route 53 호스팅 영역을 가리켜야 합니다.
   + *www* - 웹 사이트에 사용할 하위 도메인으로 바꿉니다. 예를 들어, 하위 도메인이 *www*인 경우 웹 사이트는 www.example.com에서 사용할 수 있습니다.
   + *hosted-zone-ID* – 도메인 이름의 Route 53 호스팅 영역 ID로 바꿉니다.

   ```
   aws cloudformation deploy \
       --region us-east-1 \
       --stack-name your-CloudFormation-stack-name \
       --template-file packaged.template \
       --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \
       --parameter-overrides DomainName=example.com SubDomain=www HostedZoneId=hosted-zone-ID
   ```

   1. (선택 사항) 도메인 apex를 사용하여 스택을 배포하려면 다음 명령을 대신 실행하세요.

     ```
     aws --region us-east-1 cloudformation deploy \
         --stack-name your-CloudFormation-stack-name \
         --template-file packaged.template \
         --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \
         --parameter-overrides  DomainName=example.com SubDomain=www HostedZoneId=hosted-zone-ID CreateApex=yes
     ```

1. CloudFormation 스택의 생성이 완료될 때까지 기다립니다. 스택은 일부 중첩된 스택을 생성하고 완료하는 데 몇 분 정도 걸릴 수 있습니다. 완료되면 **상태**가 **CREATE\$1COMPLETE**로 변경됩니다.

   상태가 **CREATE\$1COMPLETE**이면 https://www.example.com으로 이동하여 웹 사이트를 봅니다(www.example.com을 이전 단계에서 지정한 하위 도메인 및 도메인 이름으로 바꿉니다). 웹 사이트의 내용이 보일 것입니다.

### 액세스 로그 찾기
<a name="deploy-website-cloudformation-logs"></a>

이 솔루션은 CloudFront 배포에 대한 [액세스 로그](AccessLogs.md)를 활성화합니다. 배포의 액세스 로그를 찾으려면 다음 단계를 완료하십시오.

**배포의 액세스 로그를 찾으려면**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. 이름이 **amazon-cloudfront-secure-static-site-s3bucketlogs-**로 시작하는 버킷을 선택합니다.
**참고**  
이름에 **s3bucketroot**가 아닌 **s3bucketlogs**가 있는 버킷을 선택해야 합니다. 이름에 **s3bucketlogs**가 있는 버킷에는 로그 파일이 포함되어 있습니다. **s3bucketroot**가 있는 버킷에는 웹 사이트 콘텐츠가 포함되어 있습니다.

1. **cdn** 폴더에는 CloudFront 액세스 로그가 포함되어 있습니다.