

# 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>

このトピックでは、Amazon CloudFront を使用する前の事前ステップ (AWS アカウントの作成など) について説明します。

**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 アイデンティティセンター を有効にして、管理ユーザーを作成します。これにより、日常的なタスクにルートユーザーを使用しないようにします。

**AWS アカウントのルートユーザー をセキュリティで保護する**

1.  **[ルートユーザー]** を選択し、AWS アカウント のメールアドレスを入力して、アカウント所有者として [AWS マネジメントコンソール](https://console.aws.amazon.com/) にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](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 アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンター の有効化](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   IAM アイデンティティセンターディレクトリ をアイデンティティソースとして使用するチュートリアルについては、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[デフォルトの IAM アイデンティティセンターディレクトリ を使用してユーザーアクセスを設定する](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM アイデンティティセンターユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[AWS アクセスポータルにサインインする](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)」を参照してください。

## CloudFront へのアクセス方法を選択する
<a name="introduction-accessing-cloudfront"></a>

Amazon CloudFront には、以下の方法でアクセスできます。
+ **AWS マネジメントコンソール** – このガイドの手順は、AWS マネジメントコンソール を使用してタスクを実行する方法について説明します。
+ **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 ユーザーガイド*」の「[Installing the 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 (Amazon S3) バケットに保存します。
+ オリジンアクセスコントロール (OAC) を使用して、認証済みのリクエストを Amazon S3 オリジンに送信します。OAC は CloudFront を介してリクエストを送信することで、ビューワーが S3 バケットに直接アクセスできないようにします。OAS の詳細については、「[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 マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/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. 他のすべての設定はデフォルトのままにして、[**バケットを作成**] を選択します。

## コンテンツをバケットにアップロードする
<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. CloudFront コンソール ([https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)) を開きます。

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 と署名付き Cookie を使用したプライベートコンテンツを提供する](PrivateContent.md)」を参照してください。
+ CloudFront ディストリビューションは、カスタムドメイン名 (`d111111abcdef8.cloudfront.net` の代わりに `www.example.com` など) を使用するように設定できます。詳細については、「[カスタム 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>

このセクションの手順では、AWS CLI を使用して、CloudFront で次のことを含む基本的な設定をセットアップする方法について説明します。
+ ディストリビューションオリジンとして使用する Amazon S3 バケットを作成します。
+ オブジェクトの元のバージョンを S3 バケットに保存します。
+ オリジンアクセスコントロール (OAC) を使用して、認証済みのリクエストを Amazon S3 オリジンに送信します。OAC は CloudFront を介してリクエストを送信することで、ビューワーが S3 バケットに直接アクセスできないようにします。OAS の詳細については、「[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>

S3 バケットポリシーを更新して、CloudFront がオブジェクトにアクセスできるようにします。サンプルバケット名をユーザーのバケット名に置き換えます。

```
# 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 ディストリビューションを作成します。このディストリビューションは、[オリジンアクセスコントロール](private-content-restricting-access-to-s3.md) (OAC) を使用して設定され、S3 から直接ではなく CloudFront を通じてのみウェブサイトにアクセスできるようにします。
+ **HTTPS とセキュリティヘッダーによってセキュリティ保護される** - このソリューションは、[AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) で SSL/TLS 証明書を作成し、それを CloudFront ディストリビューションにアタッチします。この証明書により、ディストリビューションが HTTPS を使用してドメインの Web サイトに安全にサービスを提供できるようになります。
+ **[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/ja_jp/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>

このソリューションを使用するには、次の前提条件が必要です。
+ Amazon Route 53 ホストゾーンを指している登録済みドメイン名 (example.com など)。ホストゾーンは、このソリューションのデプロイ先と同じ 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 ユーザーガイド*の「[Controlling access with 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 設定にドメイン頂点 (example.com) へのエイリアスを作成します。

1. 完了したら、[**次へ**] を選択します。

1. (オプション) [**スタックオプションの設定**] ページで、[タグおよびその他のスタックオプションを追加します](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html)。

1. 完了したら、[**次へ**] を選択します。

1. [**レビュー**] ページで、ページの下部までスクロールし、[**機能**] セクションの 2 つのボックスを選択します。これらの機能により、CloudFormation はスタックのリソースへのアクセスを許可する IAM ロールを作成し、リソースに動的に名前を付けることができます。

1. [**スタックの作成**] を選択します。

1. スタックの作成が完了するまで待ちます。スタックはネストされたスタックを作成します。完了までに数分かかることがあります。完了すると、[**ステータス**] が [**CREATE\$1COMPLETE**] に変わります。

   ステータスが [**CREATE\$1COMPLETE**] の場合、https://*www.example.com* に移動してウェブサイトを表示します (www.example.com は、ステップ 3 で指定したサブドメイン名およびドメイン名に置き換えます)。ウェブサイトのデフォルトコンテンツが表示されます。  
![\[このソリューションの静的ウェブサイトのデフォルトコンテンツ。「I am a static website!」と書かれている\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-secure-static-website-content.png)

**ウェブサイトのデフォルトのコンテンツを独自のコンテンツに置き換えるには**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/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` フォルダにコピーし、デフォルト Web サイトのコンテンツを上書きします。

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. 次の AWS CLI コマンドを実行し、ソリューションのアーティファクトを CloudFormation テンプレートとしてパッケージ化します。*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. （オプション) ドメイン頂点を使用してスタックをデプロイするには、代わりに次のコマンドを実行します。

     ```
     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. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 名前が **amazon-cloudfront-secure-static-site-s3bucketlogs-** で始まるバケットを選択します。
**注記**  
**s3bucketroot** ではなく、名前に **s3bucketlogs** を含むバケットを選択してください。名前に **s3bucketlogs** が含まれるバケットには、ログファイルが含まれています。**s3bucketroot** が含まれるバケットには、ウェブサイトのコンテンツが含まれています。

1. **cdn** という名前のフォルダには、CloudFront アクセスログが含まれています。