

# Amazon S3 を使用して静的ウェブサイトをホスティングする
<a name="WebsiteHosting"></a>

Amazon S3 を使用して、静的ウェブサイトをホストできます。*静的*ウェブサイトでは、個々のウェブページの内容は静的コンテンツです。ほかに、クライアント側スクリプトが含まれていることもあります。

**注記**  
[AWS Amplify ホスティング](https://docs.aws.amazon.com//amplify/latest/userguide/welcome.html.html)を使用して、S3 に保存されている静的ウェブサイトのコンテンツをホストすることをお勧めします Amplify ホスティングは、Amazon CloudFront を利用したグローバルに利用可能なコンテンツ配信ネットワーク (CDN) にウェブサイトを簡単にデプロイできるフルマネージドサービスです。これにより、安全な静的ウェブサイトホスティングが可能になります。  
AWS Amplify ホスティングを使用すると、汎用バケット内のオブジェクトの場所を選択して、コンテンツをマネージド CDN にデプロイし、ウェブサイトのパブリック HTTPS URL を生成してどこからでもアクセス可能にすることができます。Amplify ホスティングの詳細については、「*AWS Amplify コンソールユーザーガイド*」の「[S3 汎用バケットから AWS Amplify Hosting への静的ウェブサイトのデプロイ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-amplify.html)」および「[Amplify コンソールを使用した S3 からの静的ウェブサイトのデプロイ](https://docs.aws.amazon.com//amplify/latest/userguide/deploy--from-amplify-console.html)」を参照してください。

Amazon S3 での静的ウェブサイトのホストに関する詳細 (手順やステップバイステップのチュートリアルなど) については、以下のトピックを参照してください。

**重要**  
静的ウェブサイトのホストに使用しているバケットが AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用して暗号化されている場合は、SSE-KMS が匿名ユーザーをサポートしていないため、ウェブサイトを提供するための Amazon CloudFront ディストリビューションを作成する必要があります。CloudFront ディストリビューションを作成するときは、オリジンアクセスアイデンティティ (OAI) の代わりにオリジンアクセスコントロール (OAC) を使用してオリジンを保護する必要があります。OAI は SSE-KMS をサポートしていないため、代わりに OAC を使用する必要があります。  
OAC の詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[Amazon S3 オリジンへのアクセスを制限する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)」を参照してください。Amazon CloudFront を使用して静的ウェブサイトをホストする方法を示すチュートリアルについては、「[チュートリアル: Amazon S3、Amazon CloudFront、Amazon Route 53 を使用したオンデマンドストリーミング動画のホスティング。](tutorial-s3-cloudfront-route53-video-streaming.md)」を参照してください。

**Topics**
+ [ウェブサイトエンドポイント](WebsiteEndpoints.md)
+ [ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)
+ [インデックスドキュメントの設定](IndexDocumentSupport.md)
+ [カスタムエラードキュメントの設定](CustomErrorDocSupport.md)
+ [ウェブサイトアクセスのアクセス許可の設定](WebsiteAccessPermissionsReqd.md)
+ [(オプション) ウェブトラフィックのログ記録](LoggingWebsiteTraffic.md)
+ [(オプション) ウェブページリダイレクトの設定](how-to-page-redirect.md)
+ [Cross−Origin Resource Sharing (CORS) の使用](cors.md)
+ [静的ウェブサイトのチュートリアル](static-website-tutorials.md)

# ウェブサイトエンドポイント
<a name="WebsiteEndpoints"></a>

バケットを静的ウェブサイトとして設定すると、そのウェブサイトは、バケットの AWS リージョン 固有のウェブサイトエンドポイントで利用できます。ウェブサイトエンドポイントは、REST API リクエストを送信するエンドポイントとは別のものです。エンドポイントの違いの詳細については、「[ウェブサイトエンドポイントと REST API エンドポイントの主な違い](#WebsiteRestEndpointDiff)」を参照してください。

使用しているリージョンに応じて、Amazon S3 ウェブサイトエンドポイントは以下の 2 つの形式のいずれかになります。
+ **s3-website ダッシュ (-) リージョン** ‐ `http://bucket-name.s3-website-Region.amazonaws.com`
+ **s3-website ドット (.) リージョン** ‐`http://bucket-name.s3-website.Region.amazonaws.com` 

これらの URL にアクセスすると、ウェブサイト用に設定したデフォルトのインデックスドキュメントが返されます。Amazon S3 ウェブサイトエンドポイントの完全なリストについては、「[Amazon S3 ウェブサイトエンドポイント](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints)」を参照してください。

**注記**  
Amazon S3 の静的ウェブサイトのセキュリティを強化するために、Amazon S3 ウェブサイトのエンドポイントドメイン (s3-website-us-east-1.amazonaws.com や s3-website.ap-south-1.amazonaws.com など) は[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。セキュリティ強化のため、Amazon S3 統計 ウェブサイトのドメイン名に機密な Cookie を設定する必要が生じた場合は、`__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防ぐ際に役立ちます。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

ウェブサイトを公開したい場合、顧客がウェブサイトエンドポイントにあるコンテンツにアクセスできるようにするには、すべてのコンテンツがパブリックに読み取り可能になっている必要があります。詳細については、「[ウェブサイトアクセスのアクセス許可の設定](WebsiteAccessPermissionsReqd.md)」を参照してください。

**重要**  
Amazon S3 ウェブサイトエンドポイントは HTTPS またはアクセスポイントをサポートしていません。HTTPS を使用する場合は、次のいずれかを実行できます。  
(推奨) S3 に保存された静的ウェブサイトコンテンツをホストするには、[AWS Amplify ホスティング](https://docs.aws.amazon.com//amplify/latest/userguide/welcome.html.html) を使用します。Amplify ホスティングは、Amazon CloudFront を利用したグローバルに利用可能なコンテンツ配信ネットワーク (CDN) にウェブサイトを簡単にデプロイできるフルマネージドサービスです。これにより、安全な静的ウェブサイトホスティングが可能になります。  
AWS Amplify ホスティングを使用すると、汎用バケット内のオブジェクトの場所を選択して、コンテンツをマネージド CDN にデプロイし、ウェブサイトのパブリック HTTPS URL を生成してどこからでもアクセス可能にすることができます。Amplify ホスティングの詳細については、「*AWS Amplify コンソールユーザーガイド*」の「[S3 汎用バケットから AWS Amplify Hosting への静的ウェブサイトのデプロイ](https://docs.aws.amazon.com//AmazonS3/latest/userguide/website-hosting-amplify)」および「[Amplify コンソールを使用した S3 からの静的ウェブサイトのデプロイ](https://docs.aws.amazon.com//amplify/latest/userguide/deploy--from-amplify-console.html)」を参照してください。
Amazon CloudFront を使用して、Amazon S3 でホストされる静的ウェブサイトを提供します。詳細については、[CloudFront を使用して Amazon S3 バケットに対する HTTPS リクエストを処理するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-https-requests-s3) を参照してください。カスタムドメインで HTTPS を使用するには、[Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html)を参照してください。
「リクエスタ支払い」バケットに、ウェブサイトエンドポイントを介してアクセスすることはできません。このようなバケットへのリクエストに対しては 403 Access Denied レスポンスを受け取ります。詳細については、「[ストレージの転送と使用にリクエスタ支払い汎用バケットを使用する](RequesterPaysBuckets.md)」を参照してください。

**Topics**
+ [ウェブサイトエンドポイントの例](#website-endpoint-examples)
+ [DNS CNAME の追加](#website-endpoint-dns-cname)
+ [Route 53 でのカスタムドメインの使用](#custom-domain-s3-endpoint)
+ [ウェブサイトエンドポイントと REST API エンドポイントの主な違い](#WebsiteRestEndpointDiff)

## ウェブサイトエンドポイントの例
<a name="website-endpoint-examples"></a>

以下の例では、静的ウェブサイトとして設定されている Amazon S3 バケットにアクセスする方法を示しています。

**Example — ルートレベルでのオブジェクトのリクエスト**  
バケットのルートレベルに保存されている特定のオブジェクトをリクエストするには、以下の URL 構造を使用します。  

```
http://bucket-name.s3-website.Region.amazonaws.com/object-name
```
たとえば、以下の URL は、バケットのルートレベルに保存されている `photo.jpg` オブジェクトをリクエストするものです。  

```
http://example-bucket.s3-website.us-west-2.amazonaws.com/photo.jpg
```

**Example — プレフィックスでのオブジェクトのリクエスト**  
バケット内のフォルダに保存されているオブジェクトをリクエストするには、以下の URL 構造を使用します。  

```
http://bucket-name.s3-website.Region.amazonaws.com/folder-name/object-name
```
以下の URL は、バケット内の `docs/doc1.html` オブジェクトをリクエストするものです。  

```
http://example-bucket.s3-website.us-west-2.amazonaws.com/docs/doc1.html
```

## DNS CNAME の追加
<a name="website-endpoint-dns-cname"></a>

登録済みのドメインをお持ちの場合、Amazon S3 ウェブサイトエンドポイントを指し示す DNS CNAME エントリを追加することができます。たとえば、ドメイン `www.example-bucket.com` を登録した場合は、バケット `www.example-bucket.com` を作成し、`www.example-bucket.com.s3-website.Region.amazonaws.com` を参照する DNS CNAME エントリを追加できます。`http://www.example-bucket.com` へのリクエストはすべて、`www.example-bucket.com.s3-website.Region.amazonaws.com` にルーティングされます。

詳細については、「[CNAME レコードを使用した Amazon S3 URL のカスタマイズ](VirtualHosting.md#VirtualHostingCustomURLs)」を参照してください。

## Route 53 でのカスタムドメインの使用
<a name="custom-domain-s3-endpoint"></a>

Amazon S3 ウェブサイトエンドポイントを使用してウェブサイトにアクセスする代わりに、Amazon Route 53 に登録された独自のドメイン (`example.com` など) を使用して、コンテンツを提供できます。ルートドメインでウェブサイトをホストするために、Amazon S3 を Route 53 とともに使用することができます。例えば、ルートドメインが `example.com` で、ウェブサイトを Amazon S3 でホスティングする場合に、そのウェブサイトにブラウザからアクセスするには「`http://www.example.com`」または「`http://example.com`」を入力します。

チュートリアル例については、「[チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](website-hosting-custom-domain-walkthrough.md)」を参照してください。

## ウェブサイトエンドポイントと REST API エンドポイントの主な違い
<a name="WebsiteRestEndpointDiff"></a>

Amazon S3 ウェブサイトエンドポイントは、ウェブブラウザを介してアクセスするように最適化されています。以下の表は、REST API エンドポイントとウェブサイトエンドポイントの主な違いをまとめたものです。


| 主な違い | REST API エンドポイント | ウェブサイトエンドポイント | 
| --- | --- | --- | 
| アクセスコントロール |  パブリックコンテンツとプライベートコンテンツの両方をサポートします。  | 公開で読み取り可能なコンテンツのみをサポートします。 | 
| エラーメッセージの処理 |  XML 形式のエラーレスポンスを返します。  | HTML ドキュメントを返します。 | 
| リダイレクトのサポート |  該当しません  | オブジェクトレベルとバケットレベルの両方のリダイレクトをサポートします。 | 
| サポートされるリクエスト  |  バケットおよびオブジェクトのすべてのオペレーションをサポートします。  | オブジェクトに対する GET および HEAD リクエストのみをサポートします。 | 
| バケットのルートでの GET および HEAD リクエストに応答します。 | バケット内のオブジェクトキーのリストを返します。 | ウェブサイト設定で指定されているインデックスドキュメントを返します。 | 
| Secure Sockets Layer (SSL) のサポート | SSL 接続をサポートします。 | SSL 接続をサポートしません。 | 

Amazon S3 エンドポイントの完全なリストについては、*AWS 全般のリファレンス* の「[Amazon S3 エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/s3.html)」を参照してください。

# ウェブサイトのホスティングの有効化
<a name="EnableWebsiteHosting"></a>

バケットを静的ウェブサイトとして設定する場合は、静的ウェブサイトホスティングの有効化、インデックスドキュメントの設定、およびアクセス許可の設定を行う必要があります。

Amazon S3 コンソール、REST API、AWS SDK、AWS CLI、または CloudFormation を使用して、静的ウェブサイトホスティングを有効にすることができます。

カスタムドメインを使用してウェブサイトを設定するには、「[チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](website-hosting-custom-domain-walkthrough.md)」を参照してください。

## S3 コンソールの使用
<a name="HowDoIWebsiteConfiguration"></a>

**静的ウェブサイトホスティングを有効にするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングを有効にするバケットの名前を選択します。

1. **[プロパティ]** を選択します。

1. [**静的ウェブサイトホスティング**] で [**編集**] を選択します。

1. [**このバケットを使用してウェブサイトをホストする**] を選択します。

1. [**静的ウェブサイトホスティング**] で [**有効化**] を選択します。

1. **[インデックスドキュメント]** に、インデックスドキュメントのファイル名 (通常は `index.html`) を入力します。

   インデックスドキュメント名の大文字と小文字は区別されます。この名前は、S3 バケットにアップロードする HTML インデックスドキュメントのファイル名と正確に一致する必要があります。バケットをウェブサイトホスティング用に設定するときは、インデックスドキュメントを指定する必要があります。Amazon S3 からこのインデックスドキュメントが返されるのは、ルートドメインまたはサブフォルダに対するリクエストが行われたときです。詳細については、「[インデックスドキュメントの設定](IndexDocumentSupport.md)」を参照してください。

1. 4XX クラスエラーに関する独自のカスタムエラードキュメントを指定する場合は、[**エラードキュメント**] にカスタムエラードキュメントのファイル名を入力します。

   エラードキュメント名の大文字と小文字は区別されます。この名前は、S3 バケットにアップロードする HTML エラードキュメントのファイル名と正確に一致する必要があります。カスタムエラードキュメントを指定しない場合、エラーが発生すると、Amazon S3 からデフォルトの HTML エラードキュメントが返されます。詳細については、「[カスタムエラードキュメントの設定](CustomErrorDocSupport.md)」を参照してください。

1. (オプション) 高度なリダイレクトツールを指定する場合は、**[Rredirection rules]** (リダイレクトルール) に、JSON を入力してルールを記述します。

   例えば、条件に応じてリクエストのルーティング先を変えることができます。この条件として使用できるのは、リクエストの中の特定のオブジェクトキー名またはプレフィックスです。詳細については、「[高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する](how-to-page-redirect.md#advanced-conditional-redirects)」を参照してください。

1. [**Save changes**] (変更の保存) をクリックします。

   Amazon S3 では、バケットの静的ウェブサイトホスティングを有効にします。ページの下部の [**静的ウェブサイトホスティング**] の下に、バケットのウェブサイトエンドポイントが表示されます。

1. [**静的 ウェブサイトホスティング**] の下の**エンドポイント**を書き留めます。

   [**Endpoint (エンドポイント)**] は、バケットの Amazon S3 ウェブサイトエンドポイントです。バケットを静的ウェブサイトとして設定すると、このエンドポイントを使用してウェブサイトをテストできます。

## REST API の使用
<a name="ConfigWebSiteREST"></a>

REST リクエストを直接送信して静的ウェブサイトホスティングを有効にする方法の詳細については、Amazon Simple Storage Service API リファレンスの以下のセクションを参照してください。
+ [PUT Bucket website](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html)
+ [GET Bucket website](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETwebsite.html)
+ [DELETE Bucket website](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html)

## AWS SDK の使用
<a name="ManagingBucketWebsiteConfig"></a>

Amazon S3 で静的ウェブサイトをホスティングするには、Amazon S3 バケットをウェブサイトホスティング用に設定してから、ウェブサイトのコンテンツをそのバケットにアップロードします。AWS SDK を使用して、プログラムでウェブサイト設定を作成、更新、削除することもできます。SDK は、Amazon S3 REST API のラッパークラスを提供します。アプリケーションの必要性に応じて、アプリケーションから直接 REST API リクエストを送信することができます。

------
#### [ .NET ]

次の例では、AWS SDK for .NET を使用してバケットのウェブサイト設定を管理する方法を示します。バケットにウェブサイト設定を追加するには、バケット名とウェブサイト設定を指定します。ウェブサイト設定にはインデックスドキュメントを含める必要があります。また、オプションとしてエラードキュメントを含めることができます。これらのドキュメントは、バケット内に保存済みであることが必要です。詳細については、「[PUT Bucket ウェブサイト](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html)」を参照してください。Amazon S3 ウェブサイト機能の詳細については、[Amazon S3 を使用して静的ウェブサイトをホスティングする](WebsiteHosting.md) を参照してください。

次の C\$1 コード例は、指定したバケットにウェブサイト設定を追加しています。この設定で、インデックスドキュメント名とエラードキュメント名の両方を指定します。コード例を設定および実行する方法の詳細については、「*AWS SDK for .NET デベロッパーガイド*」の「[AWS SDK for .NET の開始方法](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)」 を参照してください。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class WebsiteConfigTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string indexDocumentSuffix = "*** index object key ***"; // For example, index.html.
        private const string errorDocument = "*** error object key ***"; // For example, error.html.
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;
        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            AddWebsiteConfigurationAsync(bucketName, indexDocumentSuffix, errorDocument).Wait();
        }

        static async Task AddWebsiteConfigurationAsync(string bucketName,
                                            string indexDocumentSuffix,
                                            string errorDocument)
        {
            try
            {
                // 1. Put the website configuration.
                PutBucketWebsiteRequest putRequest = new PutBucketWebsiteRequest()
                {
                    BucketName = bucketName,
                    WebsiteConfiguration = new WebsiteConfiguration()
                    {
                        IndexDocumentSuffix = indexDocumentSuffix,
                        ErrorDocument = errorDocument
                    }
                };
                PutBucketWebsiteResponse response = await client.PutBucketWebsiteAsync(putRequest);

                // 2. Get the website configuration.
                GetBucketWebsiteRequest getRequest = new GetBucketWebsiteRequest()
                {
                    BucketName = bucketName
                };
                GetBucketWebsiteResponse getResponse = await client.GetBucketWebsiteAsync(getRequest);
                Console.WriteLine("Index document: {0}", getResponse.WebsiteConfiguration.IndexDocumentSuffix);
                Console.WriteLine("Error document: {0}", getResponse.WebsiteConfiguration.ErrorDocument);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------
#### [ PHP ]

次の PHP の例では、指定したバケットにウェブサイト設定を追加します。`create_website_config` メソッドで、インデックスドキュメント名とエラードキュメント名を明示的に指定します。さらに、ウェブサイト設定を取得し、レスポンスを出力します。Amazon S3 ウェブサイト機能の詳細については、[Amazon S3 を使用して静的ウェブサイトをホスティングする](WebsiteHosting.md) を参照してください。

AWS SDK for Ruby API の詳細については、[AWS SDK for Ruby - バージョン 2](https://docs.aws.amazon.com/sdkforruby/api/index.html) を参照してください。

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);


// Add the website configuration.
$s3->putBucketWebsite([
    'Bucket'                => $bucket,
    'WebsiteConfiguration'  => [
        'IndexDocument' => ['Suffix' => 'index.html'],
        'ErrorDocument' => ['Key' => 'error.html']
    ]
]);

// Retrieve the website configuration.
$result = $s3->getBucketWebsite([
    'Bucket' => $bucket
]);
echo $result->getPath('IndexDocument/Suffix');

// Delete the website configuration.
$s3->deleteBucketWebsite([
    'Bucket' => $bucket
]);
```

------

## の使用AWS CLI
<a name="enabling-website-cli"></a>

AWS CLI を使用して S3 バケットを静的ウェブサイトとして設定する方法の詳細については、*AWS CLI コマンドリファレンス*の[ウェブサイト](https://docs.aws.amazon.com/cli/latest/reference/s3/website.html)を参照してください。

次に、インデックスドキュメントの設定とアクセス許可の設定を行う必要があります。詳細については、「[インデックスドキュメントの設定](IndexDocumentSupport.md)」および「[ウェブサイトアクセスのアクセス許可の設定](WebsiteAccessPermissionsReqd.md)」を参照してください。

オプションとして、[エラードキュメント](CustomErrorDocSupport.md)、[ウェブトラフィックのログ記録](LoggingWebsiteTraffic.md)、または[リダイレクト](how-to-page-redirect.md)を設定することもできます。

# インデックスドキュメントの設定
<a name="IndexDocumentSupport"></a>

ウェブサイトホスティングを有効にする場合は、インデックスドキュメントの設定とアップロードも必要です。*インデックスドキュメント*は、リクエストがウェブサイトのルートまたはサブフォルダに対して行われた場合に Amazon S3 によって返されるウェブページです。たとえば、ユーザーがブラウザに `http://www.example.com` と入力した場合は、このユーザーは特定のページをリクエストしてはいません。この場合、Amazon S3 は、インデックスドキュメントを提供し、これが*デフォルトページ*と見なされることがあります。

バケットに対して静的ウェブサイトホスティングを有効にする場合は、インデックスドキュメントの名前 (`index.html` など) を入力します。バケットに対して静的ウェブサイトホスティングを有効にした後、インデックスドキュメント名を含む HTML ファイルをバケットにアップロードします。

ルートレベル URL の末尾のスラッシュは省略可能です。たとえば、`index.html` をウェブサイトのインデックスドキュメントとして設定した場合は、以下の URL のどちらからも `index.html` が返されます。

```
1. http://example-bucket.s3-website.Region.amazonaws.com/
2. http://example-bucket.s3-website.Region.amazonaws.com
```

Amazon S3 ウェブサイトのエンドポイントの詳細については、「[ウェブサイトエンドポイント](WebsiteEndpoints.md)」を参照してください。

## インデックスドキュメントとフォルダ
<a name="IndexDocumentsandFolders"></a>

Amazon S3 では、バケットはオブジェクトのフラットコンテナです。つまり、コンピュータのファイルシステムとは異なり、階層構造ではありません。ただし、論理的な階層を作成するには、フォルダ構造を暗示させる名前をオブジェクトキーに付けます。

たとえば、以下のキー名を持つ 3 つのオブジェクトを含むバケットがあるとします。これらは、物理的な階層構造で格納されているわけではありませんが、キー名から次のような論理フォルダ構造を推測できます。
+ `sample1.jpg` — オブジェクトはバケットのルートにあります。
+ `photos/2006/Jan/sample2.jpg` — オブジェクトは `photos/2006/Jan` サブフォルダにあります。
+ `photos/2006/Feb/sample3.jpg` — オブジェクトは `photos/2006/Feb` サブフォルダにあります。

Amazon S3 コンソールでは、バケットにフォルダを作成することもできます。たとえば、`photos` という名前のフォルダを作成できます。バケットまたはバケット内の `photos` フォルダにオブジェクトをアップロードできます。オブジェクト `sample.jpg` をバケットに追加する場合、キー名は `sample.jpg` です。オブジェクトを `photos` フォルダにアップロードする場合、オブジェクトキー名は `photos/sample.jpg` です。

フォルダ構造をバケット内に作成する場合は、各レベルにインデックスドキュメントが存在している必要があります。各フォルダでは、インデックスドキュメントは同じ名前 (`index.html` など) であることが必要です。ユーザーが指定した URL がフォルダルックアップに似ている場合は、末尾のスラッシュの有無によって、ウェブサイトエンドポイントの動作が決まります。たとえば、末尾にスラッシュのある次の URL は`photos/index.html` インデックスドキュメントを返します。

```
1. http://bucket-name.s3-website.Region.amazonaws.com/photos/
```

ただし、前の URL から末尾のスラッシュを除外した場合、Amazon S3 はまずバケット内のオブジェクト `photos` を検索します。`photos` オブジェクトが見つからない場合、インデックスドキュメント `photos/index.html` が検索されます。見つかった場合、Amazon S3 は `302 Found` メッセージを返し、`photos/` キーを指し示します。それ以降の `photos/` に対するリクエストについて、Amazon S3 は `photos/index.html` を返します。インデックスドキュメントも見つからない場合、Amazon S3 はエラーを返します。

## インデックスドキュメントを設定する
<a name="configuring-index-document"></a>

S3 コンソールを使用してインデックスドキュメントを設定するには、次の手順に従います。REST API、AWS SDK、AWS CLI、または CloudFormation を使用してインデックスドキュメントを設定することもできます。

**注記**  
バージョニングが有効なバケットでは、`index.html` のコピーを複数アップロードできますが、解決されるのは最新バージョンのみです。S3 バージョニングの詳細については、「[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)」を参照してください。

バケットに対して静的ウェブサイトホスティングを有効にする場合は、インデックスドキュメントの名前 (**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. インデックスファイルをローカルに保存します。

   インデックスドキュメントファイル名は、[**静的ウェブサイトホスティング**] ダイアログボックスで入力したインデックスドキュメント名と正確に一致する必要があります。インデックスドキュメント名では、大文字と小文字が区別されます。例えば、**[静的ウェブサイトホスティング]** ダイアログボックスの **[インデックスドキュメント]** 名に「`index.html`」と入力する場合、インデックスドキュメントファイル名も `Index.html` ではなく `index.html` である必要があります。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングに使用するバケットの名前を選択します。

1. バケットに対して静的ウェブサイトホスティングを有効にし、インデックスドキュメントの正確な名前 (`index.html` など) を入力します。詳細については、「[ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)」を参照してください。

   静的ウェブサイトホスティングを有効にしたら、ステップ 6 に進みます。

1. インデックスドキュメントをバケットにアップロードするには、以下のいずれかを実行します。
   + インデックスファイルをコンソールバケットのリストにドラッグアンドドロップします。
   + [**Upload**] を選択し、プロンプトに従ってインデックスファイルを選択してアップロードします。

   手順については、「[オブジェクトのアップロード](upload-objects.md)」を参照してください。

1. (オプション) 他のウェブサイトコンテンツをバケットにアップロードします。

次に、ウェブサイトへのアクセス許可を設定する必要があります。詳細については、「[ウェブサイトアクセスのアクセス許可の設定](WebsiteAccessPermissionsReqd.md)」を参照してください。

オプションとして、[エラードキュメント](CustomErrorDocSupport.md)、[ウェブトラフィックのログ記録](LoggingWebsiteTraffic.md)、または[リダイレクト](how-to-page-redirect.md)を設定することもできます。

# カスタムエラードキュメントの設定
<a name="CustomErrorDocSupport"></a>

バケットを静的ウェブサイトとして設定した後、エラーが発生すると、Amazon S3 から HTML エラードキュメントが返されます。オプションで、エラーが発生したときに Amazon S3 からそのドキュメントが返されるように、カスタムエラードキュメントを含むバケットを設定できます。

**注記**  
ただし、エラーが発生した場合、一部のブラウザは独自のエラーメッセージを表示し、Amazon S3 が返すエラードキュメントを無視することがあります。たとえば、HTTP 404 Not Found エラーが発生した場合、Google Chrome は Amazon S3 が返すエラードキュメントを無視し、独自のエラーを表示することがあります。

**Topics**
+ [Amazon S3 HTTP レスポンスコード](#s3-http-error-codes)
+ [カスタムエラードキュメントの設定](#custom-error-document)

## Amazon S3 HTTP レスポンスコード
<a name="s3-http-error-codes"></a>

次の表は、エラーの発生時に Amazon S3 が返す HTTP レスポンスコードのサブセットをまとめたものです。


| HTTP エラーコード | 説明 | 
| --- | --- | 
| 301 Moved Permanently | ユーザーが Amazon S3 ウェブサイトエンドポイント (http://s3-website.Region.amazonaws.com/) に直接リクエストを送信した場合、Amazon S3 は 301 Moved Permanently レスポンスを返し、それらのリクエストを https://aws.amazon.com/s3/ にリダイレクトします。 | 
| [302 Found |  Amazon S3 が末尾にスラッシュのないキー `x`、`http://bucket-name.s3-website.Region.amazonaws.com/x` に対するリクエストを受け取った場合、まずキー名 `x` のオブジェクトを検索します。オブジェクトが見つからない場合、Amazon S3 はリクエストがサブフォルダ `x` に対するものであると判断し、末尾にスラッシュを追加して、リクエストをリダイレクトし、**302 Found** を返します。  | 
| [304 Not Modified |  Amazon S3 は、リクエストヘッダー `If-Modified-Since`、`If-Unmodified-Since`、`If-Match`、および/または `If-None-Match` を使用して、リクエストされたオブジェクトがクライアントで保持されているキャッシュされたコピーと同じであるかどうかを判断します。オブジェクトが同じである場合、ウェブサイトエンドポイントは [**304 Not Modified**] レスポンスを返します。  | 
| [400 Malformed Request |  ユーザーが誤ったリージョンエンドポイント経由でバケットにアクセスを試みると、ウェブサイトエンドポイントは [**400 Malformed Request**] で応答します。  | 
| 403 Forbidden |  ユーザーのリクエストが公開で読み取ることのできないオブジェクトに変換する場合、ウェブサイトエンドポイントは [**403 Forbidden**] で応答します。オブジェクト所有者は、バケットポリシーまたは ACL を使用して、オブジェクトを公開する必要があります。  | 
| 404 Not Found |  ウェブサイトエンドポイントは、以下の理由により [**404 Not Found**] で応答します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/CustomErrorDocSupport.html) [**404 Not Found**] で返すドキュメントをカスタマイズすることができます。必ず、このドキュメントをウェブサイトとして設定されたバケットにアップロードすると共に、このドキュメントを使用するようにウェブサイトホスティング設定を行ってください。 Amazon S3 がオブジェクトまたはインデックスドキュメントのリクエストとして URL をどのように解釈するかについては、「[インデックスドキュメントの設定](IndexDocumentSupport.md)」を参照してください。  | 
| [500 Service Error |  内部サーバーエラーが発生した場合、ウェブサイトエンドポイントは [**500 Service Error**] で応答します。  | 
| 503 Service Unavailable |  Amazon S3 がユーザーのリクエスト頻度を減らす必要があると判断した場合に、ウェブサイトエンドポイントは **503 Service Unavailable** で応答します。  | 

 これらの各エラーに対して、Amazon S3 は定義済みの HTML メッセージを返します。[**403 Forbidden**] レスポンスで返される HTML メッセージの例を次に示します。

![\[403 Forbidden エラーメッセージの例\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/WebsiteErrorExample403.png)


## カスタムエラードキュメントの設定
<a name="custom-error-document"></a>

バケットを静的ウェブサイトとして設定する場合、ユーザーフレンドリーなエラーメッセージと追加のヘルプを含むカスタムエラードキュメントを提供できます。Amazon S3 は HTTP 4XX クラスのエラーコードに対してのみ、カスタムエラードキュメントを返します。

S3 コンソールを使用してカスタムエラードキュメントを設定するには、次の手順に従います。REST API、AWS SDK、AWS CLI、または CloudFormation を使用してエラードキュメントを設定することもできます。詳細については、以下を参照してください。
+ *Amazon Simple Storage Service API リファレンス*の「[PutBucketWebsite](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html)」
+ *CloudFormation ユーザーガイド*の[ AWS::S3::Bucket WebsiteConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-websiteconfiguration.html)
+ *AWS CLI コマンドリファレンス*の [put-bucket-website](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-website.html)

バケットに対して静的ウェブサイトホスティングを有効にするときは、エラードキュメントの名前 (例: **404.html**) を入力します。バケットに対して静的ウェブサイトホスティングを有効にしたら、エラードキュメント名を含む HTML ファイルをバケットにアップロードします。

**エラードキュメントを設定するには**

1. エラードキュメント (例: `404.html`) を作成します。

1. エラードキュメントのファイルをローカルに保存します。

   エラードキュメントの名前は、大文字と小文字を区別し、静的ウェブサイトホスティングを有効にする際に入力した名前と厳密に一致している必要があります。たとえば、[**Static website hosting**] (静的ウェブサイトホスティング) ダイアログボックスの [**Error document**] (エラードキュメント) 名に `404.html` と入力する場合、エラードキュメントのファイル名も `404.html` である必要があります。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングに使用するバケットの名前を選択します。

1. バケットに対して静的ウェブサイトホスティングを有効にし、エラードキュメントの正確な名前 (例: `404.html`) を入力します。詳細については、「[ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)」および「[カスタムエラードキュメントの設定](#CustomErrorDocSupport)」を参照してください。

   静的ウェブサイトホスティングを有効にしたら、ステップ 6 に進みます。

1. エラードキュメントをバケットにアップロードするには、以下のいずれかを実行します。
   + エラードキュメントファイルをコンソールバケットのリストにドラッグアンドドロップします。
   + [**Upload**] を選択し、プロンプトに従ってインデックスファイルを選択してアップロードします。

   手順については、「[オブジェクトのアップロード](upload-objects.md)」を参照してください。

# ウェブサイトアクセスのアクセス許可の設定
<a name="WebsiteAccessPermissionsReqd"></a>

バケットを静的ウェブサイトとして設定する場合、このウェブサイトを公開するときは、パブリック読み取りアクセスを許可できます。バケットをパブリックに読み取り可能にするには、バケットのパブリックアクセスブロック設定を無効にし、パブリック読み取りアクセスを許可するバケットポリシーを記述する必要があります。バケットにバケット所有者が所有していないオブジェクトが含まれている場合は、すべてのユーザーに読み取りアクセスを許可するオブジェクトアクセスコントロールリスト (ACL) の追加が必要になる場合があります。

バケットのパブリックアクセスのブロック設定を無効にするのではなく、ウェブサイトを公開したい場合は、Amazon CloudFront ディストリビューションを作成して、静的ウェブサイトを提供できます。詳細については、[Amazon CloudFront によるウェブサイトの高速化](website-hosting-cloudfront-walkthrough.md) および「*Amazon Route 53 デベロッパーガイド*」の「[Amazon CloudFront ディストリビューションを使用して静的ウェブサイトを提供する](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started-cloudfront-overview.html)」を参照してください。

**注記**  
ウェブサイトエンドポイント上に、ユーザーがリクエストしたオブジェクトが存在しない場合は、Amazon S3 から HTTP レスポンスコード `404 (Not Found)` が返されます。オブジェクトが存在するが、そのオブジェクトの読み取りアクセス許可が付与されていない場合は、ウェブサイトエンドポイントから HTTP レスポンスコード `403 (Access Denied)` が返されます。ユーザーはこのレスポンスコードを見て、特定のオブジェクトが存在するかどうかを推測できます。この動作を希望しない場合は、バケットのウェブサイトのサポートを有効にしないでください。

**Topics**
+ [ステップ 1: S3 のパブリックアクセスのブロック設定を編集する](#block-public-access-static-site)
+ [ステップ 2: バケットポリシーを追加する](#bucket-policy-static-site)
+ [オブジェクトアクセスコントロールリスト](#object-acl)

## ステップ 1: S3 のパブリックアクセスのブロック設定を編集する
<a name="block-public-access-static-site"></a>

既存のバケットをパブリックアクセスを持つ静的ウェブサイトとして設定する場合は、そのバケットのパブリックアクセスのブロック設定を編集する必要があります。また、アカウントレベルでパブリックアクセスのブロック設定を編集する必要がある場合もあります。Amazon S3 は、アクセスポイントレベル、バケットレベル、アカウントレベルのパブリックアクセスのブロック設定で最も制限の厳しい組み合わせを適用します。

例えば、バケットのパブリックアクセスを許可し、アカウントレベルですべてのパブリックアクセスをブロックした場合、Amazon S3 はバケットへのパブリックアクセスを引き続きブロックします。このシナリオでは、バケットレベルとアカウントレベルのパブリックアクセスのブロック設定を編集する必要があります。詳細については、「[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md)」を参照してください。

デフォルトでは、Amazon S3 はアカウントとバケットへのパブリックアクセスをブロックします。バケットを使用して静的ウェブサイトをホストする場合は、以下のステップを使用して、パブリックアクセスブロック設定を編集できます。

**警告**  
このステップを完了する前に「[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md)」を読んで、パブリックアクセスを許可することに伴うリスクを理解し、了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. 静的ウェブサイトとして設定されたバケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. **[ブロックパブリックアクセス (バケット設定)]** で **[編集]** を選択します。

1. [**Block *all* public access (すべてのパブリックアクセスをブロックする)**] をクリアし、[**Save changes (変更の保存)**] を選択します。  
![\[バケットのブロックパブリックアクセス設定を示す Amazon S3 コンソール。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/edit-public-access-clear.png)

   Amazon S3 で、バケットのブロックパブリックアクセス設定がオフになります。パブリックな静的ウェブサイトを作成するには、バケットポリシーを追加する前に、アカウントの[ブロックパブリックアクセス設定を編集する](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-account.html)必要があります。アカウントのブロックパブリックアクセス設定が現在有効になっている場合は、**[ブロックパブリックアクセス (バケット設定)]** の下にメモが表示されます。

## ステップ 2: バケットポリシーを追加する
<a name="bucket-policy-static-site"></a>

バケット内のオブジェクトをパブリックに読み取り可能にするには、すべてのユーザーに `s3:GetObject` アクセス許可を付与するバケットポリシーを作成する必要があります。

S3 のパブリックアクセスブロック設定を編集した後で、バケットへのパブリック読み取りアクセスを許可するバケットポリシーを追加できます。パブリック読み取りアクセスを許可すると、インターネット上のだれでもバケットにアクセスできるようになります。

**重要**  
次のポリシーは、単なる例として、バケットのコンテンツへのフルアクセスを許可します。このステップに進む前に、「[Amazon S3 バケット内のファイルを保護するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/secure-s3-resources/)」を確認して、S3 バケット内のファイルを保護するためのベストプラクティスと、パブリックアクセスの許可に伴うリスクを理解してください。

1. [**バケット**] で、バケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. [**Bucket Policy (バケットポリシー)**] で [**編集**] を選択します。

1. ウェブサイトのパブリック読み取りアクセスを許可するには、次のバケットポリシーをコピーし、[**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* はバケット名のプレースホルダーです。このバケットポリシーを独自のバケットで使用するには、バケット名に合わせてこの名前を更新する必要があります。

1. [**Save changes**] (変更の保存) をクリックします。

   バケットポリシーが正常に追加されたことを示すメッセージが表示されます。

   `Policy has invalid resource` というエラーが表示された場合は、バケットポリシー内のバケット名がバケット名と一致していることを確認します。バケットポリシーの追加については、「[S3 バケットポリシーを追加する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)」を参照してください。

   エラーメッセージが表示され、バケットポリシーを保存できない場合は、アカウントとバケットの [パブリックアクセスをブロックする] 設定をチェックして、バケットへのパブリックアクセスを許可していることを確認します。

## オブジェクトアクセスコントロールリスト
<a name="object-acl"></a>

バケットポリシーを使用して、オブジェクトに対するアクセス許可を付与できます。ただし、バケットポリシーは、バケット所有者が所有するオブジェクトにのみ適用されます。バケットに、バケット所有者として所有していないオブジェクトが含まれる場合は、バケット所有者は、オブジェクトのアクセスコントロールリスト (ACL) を使用して、それらのオブジェクトへのパブリック読み取りアクセス許可を付与する必要があります。

S3 オブジェクト所有権は、Amazon S3 バケットレベルの設定で、バケットにアップロードされる新しいオブジェクト所有権を制御し、ACL を無効にするのに使用できます。デフォルトでは、オブジェクト所有権はバケット所有者の強制設定に設定され、すべての ACL は無効になります。ACL を無効にすると、バケット所有者はバケット内のすべてのオブジェクトを所有し、アクセス管理ポリシーのみを使用してデータへのアクセスを管理します。

 Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。オブジェクトごとに個別にアクセスを制御する必要がある状況を除き、ACL は無効にしておくことをお勧めします。ACL を無効にすると、誰がオブジェクトをバケットにアップロードしたかに関係なく、ポリシーを使用してバケット内のすべてのオブジェクトへのアクセスを制御できます。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

**重要**  
汎用バケットで S3 のオブジェクト所有者に [バケット所有者の強制] 設定を使用する場合は、ポリシーを使用して汎用バケットとその中のオブジェクトへのアクセスを許可する必要があります。バケット所有者強制設定が有効になっている場合、アクセスコントロールリスト (ACL) の設定または ACL の更新は失敗し、`AccessControlListNotSupported` エラーコードが返されます。ACL の読み取りリクエストは引き続きサポートされています。

ACL を使用してオブジェクトを公開で読み取り可能にするには、次の許可要素に示すように、`AllUsers` グループに READ アクセス許可を付与します。この許可要素をオブジェクト ACL に追加します。ACL の管理の詳細については、「[アクセスコントロールリスト (ACL) の概要](acl-overview.md)」を参照してください。

```
1. <Grant>
2.   <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.           xsi:type="Group">
4.     <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
5.   </Grantee>
6.   <Permission>READ</Permission>
7. </Grant>
```

# (オプション) ウェブトラフィックのログ記録
<a name="LoggingWebsiteTraffic"></a>

オプションで、静的ウェブサイトとして設定されているバケットで Amazon S3 サーバーアクセスログを有効にできます。サーバーアクセスのログ記録では、バケットに対するリクエストの詳細が記録されます。詳細については、「[サーバーアクセスログによるリクエストのログ記録](ServerLogs.md)」を参照してください。Amazon CloudFront を使用して[ウェブサイトを高速化](website-hosting-cloudfront-walkthrough.md)する場合は、CloudFront のログ記録を使用することもできます。詳細については、*Amazon CloudFront デベロッパーガイド*の「[アクセスログの設定および使用](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html)」を参照してください。

**静的ウェブサイトバケット用のサーバーアクセスのログ記録を有効にするには**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 静的ウェブサイトとして設定しているバケットを作成したのと同じリージョンで、ログ記録用の汎用バケットを作成します (例: `logs.example.com`)。

1. サーバアクセスのログを記録するログファイル用のフォルダを作成します (例: `logs`)。

1. (オプション) CloudFront を使用してウェブサイトのパフォーマンスを向上させる場合は、CloudFront ログファイル用のフォルダを作成します (例: `cdn`)。

   詳細については、「[Amazon CloudFront によるウェブサイトの高速化](website-hosting-cloudfront-walkthrough.md)」を参照してください。

1. [**Buckets (バケット)**] リストで、バケット名を選択します。

1. [**プロパティ**] を選択します。

1. [**Server access logging (サーバーアクセスのログ記録)**] で、[**Edit (編集)**] を選択します。

1. [**Enable**] を選択します。

1. [**Target bucket (ターゲットバケット)**] で、サーバーアクセスログのバケットとフォルダの宛先を選択します。
   + フォルダとバケットの場所を参照します。

     1. [**Browse S3(S3 の参照)**] を選択します。

     1. バケット名を選択し、ログフォルダを選択します。

     1. [**Choose path (パスの選択)**] を選択します。
   + S3 バケットパスを入力します (例: **s3://logs.example.com/logs/**)。

1. [**Save changes**] (変更の保存) をクリックします。

   ログバケットで、ログにアクセスできるようになりました。Amazon S3 は 2 時間おきにログバケットにウェブサイトアクセスログを書き込みます。

# (オプション) ウェブページリダイレクトの設定
<a name="how-to-page-redirect"></a>

Amazon S3 バケットに対して静的ウェブサイトホスティングが設定されている場合は、バケットまたはそのバケット内のオブジェクトに対してリダイレクトを設定できます。リダイレクトを設定するには、次のオプションがあります。

**Topics**
+ [バケットのウェブサイトエンドポイントに対するリクエストを別のバケットまたはドメインにリダイレクトする](#redirect-endpoint-host)
+ [高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する](#advanced-conditional-redirects)
+ [オブジェクトのリクエストをリダイレクトする](#redirect-requests-object-metadata)

## バケットのウェブサイトエンドポイントに対するリクエストを別のバケットまたはドメインにリダイレクトする
<a name="redirect-endpoint-host"></a>

バケットのウェブサイトエンドポイントに対するすべてのリクエストを、別のバケットまたはドメインにリダイレクトできます。すべてのリクエストをリダイレクトする場合、ウェブサイトエンドポイントに対して行われたすべてのリクエストが指定されたバケットまたはドメインにリダイレクトされます。

例えば、ルートドメインが `example.com` であり、`http://example.com` および `http://www.example.com` の両方のためのリクエストに対応する場合は、`example.com` および `www.example.com` という 2 つのバケットを作成する必要があります。次に、`example.com` バケット内のコンテンツを保持し、他の `www.example.com` バケットからすべてのリクエストを `example.com` バケットにリダイレクトするように設定します。詳細については、「[カスタムドメイン名を使用して静的ウェブサイトを設定する](https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)」を参照してください。

**バケットウェブサイトエンドポイントにリクエストをリダイレクトするには**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. [**Buckets (バケット)**] で、リクエストをリダイレクトするバケットの名前 (`www.example.com` など)を選択します。

1. [**プロパティ**] を選択します。

1. [**静的ウェブサイトホスティング**] で [**編集**] を選択します。

1. [**Redirect requests for an object (オブジェクトのリクエストをリダイレクト)**] を選択します。

1. [**Host name (ホスト名)**] ボックスに、バケットまたはカスタムドメインのウェブサイトエンドポイントを入力します。

   たとえば、ルートドメインアドレスにリダイレクトする場合は、「**example.com**」と入力します。

1. [**Protocol (プロトコル)**] で、リダイレクトされた要求のプロトコル ([**none**]、[**http**]、または [**https**]) を選択します。

   プロトコルを指定しない場合、デフォルトのオプションは [**none**] です。

1. [**Save changes**] (変更の保存) をクリックします。

## 高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する
<a name="advanced-conditional-redirects"></a>

高度な条件付きリダイレクトルールを使用すると、条件に応じてリクエストのルーティング先を変えることができます。この条件として使用できるのは、特定のオブジェクトキー名、リクエストの中のプレフィックス、またはレスポンスコードです。たとえば、バケット内のあるオブジェクトを削除する、または名前を変更する場合は、リクエストを別のオブジェクトにリダイレクトするルーティングルールを追加します。フォルダを使用できなくする場合は、ルーティングルールを追加して別のウェブページにリクエストをリダイレクトできます。ルーティングルールは、エラー状態を処理するために追加することもできます。その場合は、エラーの処理時に、エラーを発生させたリクエストを別のドメインにリダイレクトします。

バケットに対して静的ウェブサイトホスティングを有効にすると、オプションで高度なリダイレクトルールを指定できます。Amazon S3 では、ウェブサイト設定ごとのルーティングルールの数が 50 に制限されています。50 を超えるルーティングルールが必要な場合は、オブジェクトリダイレクトを使用できます。詳細については、「[S3 コンソールの使用](#page-redirect-using-console)」を参照してください。

REST API を使用したルーティングルールの設定の詳細については、*Amazon Simple Storage Service API リファレンス*の「[PutBucketWebsite](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html)」を参照してください。

**重要**  
新しい Amazon S3 コンソールでリダイレクトルールを作成するには、JSON を使用する必要があります。JSON の例については、「[リダイレクトルールの例](#redirect-rule-examples)」を参照してください。

**静的ウェブサイトのリダイレクトルールを設定するには**

静的ウェブサイトホスティングがすでに有効になっているバケットのリダイレクトルールを追加するには、次の手順に従います。

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトとして設定したバケットの名前を選択します。

1. [**プロパティ**] を選択します。

1. [**静的ウェブサイトホスティング**] で [**編集**] を選択します。

1. [**Redirection rules (リダイレクトルール)** ] ボックスに、JSON にリダイレクトルールを入力します。

   S3 コンソールでは、JSON を使用してルールを記述します。JSON の例については、「[リダイレクトルールの例](#redirect-rule-examples)」を参照してください。Amazon S3 では、ウェブサイト設定ごとのルーティングルールの数が 50 に制限されています。

1. [**Save changes**] (変更の保存) をクリックします。

### ルーティングルール要素
<a name="configure-bucket-as-website-routing-rule-syntax"></a>

JSON および XML でウェブサイト設定のルーティングルールを定義するための一般的な構文を次に示します。新しい S3 コンソールでリダイレクトルールを設定するには、JSON を使用する必要があります。JSON の例については、「[リダイレクトルールの例](#redirect-rule-examples)」を参照してください。

------
#### [ JSON ]

```
[
    {
      "Condition": {
        "HttpErrorCodeReturnedEquals": "string",
        "KeyPrefixEquals": "string"
      },
      "Redirect": {
        "HostName": "string",
        "HttpRedirectCode": "string",
        "Protocol": "http"|"https",
        "ReplaceKeyPrefixWith": "string",
        "ReplaceKeyWith": "string"
      }
    }
  ]
 
Note: Redirect must each have at least one child element. You can have either ReplaceKeyPrefix with or ReplaceKeyWith but not both.
```

------
#### [ XML ]

```
<RoutingRules> =
    <RoutingRules>
         <RoutingRule>...</RoutingRule>
         [<RoutingRule>...</RoutingRule>   
         ...]
    </RoutingRules>

<RoutingRule> =
   <RoutingRule>
      [ <Condition>...</Condition> ]
      <Redirect>...</Redirect>
   </RoutingRule>

<Condition> =
   <Condition> 
      [ <KeyPrefixEquals>...</KeyPrefixEquals> ]
      [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ]
   </Condition>
    Note: <Condition> must have at least one child element.

<Redirect> =
   <Redirect> 
      [ <HostName>...</HostName> ]
      [ <Protocol>...</Protocol> ]
      [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith>  ]
      [ <ReplaceKeyWith>...</ReplaceKeyWith> ]
      [ <HttpRedirectCode>...</HttpRedirectCode> ]
   </Redirect>

Note: <Redirect> must have at least one child element. You can have either ReplaceKeyPrefix with or ReplaceKeyWith but not both.
```

------

次の表は、ルーティングルールの要素をまとめたものです。


|  名前  |  説明  | 
| --- | --- | 
| RoutingRules |  RoutingRule 要素のコレクションを入れるコンテナ。 | 
| RoutingRule |  条件とリダイレクトを明示したルール。この条件が満たされたときにこのリダイレクトが適用されます。 条件: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/how-to-page-redirect.html)  | 
| Condition |  条件を記述するためのコンテナ。この条件が満たされているときに、指定されたリダイレクトが適用されます。ルーティングルールの中に条件がない場合は、そのルールはすべてのリクエストに適用されます。  | 
| KeyPrefixEquals |  リクエストをリダイレクトするオブジェクトキー名のプレフィックス。 `KeyPrefixEquals` `HttpErrorCodeReturnedEquals` が指定されていない場合は、 は必須です。`KeyPrefixEquals` と `HttpErrorCodeReturnedEquals` の両方が指定されている場合は、両方が真である場合に、条件が満たされていると見なされます。  | 
| HttpErrorCodeReturnedEquals |  この HTTP エラーコードに一致している場合にのみ、リダイレクトが適用されます。エラーが発生した場合、エラーコードがこの値に等しい場合は、指定されたリダイレクトが適用されます。 `HttpErrorCodeReturnedEquals` `KeyPrefixEquals` が指定されていない場合は、 は必須です。`KeyPrefixEquals` と `HttpErrorCodeReturnedEquals` の両方が指定されている場合は、両方が真である場合に、条件が満たされていると見なされます。  | 
| Redirect |  コンテナ要素。リクエストのリダイレクトに関する指示を表すのに使用されます。リクエストを別のホストや別のページにリダイレクトすることも、別のプロトコルの使用を指定することもできます。`RoutingRule` には `Redirect` 要素が必要です。1 つの `Redirect` 要素の中に、`Protocol`、`HostName`、`ReplaceKeyPrefixWith`、`ReplaceKeyWith`、`HttpRedirectCode` の兄弟要素のうち 1 つ以上が存在する必要があります。  | 
| Protocol |  レスポンスとして返される `http` ヘッダーで使用されるプロトコル（`https` または `Location`）。 同レベルの要素の 1 つが指定されている場合、`Protocol` は省略可能です。  | 
| HostName |  レスポンスとして返される `Location` ヘッダーで使用されるホスト名。 同レベルの要素の 1 つが指定されている場合、`HostName` は省略可能です。  | 
| ReplaceKeyPrefixWith |  リダイレクトリクエストの中の `KeyPrefixEquals` の値を置き換えるオブジェクトキー名のプレフィックス。 同レベルの要素の 1 つが指定されている場合、`ReplaceKeyPrefixWith` は省略可能です。これを指定できるのは、`ReplaceKeyWith` が指定されていない場合のみです。  | 
| ReplaceKeyWith |  レスポンスとして返される `Location` ヘッダーで使用されるオブジェクトキー。 同レベルの要素の 1 つが指定されている場合、`ReplaceKeyWith` は省略可能です。これを指定できるのは、`ReplaceKeyPrefixWith` が指定されていない場合のみです。  | 
| HttpRedirectCode |  レスポンスとして返される `Location` ヘッダーで使用される HTTP リダイレクトコード。 同レベルの要素の 1 つが指定されている場合、`HttpRedirectCode` は省略可能です。  | 

#### リダイレクトルールの例
<a name="redirect-rule-examples"></a>

次の例では、一般的なリダイレクトタスクについて説明します。

**重要**  
新しい Amazon S3 コンソールでリダイレクトルールを作成するには、JSON を使用する必要があります。

**Example 1: キープレフィックスの名前を変更した後にリダイレクトする**  
バケットに次のオブジェクトが含まれているとします。  
+ index.html
+ docs/article1.html
+ docs/article2.html
フォルダ名を `docs/` から `documents/` に変更することにしました。この変更を行った後は、プレフィックス `docs/` に対するリクエストを `documents/` にリダイレクトする必要があります。たとえば、`docs/article1.html` に対するリクエストを `documents/article1.html` にリダイレクトします。  
この場合、次のルーティングルールをウェブサイト設定に追加します。  

```
[
    {
        "Condition": {
            "KeyPrefixEquals": "docs/"
        },
        "Redirect": {
            "ReplaceKeyPrefixWith": "documents/"
        }
    }
]
```

```
  <RoutingRules>
    <RoutingRule>
    <Condition>
      <KeyPrefixEquals>docs/</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
    </Redirect>
    </RoutingRule>
  </RoutingRules>
```

**Example 2: 削除されたフォルダに対するリクエストをページにリダイレクトする**  
`images/`フォルダ (つまり、キープレフィックスが `images/` のすべてのオブジェクト) を削除するとします。ルーティングルールを追加し、その中で、キープレフィックス `images/` を持つオブジェクトに対するリクエストをすべて `folderdeleted.html` というページにリダイレクトするように設定します。  

```
[
    {
        "Condition": {
            "KeyPrefixEquals": "images/"
        },
        "Redirect": {
            "ReplaceKeyWith": "folderdeleted.html"
        }
    }
]
```

```
  <RoutingRules>
    <RoutingRule>
    <Condition>
       <KeyPrefixEquals>images/</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith>
    </Redirect>
    </RoutingRule>
  </RoutingRules>
```

**Example 3: 特定のパスがある別のドメインにリダイレクトする**  
特定のパスのリクエストを別のドメインにリダイレクトするとします。例えば、`/redirect/me` のリクエストを `https://example.com/new/path` にリダイレクトします。  
`HostName` と `ReplaceKeyWith` の両方を同時に使用する場合、Amazon S3 はホスト名と置換キーをスラッシュで連結してリダイレクト URL を作成します。したがって、`ReplaceKeyWith` 値には先頭のスラッシュを含めないでください。Amazon S3 は、ホスト名と置換キーの間にスラッシュを自動的に追加します。  

```
[
    {
        "Condition": {
            "KeyPrefixEquals": "redirect/me"
        },
        "Redirect": {
            "HostName": "example.com",
            "ReplaceKeyWith": "new/path"
        }
    }
]
```

```
  <RoutingRules>
    <RoutingRule>
    <Condition>
      <KeyPrefixEquals>redirect/me</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <HostName>example.com</HostName>
      <ReplaceKeyWith>new/path</ReplaceKeyWith>
    </Redirect>
    </RoutingRule>
  </RoutingRules>
```
この設定では、`https://yourbucket.s3-website-region.amazonaws.com/redirect/me` のリクエストを `https://example.com/new/path` にリダイレクトします。`ReplaceKeyWith` は、先頭のスラッシュなしで `new/path` に設定されます。

**Example 4: HTTP エラーの場合にリダイレクトする**  
リクエストされたオブジェクトが見つからないときに、リクエストを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにリダイレクトするとします。リダイレクトルールを追加し、その中で、HTTP ステータスコード 404 (Not Found) が返されたときに、リクエストを処理する Amazon EC2 インスタンスにリダイレクトするように設定します。  
次に示す例では、オブジェクトキープレフィックス `report-404/` もリダイレクトに挿入しています。たとえば、`ExamplePage.html` というページをリクエストした結果が HTTP 404 エラーとなったときは、指定の Amazon EC2 インスタンスにある `report-404/ExamplePage.html` というページにリクエストをリダイレクトします。ルーティングルールが何も設定されていない場合に HTTP エラー 404 が発生したときは、設定内で指定されているエラードキュメントが返されます。  

```
[
    {
        "Condition": {
            "HttpErrorCodeReturnedEquals": "404"
        },
        "Redirect": {
            "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
            "ReplaceKeyPrefixWith": "report-404/"
        }
    }
]
```

```
  <RoutingRules>
    <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals >
    </Condition>
    <Redirect>
      <HostName>ec2-11-22-333-44.compute-1.amazonaws.com</HostName>
      <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith>
    </Redirect>
    </RoutingRule>
  </RoutingRules>
```

## オブジェクトのリクエストをリダイレクトする
<a name="redirect-requests-object-metadata"></a>

オブジェクトのメタデータでウェブサイトのリダイレクト場所を設定することで、オブジェクトのリクエストを別のオブジェクトまたは URL にリダイレクトできます。リダイレクトを設定するには、オブジェクトメタデータに `x-amz-website-redirect-location` プロパティを追加します。Amazon S3 コンソールで、オブジェクトのメタデータ内の [**Website Redirect Location (ウェブサイトのリダイレクト場所)**] を設定できます。[Amazon S3 API](#page-redirect-using-rest-api) を使用する場合は、`x-amz-website-redirect-location` を設定します。ウェブサイトは 301 リダイレクトとしてオブジェクトを解釈します。

リクエストを別のオブジェクトにリダイレクトするには、リダイレクト場所をターゲットオブジェクトのキーに設定します。リクエストを外部 URL にリダイレクトするには、リダイレクト場所を目的の URL に設定します。オブジェクトメタデータの詳細については、[システムで定義されたオブジェクトメタデータ](UsingMetadata.md#SysMetadata) を参照してください。

ページリダイレクトを設定するときに、ソースオブジェクトコンテンツを維持することも、削除することもできます。たとえば、バケットに `page1.html` オブジェクトがある場合、このページのリクエストを別のオブジェクト `page2.html` にリダイレクトできます。これには2つのオプションがあります。
+ `page1.html` オブジェクトのコンテンツを維持して、ページリクエストをリダイレクトします。
+ `page1.html` のコンテンツを削除し、`page1.html` という名前の 0 バイトのオブジェクトをアップロードして、既存のオブジェクトを置き換え、ページリクエストをリダイレクトします。

### S3 コンソールの使用
<a name="page-redirect-using-console"></a>

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. [**Buckets (バケット)**] リストで、静的ウェブサイトとして設定したバケットの名前を選択します (例: `example.com`)。

1. [**Objects (オブジェクト)**] でオブジェクトを選択します。

1. [**Actions (アクション)**] を選択し、[**Edit metadata (メタデータの編集)**] を選択します。

1. [**メタデータ**] を選択します。

1. [**Add Metadata (メタデータの追加)**] を選択します。

1. [**Type (タイプ)**] で、[**System Defined (システム定義)**] を選択します。

1. [**Key (キー)**]で、[**x-amz-website-redirect-location**] を選択します。

1. [**値**] に、リダイレクト先のオブジェクトのキー名を入力します (例: `/page2.html`)。

   同じバケット内の別のオブジェクトでは、値の `/` プレフィックスが必要です。値を外部 URL に設定することもできます (例: `http://www.example.com`)。

1. [**Edit metadata (メタデータの編集)**] を選択します。

### REST API の使用
<a name="page-redirect-using-rest-api"></a>

次の Amazon S3 API アクションは、リクエストの `x-amz-website-redirect-location` ヘッダーをサポートしています。Amazon S3 はオブジェクトメタデータのヘッダー値を `x-amz-website-redirect-location` として保存します。
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [PUT Object − Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)

ウェブサイトホスティング用に設定されたバケットには、ウェブサイトエンドポイントと REST エンドポイントの両方があります。リクエストされたページが 301 リダイレクトとして設定されている場合の結果は、リクエストのエンドポイントに応じて、次のようになると考えられます。
+ **リージョン固有のウェブサイトエンドポイント – ** Amazon S3 は、`x-amz-website-redirect-location` プロパティの値に従ってページリクエストをリダイレクトします。
+ **REST エンドポイント – ** Amazon S3 はページリクエストをリダイレクトしません。リクエストされたオブジェクトを返します。

エンドポイントの詳細については、「[ウェブサイトエンドポイントと REST API エンドポイントの主な違い](WebsiteEndpoints.md#WebsiteRestEndpointDiff)」を参照してください。

ページリダイレクトを設定する場合、オブジェクトのコンテンツを維持するか、削除できます。たとえば、バケットに `page1.html` というオブジェクトがあるとします。
+ `page1.html` のコンテンツを維持し、ページリクエストのリダイレクトのみを行う場合は、[PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html) リクエストを送信して新しい `page1.html` オブジェクトを作成し、送信元として既存の `page1.html` オブジェクトを使用するように設定します。リクエストに、`x-amz-website-redirect-location` ヘッダーを設定します。リクエストが完了すると、元のページのコンテンツは変更されないままですが、Amazon S3 によりページへのすべてのリクエストは指定されたリダイレクト場所にリダイレクトされます。
+ `page1.html` オブジェクトのコンテンツを削除してこのページに対するリクエストをリダイレクトするには、PUT Object リクエストを送信して 0 バイトのオブジェクトをアップロードします。このオブジェクトには、同じオブジェクトキー `page1.html` を付けます。この PUT リクエストの中で、`x-amz-website-redirect-location` の `page1.html` を新しいオブジェクトに設定します。このリクエストが完了すると、`page1.html` にはコンテンツがない状態になり、リクエストは `x-amz-website-redirect-location` で指定された場所にリダイレクトされます。

[GET Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html) アクションを使用して、他のオブジェクトメタデータと一緒にオブジェクトを取得すると、Amazon S3 はレスポンスで `x-amz-website-redirect-location` ヘッダーを返します。

# Cross−Origin Resource Sharing (CORS) の使用
<a name="cors"></a>

Cross−Origin Resource Sharing (CORS) は、特定のドメインにロードされたクライアントウェブアプリケーションが異なるドメイン内のリソースと通信する方法を定義します。Amazon S3 の CORS のサポートによって、Amazon S3 でリッチなクライアント側ウェブアプリケーションを構築し、Amazon S3 リソースへのクロスオリジンアクセスを選択的に許可できます。

このセクションでは、CORS の概要を示します。サブトピックでは、Amazon S3 コンソールを使用するか、Amazon S3 REST API や AWS SDK を使用して、プログラムによって CORS を有効にする方法について説明します。

## Cross−Origin Resource Sharing: ユースケースのシナリオ
<a name="example-scenarios-cors"></a>

CORS のユースケースの例を以下に示します。

**シナリオ 1**  
「`website`」で説明されているように、[Amazon S3 を使用して静的ウェブサイトをホスティングする](WebsiteHosting.md) という名前の Amazon S3 バケットでウェブサイトをホストしているとします。ユーザーは、次のウェブサイトエンドポイントをロードします。

```
http://website.s3-website.us-east-1.amazonaws.com
```

このバケットに保存されているウェブページで JavaScript を使用し、バケットの Amazon S3 の API エンドポイント `website.s3.us-east-1.amazonaws.com` を使用して、同じバケットに対して認証済みの GET および PUT リクエストを行います。ブラウザは通常、それらのリクエストを許可しないように、JavaScript をブロックしますが、CORS を使用することにより、`website.s3-website.us-east-1.amazonaws.com` からのクロスオリジンリクエストを明示的に有効にするようにバケットを設定できます。

**シナリオ 2**  
S3 バケットからウェブフォントをホストする必要があるとします。ここでも、ブラウザでウェブフォントを読み込むために CORS チェック (プリフライトチェックと呼ばれます) が必要です。ウェブフォントをホストしているバケットを、いずれのオリジンもこれらのリクエストを実行できるように設定します。

## Amazon S3 でのバケットの CORS 設定の評価方法
<a name="cors-eval-criteria"></a>

Amazon S3 がブラウザからプリフライトリクエストを受け取ると、バケットの CORS 設定を評価し、受信ブラウザリクエストに一致する最初の `CORSRule` ルールを使用して、クロスオリジンリクエストを有効にします。ルールが一致するには、次の条件を満たしている必要があります。
+ バケットへの CORS リクエストの `Origin` ヘッダーは、CORS 設定の `AllowedOrigins` エレメントのオリジンと一致している必要があります。
+ バケットへの CORS リクエストの `Access-Control-Request-Method` で指定されている HTTP メソッドは、CORS 設定の `AllowedMethods` エレメントに含まれているメソッドと一致している必要があります。
+ プリフライトリクエストの `Access-Control-Request-Headers` ヘッダーに含まれているヘッダーは、CORS 設定の `AllowedHeaders` エレメントのヘッダーと一致している必要があります。

**注記**  
バケットの CORS 設定を有効にすると、ACL とポリシーが引き続き適用されます。

## Object Lambda アクセスポイントで CORS をサポートする方法
<a name="cors-olap-cors"></a>

S3 Object Lambda がブラウザからリクエストを受信するか、リクエストに `Origin` ヘッダーが含まれている場合、S3 Object Lambda は常に `"AllowedOrigins":"*"` ヘッダーフィールドを追加します。

CORS の使用の詳細については、次のトピックを参照してください。

**Topics**
+ [Cross−Origin Resource Sharing: ユースケースのシナリオ](#example-scenarios-cors)
+ [Amazon S3 でのバケットの CORS 設定の評価方法](#cors-eval-criteria)
+ [Object Lambda アクセスポイントで CORS をサポートする方法](#cors-olap-cors)
+ [CORS 設定のエレメント](ManageCorsUsing.md)
+ [Cross−Origin Resource Sharing (CORS) の設定](enabling-cors-examples.md)
+ [CORS のテスト](testing-cors.md)
+ [CORS のトラブルシューティング](cors-troubleshooting.md)

# CORS 設定のエレメント
<a name="ManageCorsUsing"></a>

クロスオリジンリクエストを許可するようバケットを設定するには、CORS 設定を作成します。CORS 設定は、バケットへのアクセスを許可するオリジン、各オリジンでサポートされるオペレーション (HTTP メソッド)、その他のオペレーション固有情報を識別するエレメントを持つ XML ドキュメントです。設定には、最大 100 のルールを追加できます。CORS 設定を `cors` サブリソースとしてバケットに追加できます。

S3 コンソールで CORS を設定する場合は、JSON を使用して CORS 設定を作成する必要があります。新しい S3 コンソールでは、JSON CORS 設定のみがサポートされます。

CORS 設定とそのエレメントの詳細については、以下のトピックを参照してください。CORS 設定を追加する方法については、[Cross−Origin Resource Sharing (CORS) の設定](enabling-cors-examples.md) を参照してください。

**重要**  
S3 コンソールでは、CORS 設定は JSON である必要があります。

**Topics**
+ [`AllowedMethods` 要素](#cors-allowed-methods)
+ [`AllowedOrigins` 要素](#cors-allowed-origin)
+ [`AllowedHeaders` 要素](#cors-allowed-headers)
+ [`ExposeHeaders` 要素](#cors-expose-headers)
+ [`MaxAgeSeconds` 要素](#cors-max-age)
+ [CORS 設定の例](#cors-example-1)

## `AllowedMethods` 要素
<a name="cors-allowed-methods"></a>

CORS 設定では、`AllowedMethods` エレメントに次の値を指定できます。
+ GET
+ PUT
+ POST
+ DELETE
+ HEAD

## `AllowedOrigins` 要素
<a name="cors-allowed-origin"></a>

`AllowedOrigins` エレメントに、クロスドメインリクエストを許可するオリジンを指定します (` http://www.example.com` など)。オリジン文字列には、1 つのワイルドカード文字 (`*`) のみを含めることができます。例えば、`http://*.example.com` などです。オプションで、オリジンに `*` を指定して、すべてのオリジンでクロスオリジンリクエストを送信できるようにすることができます。さらに、`https` を指定して、セキュリティで保護されたオリジンのみを有効にすることもできます。

## `AllowedHeaders` 要素
<a name="cors-allowed-headers"></a>

`AllowedHeaders` エレメントは、`Access-Control-Request-Headers` ヘッダーによって、プリフライトリクエストで許可されるヘッダーを指定します。`Access-Control-Request-Headers` ヘッダー内の各ヘッダー名は、エレメントの対応するエントリと一致している必要があります。Amazon S3 は、レスポンスで、リクエストされたヘッダーのうち許可されたヘッダーのみを送信します。Amazon S3 へのリクエストで使用できるヘッダーのサンプルリストについては、[Amazon Simple Storage Service API リファレンス](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html)の*一般的なリクエストヘッダー* を参照してください。

設定内の各 AllowedHeaders 文字列には、最大 1 つのワイルドカード文字 (\$1) を含めることができます。例えば、`<AllowedHeader>x-amz-*</AllowedHeader>` は Amazon 固有のすべてのヘッダーを有効にします。

## `ExposeHeaders` 要素
<a name="cors-expose-headers"></a>

各 `ExposeHeader` エレメントは、顧客がアプリケーションから (例えば、JavaScript `XMLHttpRequest` オブジェクトから) アクセスできるようにするレスポンス内のヘッダーを識別します。一般的な Amazon S3 レスポンスヘッダーのリストについては、[Amazon Simple Storage Service API リファレンス](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html)の*一般的なリクエストヘッダー* を参照してください。

## `MaxAgeSeconds` 要素
<a name="cors-max-age"></a>

`MaxAgeSeconds` エレメントは、リソース、HTTP メソッド、およびオリジンによって識別されたプリフライトリクエストのレスポンスをブラウザでキャッシュできる時間を秒単位で指定します。

## CORS 設定の例
<a name="cors-example-1"></a>

ウェブサイトへのアクセスに Amazon S3 ウェブサイトエンドポイントを使用する代わりに、所有するドメイン、例えば `example1.com` を使用してコンテンツを配信できます。独自のドメインの使用については、[チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](website-hosting-custom-domain-walkthrough.md) を参照してください。

次の CORS 設定の例には 3 つのルールがあり、`CORSRule` エレメントとして指定されています。
+ 最初のルールは、`http://www.example1.com` オリジンからのクロスオリジン PUT、POST、および DELETE リクエストを許可します。このルールは、`Access-Control-Request-Headers` ヘッダーによって、プリフライト OPTIONS リクエスト内のすべてのヘッダーも許可します。プリフライト OPTIONS リクエストへのレスポンスとして、Amazon S3 はリクエストされたヘッダーを返します。
+ 2 つ目のルールは最初のルールと同じクロスオリジンリクエストを許可しますが、このルールは別のオリジン `http://www.example2.com` に適用されます。
+ 3 つ目のルールは、すべてのオリジンからのクロスオリジン GET リクエストを許可します。ワイルドカード文字 `*` は、すべてのオリジンを表します。

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example1.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example2.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]
```

------
#### [ XML ]

```
<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>http://www.example1.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>http://www.example2.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>GET</AllowedMethod>
 </CORSRule>
</CORSConfiguration>
```

------

次の CORS 設定に示すように、CORS 設定ではオプションの設定パラメータも使用できます。この例で、CORS 設定は `http://www.example.com` オリジンからのクロスオリジン PUT、POST、および DELETE の各リクエストを許可します。

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example.com"
        ],
        "ExposeHeaders": [
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2"
        ],
        "MaxAgeSeconds": 3000
    }
]
```

------
#### [ XML ]

```
<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>http://www.example.com</AllowedOrigin>
   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>
   <AllowedHeader>*</AllowedHeader>
  <MaxAgeSeconds>3000</MaxAgeSeconds>
  <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
  <ExposeHeader>x-amz-request-id</ExposeHeader>
  <ExposeHeader>x-amz-id-2</ExposeHeader>
 </CORSRule>
</CORSConfiguration>
```

------

前述の設定の `CORSRule` エレメントには、次のオプションのエレメントが含まれます。
+ `MaxAgeSeconds`— 指定したリソースのプリフライト OPTIONS リクエストへの Amazon S3 レスポンスをブラウザでキャッシュする時間を秒単位で指定します (この例では 3,000)。レスポンスのキャッシュにより、元のリクエストが繰り返された場合に、ブラウザは Amazon S3 にプリフライトリクエストを送信する必要がありません。
+ `ExposeHeaders` − 顧客がアプリケーションから (例えば JavaScript `x-amz-server-side-encryption` オブジェクトから) アクセスできるレスポンスヘッダー (この例では `x-amz-request-id`、`x-amz-id-2`、および `XMLHttpRequest`) を識別します。

# Cross−Origin Resource Sharing (CORS) の設定
<a name="enabling-cors-examples"></a>

Cross−Origin Resource Sharing (CORS) は、特定のドメインにロードされたクライアントウェブアプリケーションが異なるドメイン内のリソースと通信する方法を定義します。Amazon S3 の CORS のサポートによって、Amazon S3 でリッチなクライアント側ウェブアプリケーションを構築し、Amazon S3 リソースへのクロスオリジンアクセスを選択的に許可できます。

このセクションでは、Amazon S3 コンソール、Amazon S3 REST API、および AWS SDK を使用して CORS を有効にする方法について説明します。クロスオリジンリクエストを許可するようバケットを設定するには、CORS 設定をバケットに追加します。CORS 設定は、バケットへのアクセスを許可するオリジン、各オリジンでサポートされるオペレーション (HTTP メソッド)、およびその他のオペレーション固有情報を識別するルールを定義するドキュメントです。S3 コンソールでは、CORS 設定は JSON ドキュメントである必要があります。

JSON および XML での CORS 設定の例については、[CORS 設定のエレメント](ManageCorsUsing.md) を参照してください。

## S3 コンソールの使用
<a name="add-cors-configuration"></a>

このセクションでは、Amazon S3 コンソールを使用して Cross−Origin Resource Sharing (CORS) 設定を S3 バケットに追加する方法について説明します。

バケットで CORS を有効にすると、アクセスコントロールリスト (ACL) およびその他のアクセス許可ポリシーが引き続き適用されます。

**重要**  
S3 コンソールでは、CORS 設定は JSON である必要があります。JSON および XML での CORS 設定の例については、[CORS 設定のエレメント](ManageCorsUsing.md) を参照してください。

**CORS 設定を S3 バケットに追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、バケットポリシーを作成するバケットの名前を選択します。

1. [**Permissions**] を選択します。

1. **[CORS (クロスオリジンリソース共有)]** セクションで、**[編集]** を選択します。

1. [**CORS configuration editor (CORS 構成エディタ)**] テキストボックスに、新しい CORS 設定を入力またはコピーして貼り付けるか、既存の設定を編集します。

   CORS 設定は JSON ファイルです。エディタに入力するテキストは有効な JSON である必要があります。詳細については、[CORS 設定のエレメント](ManageCorsUsing.md) を参照してください。

1. [**Save changes**] (変更を保存) をクリックします。
**注記**  
Amazon S3 では、[**CORS configuration editor (CORS 構成エディタ)**] のタイトルの横に、バケットの Amazon リソースネーム (ARN) が表示されます。ARN の詳細については、*Amazon Web Services 全般のリファレンス* の「[Amazon リソースネーム (ARN) および AWS サービスの名前空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください。

## AWS SDK の使用
<a name="ManageCorsUsingSDK"></a>

AWS SDK を使用して、バケットの Cross−Origin Resource Sharing (CORS) を管理できます。CORS の詳細については、[Cross−Origin Resource Sharing (CORS) の使用](cors.md) を参照してください。

 以下の例を参照してください。
+ CORS 設定を作成し、バケット上で設定を指定する
+ 設定を取得し、ルールを追加してその設定を変更する
+ 変更された設定をバケットに追加する
+ 設定を削除する

------
#### [ Java ]

**Example**  

**Example**  
 作業サンプルの作成方法およびテスト方法については、「AWS SDK for Java のデベロッパーガイド」の「[使用開始](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html)」を参照してください。  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketCrossOriginConfiguration;
import com.amazonaws.services.s3.model.CORSRule;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CORS {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";

        // Create two CORS rules.
        List<CORSRule.AllowedMethods> rule1AM = new ArrayList<CORSRule.AllowedMethods>();
        rule1AM.add(CORSRule.AllowedMethods.PUT);
        rule1AM.add(CORSRule.AllowedMethods.POST);
        rule1AM.add(CORSRule.AllowedMethods.DELETE);
        CORSRule rule1 = new CORSRule().withId("CORSRule1").withAllowedMethods(rule1AM)
                .withAllowedOrigins(Arrays.asList("http://*.example.com"));

        List<CORSRule.AllowedMethods> rule2AM = new ArrayList<CORSRule.AllowedMethods>();
        rule2AM.add(CORSRule.AllowedMethods.GET);
        CORSRule rule2 = new CORSRule().withId("CORSRule2").withAllowedMethods(rule2AM)
                .withAllowedOrigins(Arrays.asList("*")).withMaxAgeSeconds(3000)
                .withExposedHeaders(Arrays.asList("x-amz-server-side-encryption"));

        List<CORSRule> rules = new ArrayList<CORSRule>();
        rules.add(rule1);
        rules.add(rule2);

        // Add the rules to a new CORS configuration.
        BucketCrossOriginConfiguration configuration = new BucketCrossOriginConfiguration();
        configuration.setRules(rules);

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Add the configuration to the bucket.
            s3Client.setBucketCrossOriginConfiguration(bucketName, configuration);

            // Retrieve and display the configuration.
            configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
            printCORSConfiguration(configuration);

            // Add another new rule.
            List<CORSRule.AllowedMethods> rule3AM = new ArrayList<CORSRule.AllowedMethods>();
            rule3AM.add(CORSRule.AllowedMethods.HEAD);
            CORSRule rule3 = new CORSRule().withId("CORSRule3").withAllowedMethods(rule3AM)
                    .withAllowedOrigins(Arrays.asList("http://www.example.com"));

            rules = configuration.getRules();
            rules.add(rule3);
            configuration.setRules(rules);
            s3Client.setBucketCrossOriginConfiguration(bucketName, configuration);

            // Verify that the new rule was added by checking the number of rules in the
            // configuration.
            configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
            System.out.println("Expected # of rules = 3, found " + configuration.getRules().size());

            // Delete the configuration.
            s3Client.deleteBucketCrossOriginConfiguration(bucketName);
            System.out.println("Removed CORS configuration.");

            // Retrieve and display the configuration to verify that it was
            // successfully deleted.
            configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
            printCORSConfiguration(configuration);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    private static void printCORSConfiguration(BucketCrossOriginConfiguration configuration) {
        if (configuration == null) {
            System.out.println("Configuration is null.");
        } else {
            System.out.println("Configuration has " + configuration.getRules().size() + " rules\n");

            for (CORSRule rule : configuration.getRules()) {
                System.out.println("Rule ID: " + rule.getId());
                System.out.println("MaxAgeSeconds: " + rule.getMaxAgeSeconds());
                System.out.println("AllowedMethod: " + rule.getAllowedMethods());
                System.out.println("AllowedOrigins: " + rule.getAllowedOrigins());
                System.out.println("AllowedHeaders: " + rule.getAllowedHeaders());
                System.out.println("ExposeHeader: " + rule.getExposedHeaders());
                System.out.println();
            }
        }
    }
}
```

------
#### [ .NET ]

**Example**  
コード例を設定および実行する方法の詳細については、「*AWS SDK for .NET デベロッパーガイド*」の「[AWS SDK for .NET の開始方法](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)」 を参照してください。  

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class CORSTest
    {
        private const string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; 
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            CORSConfigTestAsync().Wait();
        }
        private static async Task CORSConfigTestAsync()
        {
            try
            {
                // Create a new configuration request and add two rules    
                CORSConfiguration configuration = new CORSConfiguration
                {
                    Rules = new System.Collections.Generic.List<CORSRule>
                        {
                          new CORSRule
                          {
                            Id = "CORSRule1",
                            AllowedMethods = new List<string> {"PUT", "POST", "DELETE"},
                            AllowedOrigins = new List<string> {"http://*.example.com"}
                          },
                          new CORSRule
                          {
                            Id = "CORSRule2",
                            AllowedMethods = new List<string> {"GET"},
                            AllowedOrigins = new List<string> {"*"},
                            MaxAgeSeconds = 3000,
                            ExposeHeaders = new List<string> {"x-amz-server-side-encryption"}
                          }
                        }
                };

                // Add the configuration to the bucket. 
                await PutCORSConfigurationAsync(configuration);

                // Retrieve an existing configuration. 
                configuration = await RetrieveCORSConfigurationAsync();

                // Add a new rule.
                configuration.Rules.Add(new CORSRule
                {
                    Id = "CORSRule3",
                    AllowedMethods = new List<string> { "HEAD" },
                    AllowedOrigins = new List<string> { "http://www.example.com" }
                });

                // Add the configuration to the bucket. 
                await PutCORSConfigurationAsync(configuration);

                // Verify that there are now three rules.
                configuration = await RetrieveCORSConfigurationAsync();
                Console.WriteLine();
                Console.WriteLine("Expected # of rulest=3; found:{0}", configuration.Rules.Count);
                Console.WriteLine();
                Console.WriteLine("Pause before configuration delete. To continue, click Enter...");
                Console.ReadKey();

                // Delete the configuration.
                await DeleteCORSConfigurationAsync();

                // Retrieve a nonexistent configuration.
                configuration = await RetrieveCORSConfigurationAsync();
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }

        static async Task PutCORSConfigurationAsync(CORSConfiguration configuration)
        {

            PutCORSConfigurationRequest request = new PutCORSConfigurationRequest
            {
                BucketName = bucketName,
                Configuration = configuration
            };

            var response = await s3Client.PutCORSConfigurationAsync(request);
        }

        static async Task<CORSConfiguration> RetrieveCORSConfigurationAsync()
        {
            GetCORSConfigurationRequest request = new GetCORSConfigurationRequest
            {
                BucketName = bucketName

            };
            var response = await s3Client.GetCORSConfigurationAsync(request);
            var configuration = response.Configuration;
            PrintCORSRules(configuration);
            return configuration;
        }

        static async Task DeleteCORSConfigurationAsync()
        {
            DeleteCORSConfigurationRequest request = new DeleteCORSConfigurationRequest
            {
                BucketName = bucketName
            };
            await s3Client.DeleteCORSConfigurationAsync(request);
        }

        static void PrintCORSRules(CORSConfiguration configuration)
        {
            Console.WriteLine();

            if (configuration == null)
            {
                Console.WriteLine("\nConfiguration is null");
                return;
            }

            Console.WriteLine("Configuration has {0} rules:", configuration.Rules.Count);
            foreach (CORSRule rule in configuration.Rules)
            {
                Console.WriteLine("Rule ID: {0}", rule.Id);
                Console.WriteLine("MaxAgeSeconds: {0}", rule.MaxAgeSeconds);
                Console.WriteLine("AllowedMethod: {0}", string.Join(", ", rule.AllowedMethods.ToArray()));
                Console.WriteLine("AllowedOrigins: {0}", string.Join(", ", rule.AllowedOrigins.ToArray()));
                Console.WriteLine("AllowedHeaders: {0}", string.Join(", ", rule.AllowedHeaders.ToArray()));
                Console.WriteLine("ExposeHeader: {0}", string.Join(", ", rule.ExposeHeaders.ToArray()));
            }
        }
    }
}
```

------

## REST API の使用
<a name="EnableCorsUsingREST"></a>

バケットで CORS 設定を指定するには、AWS マネジメントコンソールを使用できます。必要に応じて、REST リクエストを直接送信することもできます。*Amazon Simple Storage Service API リファレンス*の以下のセクションでは、CORS 設定に関連する REST API アクションについて説明しています。
+ [PutBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTcors.html)
+ [GetBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html)
+ [DeleteBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEcors.html)
+ [OPTIONS オブジェクト](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html)

# CORS のテスト
<a name="testing-cors"></a>

CORS 設定をテストするために、CORS プリフライトリクエストを `OPTIONS` メソッドで送信して、リクエストの送信が許容できる場合にサーバーが応答できるようにします。Amazon S3 がブラウザからプリフライトリクエストを受け取ると、S3 はバケットの CORS 設定を評価し、受信ブラウザリクエストに一致する最初の `CORSRule` ルールを使用して、クロスオリジンリクエストを有効にします。ルールが一致するには、次の条件を満たしている必要があります。
+ バケットへの CORS リクエストの `Origin` ヘッダーは、CORS 設定の `AllowedOrigins` エレメントのオリジンと一致している必要があります。
+ バケットへの CORS リクエストの `Access-Control-Request-Method` で指定されている HTTP メソッドは、CORS 設定の `AllowedMethods` エレメントに含まれているメソッドと一致している必要があります。
+ プリフライトリクエストの `Access-Control-Request-Headers` ヘッダーに含まれているヘッダーは、CORS 設定の `AllowedHeaders` エレメントのヘッダーと一致している必要があります。

CORS 設定の例を次に示します。CORS 設定を作成するには、「[CORS の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)」を参照してください。CORS 設定の例については、「[CORS 設定のエレメント](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html)」を参照してください。

CORS ルールの設定とトラブルシューティングのガイダンスについては、AWS re:Post ナレッジセンターの「[Amazon S3 で CORS を設定し、cURL を使用して CORS ルールを確認する方法](https://repost.aws/knowledge-center/s3-configure-cors)」を参照してください。

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "Authorization"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example1.com"
        ],
        "ExposeHeaders":  [
             "x-amz-meta-custom-header"
        ]
    
    }
]
```

------

CORS 設定をテストするには、次の CURL コマンドを使用してプリフライト `OPTIONS` チェックを送信できます。CURL は、S3 とのやり取りに使用できるコマンドラインツールです。詳細については、「[CURL](https://curl.se/)」を参照してください。

```
 curl -v -X OPTIONS \
  -H "Origin: http://www.example1.com" \
  -H "Access-Control-Request-Method: PUT" \
  -H "Access-Control-Request-Headers: Authorization" \
  -H "Access-Control-Expose-Headers: x-amz-meta-custom-header"\
     "http://bucket_name.s3.amazonaws.com/object_prefix_name"
```

上記の例では、`curl -v -x OPTIONS` コマンドを使用してプリフライトリクエストを S3 に送信し、S3 がクロスオリジン `http://www.example1.com` からオブジェクトに `PUT` リクエストを送信することを許可しているかどうかを問い合わせます。ヘッダー `Access-Control-Request-Headers` と `Access-Control-Expose-Headers` はオプションです。
+ プリフライト `OPTIONS` リクエストの `Access-Control-Request-Method` ヘッダーに応答して、Amazon S3 は、リクエストされたメソッドが一致する場合に、許可されたメソッドのリストを返します。
+ プリフライト `OPTIONS` リクエストの `Access-Control-Request-Headers` ヘッダーに応答して、Amazon S3 は、リクエストされたヘッダーが一致する場合に、許可されたヘッダーのリストを返します。
+ プリフライト `OPTIONS` リクエストの `Access-Control-Expose-Headers` ヘッダーに応答して、Amazon S3 は、リクエストされたヘッダーがブラウザで実行されているスクリプトによってアクセスできるヘッダーと一致する場合に、許可されたヘッダーのリストを返します。

**注記**  
プリフライトリクエストを送信するときに、いずれかの CORS リクエストヘッダーが許可されていない場合、レスポンス CORS ヘッダーは返されません。

このプリフライト `OPTIONS` リクエストに応答して、`200 OK` レスポンスを受け取ります。CORS のテスト時に受信される一般的なエラーコードと、CORS 関連の問題を解決するための詳細については、「[CORS のトラブルシューティング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html)」を参照してください。

```
< HTTP/1.1 200 OK
< Date: Fri, 12 Jul 2024 00:23:51 GMT
< Access-Control-Allow-Origin: http://www.example1.com
< Access-Control-Allow-Methods: GET, PUT, POST, DELETE 
< Access-Control-Allow-Headers: Authorization
< Access-Control-Expose-Headers: x-amz-meta-custom-header
< Access-Control-Allow-Credentials: true
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
< Server: AmazonS3
< Content-Length: 0
```

# CORS のトラブルシューティング
<a name="cors-troubleshooting"></a>

次のトピックは S3 に関連する CORS の一般的な問題をトラブルシューティングするのに役立ちます。

**Topics**
+ [403 Forbidden エラー - このバケットでは CORS が有効になっていません](#cors-not-enabled)
+ [403 Forbidden エラー - この CORS リクエストは許可されていません](#cors-not-enabled)
+ [CORS レスポンスにヘッダーが見つからない](#Headers-not-found)
+ [S3 プロキシ統合での CORS に関する考慮事項](#cors-in-proxy)

## 403 Forbidden エラー: このバケットでは CORS が有効になっていません
<a name="cors-not-enabled"></a>

次の `403 Forbidden` エラーは、クロスオリジンリクエストが Amazon S3 に送信されたものの、CORS が S3 バケットに設定されていない場合に発生します。

 エラー: HTTP/1.1 403 Forbidden CORS レスポンス: このバケットでは CORS が有効になっていません。

CORS 設定は、バケットへのアクセスを許可するオリジン、各オリジンでサポートされるオペレーション (HTTP メソッド)、その他のオペレーション固有情報を識別するルールを持つ XML ドキュメント、つまりポリシーです。Amazon S3 コンソール、AWS SDK、および REST API を使用して S3 で [CORS を設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)する方法を参照してください。CORS の詳細と CORS 設定の例については、「[CORS 設定のエレメント](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html#cors-example-1)」を参照してください。

## 403 Forbidden エラー: この CORS リクエストは許可されていません
<a name="cors-not-enabled"></a>

次の `403 Forbidden` エラーは、CORS 設定の CORS ルールがリクエスト内のデータと一致しない場合に発生します。

エラー:  HTTP/1.1 403 Forbidden CORS レスポンス: この CORS リクエストは許可されていません。

この `403 Forbidden` エラーは、さまざまな理由で発生する可能性があります。
+ オリジンが許可されない。
+ メソッドが許可されない。
+ リクエストされたヘッダーが許可されない。

Amazon S3 が受信するリクエストごとに、リクエスト内のデータと一致する CORS ルールが CORS 設定に含まれている必要があります。

### オリジンが許可されない
<a name="Origin-not-allowed"></a>

 バケットへの CORS リクエストの `Origin` ヘッダーは、CORS 設定の `AllowedOrigins` エレメントのオリジンと一致している必要があります。`AllowedOrigins` エレメントで使用されるワイルドカード文字 (`"*"`) は、すべての HTTP メソッドと一致することになります。`AllowedOrigins` エレメントを更新する方法の詳細については、「[Cross−Origin Resource Sharing (CORS) の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)」を参照してください。

 例えば、`AllowedOrigins` エレメントに `http://www.example1.com` ドメインのみが含まれている場合、`http://www.example2.com` ドメインから送信された CORS リクエストには `403 Forbidden` エラーが返されます。

次の例は、`AllowedOrigins` エレメントに `http://www.example1.com` ドメインが含まれる CORS 設定の一部を示しています。

```
"AllowedOrigins":[
   "http://www.example1.com"
]
```

`http://www.example2.com` ドメインから送信された CORS リクエストを成功させるには、CORS 設定の `AllowedOrigins` エレメントに `http://www.example2.com` ドメインを含める必要があります。

```
"AllowedOrigins":[
   "http://www.example1.com"
   "http://www.example2.com"
]
```

### メソッドが許可されない
<a name="Methods-not-allowed"></a>

 バケットへの CORS リクエストの `Access-Control-Request-Method` で指定されている HTTP メソッドは、CORS 設定の `AllowedMethods` エレメントに含まれているメソッドと一致している必要があります。`AllowedMethods` で使用されるワイルドカード文字 (`"*"`) は、すべての HTTP メソッドと一致することになります。`AllowedOrigins` エレメントを更新する方法の詳細については、「[Cross−Origin Resource Sharing (CORS) の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)」を参照してください。

CORS 設定では、`AllowedMethods` エレメントに次のメソッドを指定できます。
+ `GET`
+ `PUT`
+ `POST`
+ `DELETE`
+ `HEAD`

次の例は、`AllowedMethods` エレメントに `GET` メソッドが含まれる CORS 設定の一部を示しています。`GET` メソッドが含まれるリクエストのみが成功します。

```
"AllowedMethods":[
   "GET"
]
```

 HTTP メソッド (例: `PUT`) が CORS リクエストで使用されているか、バケットへのプリフライト CORS リクエストに含まれているものの、そのメソッドが CORS 設定に存在しない場合、リクエストは `403 Forbidden` エラーとなります。この CORS リクエストまたは CORS プリフライトリクエストを許可するには、CORS 設定に `PUT` メソッドを追加する必要があります。

```
"AllowedMethods":[
   "GET"
   "PUT"
]
```

### リクエストされたヘッダーが許可されない
<a name="Headers-not-allowed"></a>

 プリフライトリクエストの `Access-Control-Request-Headers` ヘッダーに含まれているヘッダーは、CORS 設定の `AllowedHeaders` エレメントのヘッダーと一致している必要があります。Amazon S3 へのリクエストで使用できる一般的なヘッダーのリストについては、[一般的なリクエストヘッダー](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html)を参照してください。`AllowedHeaders` エレメントを更新する方法の詳細については、「[Cross−Origin Resource Sharing (CORS) の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)」を参照してください。

次の例は、`AllowedHeaders` エレメントに `Authorization` ヘッダーが含まれる CORS 設定の一部を示しています。`Authorization` ヘッダーのリクエストのみが成功します。

```
"AllowedHeaders":  [
    "Authorization"
]
```

 ヘッダー (例: `Content-MD5`) が CORS リクエストに含まれているものの、そのヘッダーが CORS 設定に存在しない場合、リクエストは `403 Forbidden` エラーとなります。この CORS リクエストを許可するには、CORS 設定に `Content-MD5` ヘッダーを追加する必要があります。CORS リクエストで `Authorization` と `Content-MD5` の両方のヘッダーをバケットに渡す場合は、両方のヘッダーが CORS 設定の `AllowedHeaders`エレメントに含まれていることを確認します。

```
"AllowedHeaders":  [
    "Authorization"
    "Content-MD5"
]
```

## CORS レスポンスにヘッダーが見つからない
<a name="Headers-not-found"></a>

 CORS 設定の `ExposeHeaders` エレメントは、CORS リクエストに応答して、ブラウザで実行されているスクリプトやアプリケーションからのアクセスを可能にするレスポンスヘッダーを特定します。

S3 バケットに保存されているオブジェクトに、レスポンスデータとともにユーザー定義のメタデータ (`x-amz-meta-custom-header` など) がある場合、このカスタムヘッダーには、クライアント側の JavaScript コードからのアクセスする追加のメタデータや情報が含まれる可能性があります。ただし、デフォルトでは、セキュリティ上の理由からカスタムヘッダーへのアクセスはブラウザによってブロックされます。クライアント側の JavaScript がカスタムヘッダーにアクセスできるようにするには、CORS 設定にヘッダーを含める必要があります。

 以下の例では、`ExposeHeaders` エレメントに `x-amz-meta-custom-header1` ヘッダーが含まれています。`x-amz-meta-custom-header2` は `ExposeHeaders` エレメントに含まれておらず、CORS 設定にありません。レスポンスでは、`ExposeHeaders` エレメントに含まれる値のみが返されます。リクエストの `Access-Control-Expose-Headers` ヘッダーに `x-amz-meta-custom-header2` ヘッダーが含まれていても、レスポンスは `200 OK` を返します。ただし、許可されたヘッダー (例: `x-amz-meta-custom-header`) のみが返されてレスポンスに表示されます。

```
"ExposeHeaders":  [
    "x-amz-meta-custom-header1"
]
```

 すべてのヘッダーがレスポンスに表示されるようにするには、以下のように、許可するすべてのヘッダーを CORS 設定の `ExposeHeaders` エレメントに追加します。

```
"ExposeHeaders":  [
    "x-amz-meta-custom-header1",
    "x-amz-meta-custom-header2"
]
```

## S3 プロキシ統合での CORS に関する考慮事項
<a name="cors-in-proxy"></a>

エラーの発生時に、S3 バケットの CORS 設定を既にチェックしていて、クロスオリジンリクエストが AWS CloudFront などのプロキシに送信されている場合は、以下を試してください。
+ HTTP リクエストの `OPTIONS` メソッドを許可するように設定を行います。
+ `Origin`、`Access-Control-Request-Headers`、`Access-Control-Request-Method` の各ヘッダーを転送するようにプロキシを設定します。
+ オリジンヘッダーをキャッシュキーに含めるようにプロキシ設定を構成します。キャッシュキーにオリジンヘッダーを含まないキャッシュプロキシは、異なるオリジンに対して適切な CORS ヘッダーを含まないキャッシュレスポンスを提供する可能性があるため、これは重要です。

一部のプロキシでは、CORS リクエスト用の事前定義済みの機能が提供されています。例えば、CloudFront では、ヘッダーを含むポリシーを設定できます。

 このポリシーには、オリジンが Amazon S3 バケットである場合に、Cross-Origin Resource Sharing (CORS) リクエストを有効にするヘッダーが含まれます。

 このポリシーの設定は以下のとおりです。
+ オリジンリクエストに含まれるヘッダー:

   `Origin`

   `Access-Control-Request-Headers`

   `Access-Control-Request-Method`
+ オリジンリクエストに含まれる Cookie: なし
+ オリジンリクエストに含まれるクエリ文字列: なし

詳細については、「Amazon CloudFront デベロッパーガイド」の「[ポリシーを使用してオリジンリクエストを制御する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.htm)」または「[マネージドオリジンリクエストポリシーを使用する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html#managed-origin-request-policy-cors-s3)」を参照してください。**

# 静的ウェブサイトのチュートリアル
<a name="static-website-tutorials"></a>

以下のチュートリアルまたはウォークスルーでは、静的ウェブサイトホスティングおよびオンデマンド動画ストリーミングのホスティング用に Amazon S3 汎用バケットを作成および設定する詳細な手順を示します。これらのチュートリアルの目的は、一般的なガイダンスを提供することです。これらのチュートリアルはラボ型環境向けであり、バケット名やユーザー名などの例を使用しています。お客様の組織環境に固有のニーズを満たすかどうかの十分な確認や調整をすることなく、本番環境で直接使用するためのものではありません。
+ [Amazon S3、Amazon CloudFront、Amazon Route 53 を使用したオンデマンドストリーミング動画のホスティング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/tutorial-s3-cloudfront-route53-video-streaming) – Amazon S3 を Amazon CloudFront と共に使用すると、安全でスケーラブルな方法でオンデマンド視聴用に動画をホストできます。ビデオを適切な形式に変換した後、サーバーまたは S3 汎用バケットに保存したら、ビューワーのリクエストに応じて CloudFront で配信できます。このチュートリアルでは、配信に CloudFront を使用し、ドメインネームシステム (DNS) およびカスタムドメイン管理に Amazon Route 53 を使用して、オンデマンド動画ストリーミングをホストするように汎用バケットを設定する方法について説明します。CloudFront はキャッシュから動画を提供し、まだキャッシュされていない場合にのみ、汎用バケットから動画を取得します。管理機能のキャッシュにより、低レイテンシー、高スループット、高速転送速度で、世界中のビューワーに動画を配信できます。CloudFront キャッシュ管理の詳細については、*Amazon CloudFront デベロッパーガイド*の[キャッシュの最適化と可用性](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html)を参照してください。
+ [静的ウェブサイトの設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html) – ウェブサイトのように機能するように汎用バケットを設定できます。このチュートリアルでは、バケットの作成、S3 コンソールでの静的ウェブサイトホスティングの有効化、インデックスドキュメントの作成、エラードキュメントの作成など、Amazon S3 でウェブサイトをホストする手順について説明します。詳細については、「[Amazon S3 を使用して静的ウェブサイトをホスティングする](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)」を参照してください。
+ [Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html) – 静的ウェブサイトをホストする汎用バケットを作成および設定し、Amazon Route 53 に登録されたカスタムドメイン名を持つウェブサイトの S3 へのリダイレクトを作成できます。Route 53 を使用してドメインを登録し、ドメインのインターネットトラフィックをルーティングする先を定義します。このチュートリアルでは、ドメインおよびサブドメインのトラフィックを、HTML ファイルが含まれている汎用バケットにルーティングする Route 53 のエイリアスレコードを作成する方法を説明します。詳細については、「Amazon Route 53 デベロッパーガイド」の「[Use your domain for a static website in an Amazon S3 bucket](https://docs.aws.amazon.com//Route53/latest/DeveloperGuide/getting-started-s3.html)」を参照してください。**このチュートリアルが完了したら、CloudFront を使ってウェブサイトのパフォーマンスを向上させることも可能です。詳細については、「[Amazon CloudFront によるウェブサイトの高速化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-cloudfront-walkthrough.html)」を参照してください。
+ [S3 汎用バケットから AWS Amplify ホスティングへの静的ウェブサイトのデプロイ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-amplify) – S3 に保存されている静的ウェブサイトのコンテンツをホストするには、[AWS Amplify ホスティング](https://docs.aws.amazon.com//amplify/latest/userguide/welcome.html.html)を使用することをお勧めします。Amplify ホスティングは、Amazon CloudFront を利用したグローバルに利用可能なコンテンツ配信ネットワーク (CDN) にウェブサイトを簡単にデプロイできるフルマネージドサービスです。これにより、大規模なセットアップなしで安全な静的ウェブサイトホスティングが可能になります。AWS Amplify ホスティングを使用すると、汎用バケット内のオブジェクトの場所を選択して、コンテンツをマネージド CDN にデプロイし、ウェブサイトのパブリック HTTPS URL を生成してどこからでもアクセス可能にすることができます。詳細については、「*AWS Amplify ホスティングユーザーガイド*」の「[Amplify コンソールを使用して S3 から静的ウェブサイトをデプロイする](https://docs.aws.amazon.com//amplify/latest/userguide/deploy--from-amplify-console.html)」を参照してください。

# チュートリアル: Amazon S3、Amazon CloudFront、Amazon Route 53 を使用したオンデマンドストリーミング動画のホスティング。
<a name="tutorial-s3-cloudfront-route53-video-streaming"></a>

Amazon S3 を Amazon CloudFront とともに使用すると、セキュリティとスケーラビリティを備えたオンデマンド視聴用に動画をホストできます。オンデマンド動画 (VOD) ストリーミングの場合、動画コンテンツはサーバーに保存され、ビューワーはいつでも視聴できます。

CloudFront は、高速で安全性が高く、プログラム可能なコンテンツ配信ネットワーク (CDN) サービスです。CloudFront は、CloudFront のすべてのエッジロケーションから HTTPS 経由でコンテンツを安全に配信できます。CloudFront の詳細については、**「Amazon CloudFront デベロッパーガイド」の「[Amazon CloudFront とは](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)」を参照してください。

CloudFront のキャッシングは、オリジンサーバーが直接応答するリクエストの数を減らします。ビューワー (エンドユーザー) が CloudFront で配信する動画をリクエストすると、リクエストはビューワーの場所により近いエッジロケーションにルーティングされます。CloudFront はキャッシュから動画を提供し、まだキャッシュされていない場合にのみ、S3 バケットから動画を取得します。管理機能のキャッシュにより、低レイテンシー、高スループット、高速転送速度で、世界中のビューワーに動画を配信できます。CloudFront キャッシュ管理の詳細については、*Amazon CloudFront デベロッパーガイド*の[キャッシュの最適化と可用性](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html)を参照してください。

![\[CloudFront キャッシュメカニズムの仕組みを説明する図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/cf-example-image-global.png)


**目的**  
このチュートリアルでは、配信に CloudFront を使用し、ドメインネームシステム (DNS) およびカスタムドメイン管理に Amazon Route 53 を使用して、オンデマンド動画ストリーミングをホストするように S3 バケットを設定します。

**Topics**
+ [前提条件: カスタムドメインを Route 53 に登録し、設定する。](#cf-s3-prerequisites)
+ [ステップ 1: S3 バケットを作成する。](#cf-s3-step1)
+ [ステップ 2: S3 バケットに動画をアップロードする。](#cf-s3-step2)
+ [ステップ 3: CloudFront オリジンアクセスアイデンティティを作成する。](#cf-s3-step3)
+ [ステップ 4: CloudFront ディストリビューションを作成する。](#cf-s3-step4)
+ [ステップ 5: CloudFront ディストリビューション経由で動画にアクセスする。](#cf-s3-step5)
+ [ステップ 6: カスタムドメイン名を使用するように CloudFront ディストリビューションを設定する。](#cf-s3-step6)
+ [ステップ 7: カスタムドメイン名を使用して CloudFront ディストリビューションを介して S3 動画にアクセスする。](#cf-s3-step7)
+ [(オプション)ステップ 8: CloudFront ディストリビューションが受信したリクエストに関するデータを表示する](#cf-s3-step8)
+ [ステップ 9: クリーンアップする。](#cf-s3-step9)
+ [次のステップ](#cf-s3-next-steps)

## 前提条件: カスタムドメインを Route 53 に登録し、設定する。
<a name="cf-s3-prerequisites"></a>

このチュートリアルを開始する前に、Route 53 により、後でカスタムドメイン名を使用するように CloudFront ディストリビューションを設定するために、カスタムドメイン (例、**example.com**) を登録し、設定する必要があります 。

カスタムドメイン名がなければ、S3 動画はパブリックにアクセスでき、CloudFront 経由でホストされる URL は、次のようになります。

```
https://CloudFront distribution domain name/Path to an S3 video
```

例えば、**https://d111111abcdef8.cloudfront.net/sample.mp4**。

Route 53 で設定されたカスタムドメイン名を使用するように CloudFront ディストリビューションを設定すると、S3 ビデオはパブリックにアクセス可能になり、CloudFront を介して次のような URL でホストされます。

```
https://CloudFront distribution alternate domain name/Path to an S3 video
```

例えば、**https://www.example.com/sample.mp4**。カスタムドメイン名は、ビューワーが使用するのに簡単で直感的です。

****  
カスタムドメインの登録については、*Amazon Route 53 デベロッパーガイド* の「[Route 53 を使用して新しいドメインを登録する](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html)」を参照してください。

Route 53 にドメイン名を登録すると、Route 53 によってホストゾーンが作成されます。このホストゾーンは、このチュートリアルの後半で使用します。このホストゾーンは、ドメインのトラフィックを、例えば Amazon EC2 インスタンスや CloudFront ディストリビューションにルーティングする方法についての情報を保存する場所です。

ドメイン登録、ホストゾーン、ドメインが受信した DNS クエリに関連する料金が発生します。詳細については、「[Amazon Route 53 料金表](https://aws.amazon.com/route53/pricing/)」を参照してください。

**注記**  
ドメインを登録すると、すぐに費用がかかり、元に戻せません。ドメインを自動更新しないことは選択できますが、前払いしてその年の所有権を取得することになります。詳細については、**「Amazon Route 53 デベロッパーガイド」の「[新しいドメインの登録](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html)」を参照してください。

## ステップ 1: S3 バケットを作成する。
<a name="cf-s3-step1"></a>

ストリーミングする元の動画を保存するには、バケットを作成します。

**バケットを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、バケットを作成するリージョンを選択します。
**注記**  
レイテンシーとコストを最小化するため、さらに規制条件に対応するために、最寄りのリージョンを選択します。明示的に別のリージョンに移動する場合を除き、特定のリージョンに保管されたオブジェクトは、そのリージョンから移動されることはありません。Amazon S3 AWS リージョン のリストについては、**「Amazon Web Services 全般のリファレンス」の「[AWS のサービス エンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)」を参照してください。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. [**Create bucket (バケットの作成)**] を選択します。**[バケットの作成]** ページが開きます。

1. [**バケット名** ] に、バケットの名前 (例: **tutorial-bucket**) を入力します。

   Amazon S3 のバケット命名規則の詳細については、「[汎用バケットの命名規則](bucketnamingrules.md)」を参照してください。

1. **[リージョン]** で、バケットを保存する AWS リージョンを選択します。

   可能であれば、ほとんどのビューワーに最も近いリージョンを選択します。バケットのリージョンの詳細については、「[汎用バケットの概要](UsingBucket.md)」を参照してください。

1. [**このバケットのパブリックアクセス設定をブロック**] で、デフォルト設定 (**ブロック*すべて*パブリックアクセス**が有効) のままであることを確認します。

   ***すべて*のパブリックアクセスをブロック** を有効にしても、ビューワーは CloudFront 経由でアップロードされた動画にアクセスできます。この機能は、CloudFront を使用して S3 に保存された動画をホストすることの大きな利点です。

   ユースケースでオフにする必要のある設定が 1 つ以上あることがわかっている場合を除き、すべての設定を有効にしておくことをお勧めします。パブリックアクセスのブロックの詳細については、[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md) を参照してください。

1. 残りの設定はデフォルトのままにしておきます。

   (オプション) 特定のユースケースに追加のバケット設定を設定する場合は、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

1. [**バケットの作成**] を選択します。

## ステップ 2: S3 バケットに動画をアップロードする。
<a name="cf-s3-step2"></a>

次の手順では、コンソールを使用して S3 バケットに動画ファイルをアップロードする方法を示します。S3 に動画ファイルをアップロードするときは、[Amazon S3 Transfer Acceleration](https://aws.amazon.com/s3/transfer-acceleration) を使用して、高速かつ安全なファイル転送を設定します。転送アクセラレーションを使用すると、S3 バケットへの動画のアップロードを高速化して、大きな動画の長距離転送を行うことができます。詳細については、「[Amazon S3 Transfer Acceleration を使用した高速かつ安全なファイル転送の設定](transfer-acceleration.md)」を参照してください。

**バケットにファイルをアップロードするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. **[汎用バケット]** リストで、[ステップ 1](#cf-s3-step1) で作成したバケットの名前を選択し (**tutorial-bucket** など)、ファイルをアップロードします。

1. バケットの **[オブジェクト]** タブで、**[アップロード]** を選択します。

1. [**アップロード**] ページの [**ファイルとフォルダ**] の下で、[**ファイルを追加**] を選択します。

1. アップロードするファイルを選択し、続いて **[オープン]** を選択します。

   例えば、`sample.mp4` という名前の動画ファイルをアップロードできます。

1. **アップロード** を選択します。

## ステップ 3: CloudFront オリジンアクセスアイデンティティを作成する。
<a name="cf-s3-step3"></a>

S3 バケットからの動画への直接アクセスを制限するには、オリジンアクセスアイデンティティ (OAI) という特別な CloudFront ユーザーを作成します。このチュートリアルの後半で OAI をディストリビューションに関連付けます。OAI を使用すると、ビューワーは CloudFront をバイパスして、S3 バケットから直接ビデオを取得できません。CloudFront OAI だけが S3 バケット内のファイルにアクセスできます。詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[Amazon S3 オリジンへのアクセスを制限する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)」を参照してください。



**重要**  
静的ウェブサイトのホストに使用しているバケットが AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用して暗号化されている場合は、オリジンアクセスアイデンティティ (OAI) の代わりにオリジンアクセスコントロール (OAC) を使用してオリジンを保護する必要があります。OAI は SSE-KMS をサポートしていないため、代わりに OAC を使用する必要があります。OAC の詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[Amazon S3 オリジンへのアクセスを制限する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)」を参照してください。

**CloudFront OAI を作成するには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 左のナビゲーションペインで、**[セキュリティ]** セクションの **[オリジンアクセス]** を選択します。

1. **[アイデンティティ]** タブで、**[オリジンアクセスアイデンティティを作成]** を選択します。

1. 新しいオリジンアクセスアイデンティティとして、名前 (例えば、**S3-OAI**) を入力します。

1. **[作成]** を選択します。

## ステップ 4: CloudFront ディストリビューションを作成する。
<a name="cf-s3-step4"></a>

CloudFront を使用して S3 バケットで動画を提供および配信するには、CloudFront ディストリビューションを作成する必要があります。

**Topics**
+ [CloudFront ディストリビューションを作成する](#cf-s3-step4-create-cloudfront)
+ [バケットポリシーの確認](#cf-s3-step4-review-bucket-policy)

### CloudFront ディストリビューションを作成する
<a name="cf-s3-step4-create-cloudfront"></a>

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 左のナビゲーションペインで、**ディストリビューション** を選択します。

1. **[ディストリビューションの作成]** を選択します。

1. [**オリジン**] の [**オリジンドメイン**] で、[ステップ 1](#cf-s3-step1) で作成した S3 バケットの名前から始まる、S3 オリジンのドメイン名 (例えば、**tutorial-bucket**) を選択します。

1. **[オリジンアクセス]**では、**[レガシーアクセスアイデンティティ]** を選択します。

1. [**オリジンアクセスアイデンティティ**] で、[ステップ 3](#cf-s3-step3) で作成したオリジンアクセスアイデンティティを選択します (例えば、**S3-OAI**)。

1. [**バケットポリシー**] で、[**はい、バケットポリシーを更新します**] を選択します。

1. [**ビューワープロトコルポリシー**] の [**デフォルトのキャッシュ動作** ] セクションで、[**HTTP から HTTPS へリダイレクト**] を選択します。

   この機能を選択する際は、HTTP リクエストは HTTPS に自動的にリダイレクトされ、ウェブサイトを保護し、ビューワーのデータを保護します。

1. [**Default Cache Behavior(キャッシュ動作のデフォルト)**] セクションの他の設定については、デフォルト値を使用します。

   (オプション) CloudFront が別のリクエストをオリジンに転送するまでにファイルを CloudFront キャッシュに保持する期間をコントロールできます。この期間を短くすると、動的なコンテンツを供給できます。この期間を長くすると、ユーザー側のパフォーマンスは向上します。ファイルがエッジキャッシュから直接返される可能性が高くなるためです。期間を長くすると、オリジンの負荷も軽減されます。詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[コンテンツがエッジキャッシュに保持される期間の管理 (有効期限)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html)」を参照してください。

1. その他のセクションでは、残りの設定はデフォルトのままにしておきます。

   異なる設定オプションの詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[ディストリビューションを作成または更新する場合に指定する値](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html)」を参照してください。

1. ページの最下部で、[**ディストリビューションの作成**] を選択します。

1. CloudFront ディストリビューションの **[全般]** タブの **[詳細]** で、ディストリビューションの **[最終変更]** 列の値が **[デプロイ]** からディストリビューションが最後に変更されたタイムスタンプに変更されます。これには通常数分かかります。

### バケットポリシーの確認
<a name="cf-s3-step4-review-bucket-policy"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. [**バケット**] リストで、CloudFront ディストリビューションのオリジンとして上記で使用したバケットの名前を選択します (例えば、**tutorial-bucket**)。

1. **[アクセス許可]** タブを選択します。

1. [**バケットポリシー**] セクションのバケットポリシーテキストで、次のようなステートメントが表示されることを確認します。

   ```
   {
       "Version": "2008-10-17",		 	 	 
       "Id": "PolicyForCloudFrontPrivateContent",
       "Statement": [
           {
               "Sid": "1",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC"
               },
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::tutorial-bucket/*"
           }
       ]
   }
   ```

   これは、上記の [**はい、バケットポリシーを更新します**] を選択した際に、CloudFront ディストリビューションがバケットポリシーに追加したステートメントです。

   このバケットポリシーの更新は、S3 バケットへのアクセスを制限するように CloudFront ディストリビューションを正常に構成したことを示します。この制限のため、バケット内のオブジェクトには CloudFront ディストリビューションからのみアクセスできます。

## ステップ 5: CloudFront ディストリビューション経由で動画にアクセスする。
<a name="cf-s3-step5"></a>

これで、CloudFront は S3 バケットに保存された動画を提供できます。CloudFront 経由で動画にアクセスするには、CloudFront ディストリビューションのドメイン名を S3 バケット内の動画へのパスの中に含めます。

**CloudFront ディストリビューションドメイン名を使用して S3 動画の URL を作成するには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 左のナビゲーションペインで、[**ディストリビューション**] を選択します。

1. ディストリビューションのドメイン名を取得するには、次の手順を実行します。

   1. [**オリジン**] 列で、[ステップ 1](#cf-s3-step1) で作成した S3 バケットで始まるオリジン名を見つけて、CloudFront ディストリビューションを識別します (例えば、**tutorial-bucket**)。

   1. リストからディストリビューションを見つけたら、**[ドメイン名]** 列を広げて、CloudFront ディストリビューションのドメイン名の値をコピーします。

1. 新しいブラウザタブで、上記でコピーしたディストリビューションドメイン名を貼り付けます。

1. 前のブラウザタブに戻り、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) にある S3 コンソールを開きます。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. [**バケット**] リストで、[ステップ 1](#cf-s3-step1) で作成したバケットの名前を選択します (例えば、**tutorial-bucket**)。

1. [**オブジェクト**] リストで、[ステップ 2](#cf-s3-step2) でアップロードした動画の名前を選択します (例えば、`sample.mp4`)。

1. オブジェクト詳細ページで、**オブジェクトの概要** セクションで、[**キー**] の値をコピーします。この値は、S3 バケット内でアップロードされたビデオオブジェクトへのパスです。

1. 以前にディストリビューションのドメイン名を貼り付けたブラウザタブに戻り、スラッシュ (**/**) を配信ドメイン名の後に入力し、前にコピーした動画へのパスを貼り付けます (例: `sample.mp4`)。

   これで、S3 動画はパブリックにアクセスでき、CloudFront 経由でホストされた URL は、次のようになります。

   ```
   https://CloudFront distribution domain name/Path to the S3 video
   ```

   *CloudFront ディストリビューションドメイン名* および *S3 動画へのパス* を適切な値で置き換えます。URL の例は **https://d111111abcdef8.cloudfront.net/sample.mp4** です。

## ステップ 6: カスタムドメイン名を使用するように CloudFront ディストリビューションを設定する。
<a name="cf-s3-step6"></a>

URL で CloudFront ドメイン名の代わりに独自のドメイン名を使用して S3 動画にアクセスするには、代替ドメイン名を CloudFront ディストリビューションに追加する必要があります。

**Topics**
+ [SSL 証明書をリクエストする。](#cf-s3-step6-create-SSL)
+ [CloudFront ディストリビューションに代替ドメイン名を追加します。](#cf-s3-step6-custom-domain)
+ [代替ドメイン名のトラフィックを CloudFront ディストリビューションのドメイン名にルーティングする DNS レコードを作成する。](#cf-s3-step6-DNS-record)
+ [ディストリビューションに対して IPv6 が有効になっているかどうかを確認し、必要に応じて別の DNS レコードを作成します。](#s3-step6-ipv6)

### SSL 証明書をリクエストする。
<a name="cf-s3-step6-create-SSL"></a>

ビューワーが動画ストリーミングの URL で HTTPS とカスタムドメイン名を使用できるようにするには、AWS Certificate Manager (ACM) を使用して、Secure Sockets Layer (SSL) 証明書を要求します。SSL 証明書は、ウェブサイトへの暗号化されたネットワーク接続を確立します。

1. AWS マネジメントコンソール にサインインして、ACM コンソール ([https://console.aws.amazon.com/acm/home](https://console.aws.amazon.com/acm/)) を開きます。

1. 入門者向けページが表示されたら、[**証明書のプロビジョニング**] で [**開始**] を選択します。

1. [**証明書のリクエスト**] ページで、[**パブリック証明書のリクエスト**] を選択し、[**証明書のリクエスト**] を選択して続行します。

1. [**ドメイン名の追加**] ページで、SSL/TLS 証明書を使用して保護するサイトの完全修飾ドメイン名を入力します。アスタリスク (`*`) を使用して、同じドメイン内の複数のサイトを保護するワイルドカード証明書をリクエストします。このチュートリアルでは、**\$1** および [[前提条件]](#cf-s3-prerequisites) で設定したカスタムドメイン名を入力します。例えば、**\$1.example.com** を使用し、[**Next (次へ)**] を選択します。

   詳細については、*AWS Certificate Managerユーザーガイド*の「[ACM パブリック証明書をリクエストする (コンソール)](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html#request-public-console)」を参照してください。

1. [**検証方法の選択**] ページで、[**DNS での検証**] を選択します。その後、**[Next]** を選択します。

   DNS 設定を編集できる場合は、E メール検証ではなく DNS ドメイン検証を使用することをお勧めします。DNS 検証には E メール検証と比べていくつかの利点があります。詳細については、*AWS Certificate Managerユーザーガイド*の[オプション 1: DNS 検証](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html)を参照してください。

1. (オプション) [**タグの追加**] ページで、メタデータを用いて証明書にタグを付けることができます。

1. **[Review]** (レビュー) を選択します。

1. [**確認**] ページで、**ドメイン名**および**検証方法**にある情報が正しいことを確認します。次に、[**確認してリクエストする**] を選択します。

   [**検証**] ページには、リクエストが処理中で、証明書ドメインが検証中であることが示されます。検証を待機している証明書は、**検証保留中**状態にあります。

1. [**検証**] ページで、カスタムドメイン名の左側にある下向き矢印を選択し、[**Route 53 でレコードを作成する**] を選択して、DNS によるドメインの所有権を検証します。

   これは、AWS Certificate Manager によって DNS 設定に提供される CNAME レコードを追加します。

1. [**Route 53 でレコードを作成する**] ダイアログボックスで、[**作成**] を選択します。

   これで、[**検証**] ページの一番下に、[**成功**] のステータス通知が表示されるようになりました。

1. [**続行**] を選択して、[**証明書**] リストページを表示します。

   新しい証明書の**ステータス**は、30 分以内に [**検証保留中**] から [**発行済み**] に変わります。

### CloudFront ディストリビューションに代替ドメイン名を追加します。
<a name="cf-s3-step6-custom-domain"></a>

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 左のナビゲーションペインで、[**ディストリビューション**] を選択します。

1. [ステップ 4](#cf-s3-step3) で作成したディストリビューションの ID を選択します。

1.  [**全般**] タブで、**設定**セクションに移動し、**編集**を選択します。

1. **[編集設定]** ページの **[代替ドメイン名 (CNAME) - *オプション*]** で、**[項目を追加]** を選択して、この CloudFront ディストリビューションによって提供される S3 動画の URL で使用するカスタムドメイン名を追加します。

   このチュートリアルでは、例えば、`www.example.com` などのサブドメインのトラフィックをルーティングする場合、サブドメイン名 (`www`) とドメイン名 (`example.com`) を入力します。具体的には、**www.example.com** を入力します。
**注記**  
追加する代替ドメイン名 (CNAME) は、CloudFront ディストリビューションに以前アタッチした SSL 証明書の対象である必要があります。

1. **カスタム SSL 証明書 - *オプション*** で、上記でリクエストした SSL 証明書を選択します (例えば、**\$1.example.com**)。
**注記**  
SSL 証明書をリクエストした直後に SSL 証明書が表示されない場合は、SSL 証明書を選択できるようになるまで 30 分間待機してから一覧を更新できます。

1. 残りの設定はデフォルト値のままにしておきます。[**Save changes** (変更を保存)] を選択します。

1. ディストリビューションの [**全般**] タブで、ディストリビューションの [**最終変更**] の値が [**デプロイ**] からディストリビューションが最後に変更されたタイムスタンプに変更されるまで待機します。

### 代替ドメイン名のトラフィックを CloudFront ディストリビューションのドメイン名にルーティングする DNS レコードを作成する。
<a name="cf-s3-step6-DNS-record"></a>

1. AWS マネジメントコンソール にサインインし、Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。

1. 左のナビゲーションペインで **[ホストゾーン]** を選択します。

1. **ホストゾーン** ページの [前提条件](#cf-s3-prerequisites) で Route 53 が作成したホストゾーンの名前を選択します (例えば、**example.com**)。

1. **レコードを作成する**を選択し、**レコードのクイック作成**方法を使用します。

1. [**レコード名**] で、レコード名の値を、上記で追加した CloudFront ディストリビューションの代替ドメイン名と同じにします。

   このチュートリアルでは、`www.example.com` などのサブドメインにトラフィックをルーティングするには、ドメイン名なしでサブドメイン名を入力します。例えば、カスタムドメイン名の前にあるテキストフィールドに「**www**」を入力します。

1. [**レコードタイプ**] で、[**A - IPv4 アドレスと一部の AWS リソースにトラフィックをルーティング**] を選択します。

1. [**値**] で、エイリアスリソースを有効にするには、**エイリアス**切り替えを選択します。

1. **[トラフィックのルーティング先]** で、**[CloudFront ディストリビューションへのエイリアス]** を選択します。

1. [**ディストリビューションの選択**] という検索ボックスで、[ステップ 4](#cf-s3-step4) で作成した CloudFront ディストリビューションのドメイン名を選択します。

   CloudFront ディストリビューションのドメイン名を検索するには、以下の手順を実行します。

   1. 新しいブラウザタブで、AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/cloudfront/v3/home](https://console.aws.amazon.com/cloudfront/v3/home) で CloudFront コンソールを開きます。

   1. 左のナビゲーションペインで、[**ディストリビューション**] を選択します。

   1. [**オリジン**] 列で、[ステップ 1](#cf-s3-step1) で作成した S3 バケットで始まるオリジン名を見つけて、CloudFront ディストリビューションを識別します (例えば、**tutorial-bucket**)。

   1. リストからディストリビューションを見つけたら、**ドメイン名** 列を広げて、CloudFront ディストリビューションのドメイン名の値を確認します。

1. Route 53 コンソールの [**レコードを作成する**] ページで、残りの設定はデフォルトのままにしておきます。

1. **[レコードを作成]** を選択します。

### ディストリビューションに対して IPv6 が有効になっているかどうかを確認し、必要に応じて別の DNS レコードを作成します。
<a name="s3-step6-ipv6"></a>

ディストリビューションに対して IPv6 が有効になっている場合は、別の DNS レコードを作成する必要があります。

1. ディストリビューションに対して IPv6 が有効になっているかどうかを確認するには、次の手順を実行します。

   1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

   1. 左のナビゲーションペインで、[**ディストリビューション**] を選択します。

   1. [ステップ 4](#cf-s3-step4) で作成した CloudFront ディストリビューションの ID を選択します。

   1. [**全般**] タブの [**設定**] で、**IPv6** が**有効**になっているか確認します。

      ディストリビューションに対して IPv6 が有効になっている場合は、別の DNS レコードを作成する必要があります。

1. ディストリビューションに対して IPv6 が有効になっている場合は、以下を実行して DNS レコードを作成する必要があります。

   1. AWS マネジメントコンソール にサインインし、Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。

   1. 左のナビゲーションペインで **[ホストゾーン]** を選択します。

   1. **ホストゾーン** ページの [前提条件](#cf-s3-prerequisites) で Route 53 が作成したホストゾーンの名前を選択します (例えば、**example.com**)。

   1. **レコードを作成する**を選択し、**レコードのクイック作成**方法を使用します。

   1. [**レコード名**] で、カスタムドメイン名の前のテキストフィールドに、上記の IPv4 DNS レコードを作成したときに入力したのと同じ値を入力します。例えば、このチュートリアルでは、サブドメイン `www.example.com` のトラフィックをルーティングするには、**www** のみを入力します。

   1. [**レコードタイプ**] で、[**AAAA ‐ IPv6 アドレスと一部の AWS リソースにトラフィックをルーティング**] を選択します。

   1. [**値**] で、エイリアスリソースを有効にするには、**エイリアス**切り替えを選択します。

   1. **[トラフィックのルーティング先]** で、**[CloudFront ディストリビューションへのエイリアス]** を選択します。

   1. [**ディストリビューションの選択**] という検索ボックスで、[ステップ 4](#cf-s3-step4) で作成した CloudFront ディストリビューションのドメイン名を選択します。

   1. 残りの設定はデフォルトのままにしておきます。

   1. **[レコードを作成]** を選択します。

## ステップ 7: カスタムドメイン名を使用して CloudFront ディストリビューションを介して S3 動画にアクセスする。
<a name="cf-s3-step7"></a>

カスタム URL を使用して S3 動画にアクセスするには、代替ドメイン名と S3 バケット内の動画へのパスを組み合わせる必要があります。

**CloudFront ディストリビューションを介して S3 動画にアクセスするためのカスタム URL を作成するには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 左のナビゲーションペインで、[**ディストリビューション**] を選択します。

1. CloudFront ディストリビューションの代替ドメイン名を取得するには、以下を実行します。

   1. [**オリジン**] 列で、[ステップ 1](#cf-s3-step1) で作成した S3 バケットのバケット名で始まるオリジン名を見つけて、CloudFront ディストリビューションを識別します (例えば、**tutorial-bucket**)。

   1. リストからディストリビューションを見つけたら、**代替ドメイン名** 列を広げて、CloudFront ディストリビューションの代替ドメイン名の値をコピーします。

1. 新しいブラウザタブに、CloudFront ディストリビューションの代替ドメイン名を貼り付けます。

1. 前のブラウザタブに戻り、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) にある Amazon S3 コンソールを開きます。

1. [ステップ 5](#cf-s3-step5) で説明した S3 動画へのパスを見つけます。

1. 以前に代替ドメイン名を貼り付けたブラウザタブに戻り、スラッシュ (**/**) を入力し、S3 動画へのパスを貼り付けます (例えば、`sample.mp4`)。

   これで、S3 動画はパブリックにアクセス可能になり、CloudFront を介して次のようなカスタム URL でホストされます。

   ```
   https://CloudFront distribution alternate domain name/Path to the S3 video
   ```

   *CloudFront ディストリビューションの代替ドメイン名*および* S3 動画へのパスを*適切な値で置き換えます。URL の例は **https://www.example.com/sample.mp4** です。

## (オプション)ステップ 8: CloudFront ディストリビューションが受信したリクエストに関するデータを表示する
<a name="cf-s3-step8"></a>

**CloudFront ディストリビューションが受信したリクエストに関するデータを表示するには**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. CloudFront コンソールの左側のナビゲーションペインで、[**レポートと分析**] で、コンソールから、**キャッシュ統計**、**人気のあるオブジェクト**、**上位リファラー**、**使用状況**、**ビューワーなど**のレポートを選択します。

   各レポートダッシュボードをフィルタリングできます。詳細については、[Amazon CloudFront デベロッパーガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/reports.html)の「*コンソール内の CloudFront レポート*」セクションを参照してください。

1. データをフィルタリングするには、[ステップ 4](#cf-s3-step4) で作成した CloudFront ディストリビューションの ID を選択します。

## ステップ 9: クリーンアップする。
<a name="cf-s3-step9"></a>

学習演習としてのみ、CloudFront と Route 53 を使用して S3 ストリーミング動画をホストした場合は、割り当てた AWS リソースを削除して、料金が発生しないようにします。

**注記**  
ドメインを登録すると、すぐに費用がかかり、元に戻せません。ドメインを自動更新しないことは選択できますが、前払いしてその年の所有権を取得することになります。詳細については、**「Amazon Route 53 デベロッパーガイド」の「[新しいドメインの登録](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html)」を参照してください。

**Topics**
+ [CloudFront ディストリビューションの削除](#cf-s3-step9-delete-cf)
+ [DNS レコードの削除](#cf-s3-step9-delete-dns)
+ [カスタムドメインのパブリックホストゾーンの削除](#cf-s3-step9-delete-hosted-zone)
+ [Route 53 からカスタムドメイン名を削除します。](#cf-s3-step9-delete-domain)
+ [S3 ソースバケットの元の動画を削除する。](#cf-s3-step9-delete-video)
+ [S3 ソースバケットを削除する](#cf-s3-step9-delete-bucket)

### CloudFront ディストリビューションの削除
<a name="cf-s3-step9-delete-cf"></a>

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 左のナビゲーションペインで、[**ディストリビューション**] を選択します。

1. [**オリジン**] 列で、[ステップ 1](#cf-s3-step1) で作成した S3 バケットのバケット名で始まるオリジン名を見つけて、CloudFront ディストリビューションを識別します (例えば、**tutorial-bucket**)。

1. CloudFront ディストリビューションを削除するには、まずディストリビューションを無効にする必要があります。
   + [**ステータス**] 列の値が [**有効**] で、[**最終変更**] の値がディストリビューションが最後に変更されたときのタイムスタンプである場合は、ディストリビューションを無効にしてから削除してください。
   + **[ステータス]** の値が **[有効]** で、**[最終変更]** の値が **[デプロイ]** の場合、**[ステータス]** がディストリビューションが最後に変更されたタイムスタンプに変わるまで待ちます。次に、ディストリビューションを無効にしてから、ディストリビューションを削除します。

1. CloudFront ディストリビューションを無効にするには、次の手順を実行します。

   1. **ディストリビューション**リストで、削除するディストリビューションの ID の横にあるチェックボックスをオンにします。

   1. ディストリビューションを無効にするには、[**無効**] を選択し、[**無効**] を選択して確定します。

      代替ドメイン名が関連付けられているディストリビューションを無効にすると、CloudFront は、別のディストリビューションに同じドメイン (`*.example.com` など) と一致するワイルドカード(`*`) 付きの代替ドメイン名がある場合でも、このドメイン名 (`www.example.com` など) へのトラフィックの受信を停止します。

   1. [**状態**] 列の値が直ちに [**無効**] に変わります。[**最終変更**] の値が [**デプロイ**] からディストリビューションが最後に変更されたタイムスタンプに変更されるまで待機します。

      CloudFront はこの変更をすべてのエッジロケーションに伝達する必要があるため、この更新が完了してディストリビューションを**削除**できるようになるまでに数分かかることがあります。

1. 無効になっているディストリビューションを削除するには、次の手順を実行します。

   1. 削除するディストリビューションの ID の横にあるチェックボックスをオンにします。

   1. **削除** を選択し、**削除** を選択して確認します。

### DNS レコードの削除
<a name="cf-s3-step9-delete-dns"></a>

ドメインのパブリックホストゾーン (DNS レコードを含む) を削除する場合は、*Amazon Route 53 デベロッパーガイド*の [カスタムドメインのパブリックホストゾーンの削除](#cf-s3-step9-delete-hosted-zone) を参照してください。　 [ステップ 6](#cf-s3-step6) で作成された DNS レコードを削除するだけの場合は、次の操作を行います。

1. AWS マネジメントコンソール にサインインし、Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。

1. 左のナビゲーションペインで **[ホストゾーン]** を選択します。

1. **ホストゾーン** ページの [前提条件](#cf-s3-prerequisites) で Route 53 が作成したホストゾーンの名前を 選択します (例えば、**example.com**)。

1. レコードのリストで、削除するレコード ([ステップ 6](#cf-s3-step6) で作成したレコード) の横にあるチェックボックスをオンにします。
**注記**  
[**タイプ**] の値が [**NS**] または [**SOA**] のレコードを削除することはできません。

1. [**レコードセットの削除**] を選択します。

1. 削除を確認するには、**[削除]** を選択します。

   レコードの変更が Route 53 DNS サーバーに伝達されるまでにしばらく時間がかかります。現在、変更が反映されたことを確認するには、[GetChange](https://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html) API アクションを使用する方法しかありません。通常、変更は 60 秒以内にすべての Route 53 ネームサーバーに伝播されます。

### カスタムドメインのパブリックホストゾーンの削除
<a name="cf-s3-step9-delete-hosted-zone"></a>

**警告**  
ドメイン登録は維持するものの、ウェブサイトやウェブアプリケーションへのインターネットトラフィックのルーティングを停止する場合、ホストゾーンを削除する代わりに、ホストゾーン (上記) 内のレコードを削除することをお勧めします。  
さらに、ホストゾーンを削除すると、他のユーザーがお客様のドメイン名を使用してドメインを使って自分のリソースにトラフィックをルーティングする可能性があります。  
さらに、ホストゾーンを削除した場合、復元することはできません。新しいホストゾーンを作成して、ドメイン登録のネームサーバーを更新する必要があります。更新が有効になるには、最大 48 時間かかることがあります。  
ドメインをインターネット上で利用できなくするには、DNS サービスを無料の DNS サービスに移行し、Route 53 のホストゾーンを削除することをお勧めします。これにより、今後 DNS クエリが誤ってルーティングされることを防ぐことができます。  
ドメインが Route 53 に登録されている場合に、Route 53 ネームサーバーを新しい DNS サービスのネームサーバーで置き換える情報については、*Amazon Route 53 デベロッパーガイド*で、[ドメインのネームサーバーとグルーレコードの追加または変更](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-name-servers-glue-records.html)を参照してください。
ドメインが他のレジストラに登録されている場合、レジストラが提供する方法を使用してドメインのネームサーバーを変更します。
サブドメイン (`www.example.com`) のホストゾーンを削除する場合は、ドメイン (`example.com`) のネームサーバーを変更する必要はありません。

1. AWS マネジメントコンソール にサインインし、Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。

1. 左のナビゲーションペインで **[ホストゾーン]** を選択します。

1. [**ホストゾーン**] ページで、削除するホストゾーンの名前を選択します。

1. ホストゾーンの [**レコード**] タブで、削除するホストゾーンに **NS** レコードと **SOA** レコードのみが含まれていることを確認します。

   他のレコードが含まれている場合は、それらを削除します。

   ホストゾーンでサブドメインの NS レコードを作成した場合は、それらのレコードも削除します。

1. ホストゾーンの **DNSSEC 署名** タブで、DNSSEC 署名が有効になっている場合は無効にします。詳細については、「*Amazon Route 53 デベロッパーガイド*」の「[DNSSEC 署名の無効](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-configuring-dnssec-disable.html)」を参照してください。

1. ホストゾーンの詳細ページの上部で、[**ゾーンを削除**] を選択します。

1. **delete** と入力して削除を確認し、[**Delete (削除)**] を選択します。

### Route 53 からカスタムドメイン名を削除します。
<a name="cf-s3-step9-delete-domain"></a>

最上位ドメイン (TLD) では、必要がなくなった登録を削除できます。登録が期限切れになる前に Route 53 からドメイン名登録を削除した場合でも、登録料は AWS から払い戻しされません。詳細については、*Amazon Route 53 デベロッパーガイド*の「[ドメイン名の登録を削除する](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-delete.html)」を参照してください。

**重要**  
AWS アカウント 間でドメインを移管する場合や、他のレジストラにドメインを移管する場合は、ドメインを削除せずにすぐに登録が予測されます。代わりに、「*Amazon Route 53 デベロッパーガイド*」で該当するドキュメントを参照してください。  
[異なる AWS アカウント へのドメインの移管](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-transfer-between-aws-accounts.html)
[Amazon Route 53 から別のレジストラへのドメインの移行](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-transfer-from-route-53.html)

### S3 ソースバケットの元の動画を削除する。
<a name="cf-s3-step9-delete-video"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. [**バケット名**] リストで、[ステップ 2](#cf-s3-step2) で動画をアップロードしたバケットの名前を選択します (例えば、**tutorial-bucket**)。

1. **オブジェクト** タブで、削除するオブジェクトの名前の左にあるチェックボックスをオンにします (例えば、`sample.mp4`)。

1. **[削除]** を選択します。

1. [**オブジェクトを完全に削除しますか?**] で、**permanently delete** と入力し、このオブジェクトを削除することを確定します。

1. **オブジェクトの削除** を選択します。

### S3 ソースバケットを削除する
<a name="cf-s3-step9-delete-bucket"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. [**バケット**] リストで、[ステップ 1](#cf-s3-step1) で作成したバケットの名前の横にあるオプションボタンを選択します (例えば、**tutorial-bucket**)。

1. **[削除]** を選択します。

1. **[バケットの削除]** ページで、テキストフィールドにバケット名を入力することでバケットを削除することを確認し、**[バケットを削除]** を選択します。

## 次のステップ
<a name="cf-s3-next-steps"></a>

このチュートリアルを完了すると、次の関連するユースケースをさらに調べることができます。
+ CloudFront ディストリビューションでこれらの動画をホストする前に、特定のテレビや接続されたデバイスで必要なストリーミング形式に S3 動画をトランスコードします。

  Amazon S3 バッチオペレーション、AWS Lambda、および AWS Elemental MediaConvert を使用して、動画のコレクションをさまざまな出力メディア形式にバッチトランスコードする方法の詳細については、「[チュートリアル: S3 バッチオペレーションを使用した動画のバッチトランスコーディング](tutorial-s3-batchops-lambda-mediaconvert-video.md)」を参照してください。
+ CloudFront と Route 53 を使用して、画像、オーディオ、モーショングラフィックス、スタイルシート、HTML、JavaScript、React アプリなど、S3 に保存されている他のオブジェクトをホストします。

  例については、「[チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](website-hosting-custom-domain-walkthrough.md)」および「[Amazon CloudFront によるウェブサイトの高速化](website-hosting-cloudfront-walkthrough.md)」を参照してください。
+ [Amazon S3 Transfer Acceleration](https://aws.amazon.com/s3/transfer-acceleration) を使用して、高速かつ安全なファイル転送を設定します。転送アクセラレーションを使用すると、S3 バケットへの動画のアップロードを高速化して、大きな動画の長距離転送を行うことができます。Transfer Acceleration は、CloudFront のグローバルに分散したエッジロケーションや AWS バックボーンネットワークを経由してトラフィックをルーティングすることで、転送パフォーマンスを向上させます。また、ネットワークプロトコルの最適化も利用します。詳細については、「[Amazon S3 Transfer Acceleration を使用した高速かつ安全なファイル転送の設定](transfer-acceleration.md)」を参照してください。

# チュートリアル: Amazon S3 での静的ウェブサイトの設定
<a name="HostingWebsiteOnS3Setup"></a>

**重要**  
Amazon S3 では、Amazon S3 内のすべてのバケットの基本レベルの暗号化として、Amazon S3 が管理するキー (SSE-S3) によるサーバー側の暗号化が適用されるようになりました。2023 年 1 月 5 日以降、Amazon S3 にアップロードされるすべての新しいオブジェクトは、追加費用なしで、パフォーマンスに影響を与えずに自動的に暗号化されます。S3 バケットのデフォルト暗号化設定と新しいオブジェクトのアップロードのための自動暗号化ステータスは、CloudTrail ログ、S3 インベントリ、S3 ストレージレンズ、Amazon S3 コンソール、および AWS CLI と AWS SDK の追加の Amazon S3 API レスポンスヘッダーとして利用できるようになりました。詳細については、「[デフォルト暗号化に関するよくある質問](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)」を参照してください。

Amazon S3 バケットは、ウェブサイトと同じように機能するように設定できます。この例では、Amazon S3 上でウェブサイトをホスティングするステップを説明します。

**重要**  
次のチュートリアルでは、[パブリックアクセスをブロック] を無効にする必要があります。[パブリックアクセスをブロック] 設定は、有効にしておくことをお勧めします。4 つすべての [パブリックアクセスをブロック] 設定を有効にしたまま、静的ウェブサイトをホストする場合は、Amazon CloudFront のオリジンアクセスコントロール (OAC) を使用できます。Amazon CloudFront は、セキュアな静的ウェブサイトをセットアップするために必要な機能を提供します。Amazon S3 静的ウェブサイトは、HTTP エンドポイントのみをサポートしています。Amazon CloudFront は、耐久性に優れた Amazon S3 のあるストレージを使用し、HTTPS などの、追加のセキュリティヘッダーを提供します。HTTPS では、通常の HTTP リクエストを暗号化し、一般的なサイバー攻撃から保護することで、セキュリティが強化されます。詳細については、**「Amazon CloudFront デベロッパーガイド」の「[安全な静的ウェブサイトの使用開始](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/getting-started-secure-static-website-cloudformation-template.html)」を参照してください。

**Topics**
+ [ステップ 1: バケットを作成する](#step1-create-bucket-config-as-website)
+ [ステップ 2: 静的ウェブサイトホスティングを有効にする](#step2-create-bucket-config-as-website)
+ [ステップ 3: パブリックアクセスブロック設定を編集する](#step3-edit-block-public-access)
+ [ステップ 4: バケットの内容の公開を許可するバケットポリシーを追加する](#step4-add-bucket-policy-make-content-public)
+ [ステップ 5: インデックスドキュメントを設定する](#step5-upload-index-doc)
+ [ステップ 6: エラードキュメントの設定](#step6-upload-error-doc)
+ [ステップ 7: ウェブサイトエンドポイントをテストする](#step7-test-web-site)
+ [ステップ 8: クリーンアップする](#getting-started-cleanup-s3-website-overview)

## ステップ 1: バケットを作成する
<a name="step1-create-bucket-config-as-website"></a>

以下の手順では、ウェブサイトホスティングにバケットを作成する方法の概要を説明します。バケットの作成に関するステップバイステップの方法は、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

**バケットを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. [**Create bucket**] (バケットの作成) をクリックします。

1. [**バケット名**] (**example.com** など) を入力します。

1. バケットを作成するリージョンを選択します。

   レイテンシーとコストを最小限に抑えるため、または規制要件に対処するために、最寄りのリージョンを選択します。選択したリージョンによって、Amazon S3 ウェブサイトエンドポイントが決まります。詳細については、「[ウェブサイトエンドポイント](WebsiteEndpoints.md)」を参照してください。

1. デフォルト設定をそのまま使用してバケットを作成するには、[**作成**] を選択します。

## ステップ 2: 静的ウェブサイトホスティングを有効にする
<a name="step2-create-bucket-config-as-website"></a>

バケットを作成したら、バケットの静的ウェブサイトホスティングを有効にできます。新しいバケットを作成することも、既存のバケットを使用することもできます。

**静的ウェブサイトホスティングを有効にするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングを有効にするバケットの名前を選択します。

1. **[プロパティ]** を選択します。

1. [**静的ウェブサイトホスティング**] で [**編集**] を選択します。

1. [**このバケットを使用してウェブサイトをホストする**] を選択します。

1. [**静的ウェブサイトホスティング**] で [**有効化**] を選択します。

1. **[インデックスドキュメント]** に、インデックスドキュメントのファイル名 (通常は `index.html`) を入力します。

   インデックスドキュメント名の大文字と小文字は区別されます。この名前は、S3 バケットにアップロードする HTML インデックスドキュメントのファイル名と正確に一致する必要があります。バケットをウェブサイトホスティング用に設定するときは、インデックスドキュメントを指定する必要があります。Amazon S3 からこのインデックスドキュメントが返されるのは、ルートドメインまたはサブフォルダに対するリクエストが行われたときです。詳細については、「[インデックスドキュメントの設定](IndexDocumentSupport.md)」を参照してください。

1. 4XX クラスエラーに関する独自のカスタムエラードキュメントを指定する場合は、[**エラードキュメント**] にカスタムエラードキュメントのファイル名を入力します。

   エラードキュメント名の大文字と小文字は区別されます。この名前は、S3 バケットにアップロードする HTML エラードキュメントのファイル名と正確に一致する必要があります。カスタムエラードキュメントを指定しない場合、エラーが発生すると、Amazon S3 からデフォルトの HTML エラードキュメントが返されます。詳細については、「[カスタムエラードキュメントの設定](CustomErrorDocSupport.md)」を参照してください。

1. (オプション) 高度なリダイレクトツールを指定する場合は、**[Rredirection rules]** (リダイレクトルール) に、JSON を入力してルールを記述します。

   例えば、条件に応じてリクエストのルーティング先を変えることができます。この条件として使用できるのは、リクエストの中の特定のオブジェクトキー名またはプレフィックスです。詳細については、「[高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する](how-to-page-redirect.md#advanced-conditional-redirects)」を参照してください。

1. [**Save changes**] (変更の保存) をクリックします。

   Amazon S3 では、バケットの静的ウェブサイトホスティングを有効にします。ページの下部の [**静的ウェブサイトホスティング**] の下に、バケットのウェブサイトエンドポイントが表示されます。

1. [**静的 ウェブサイトホスティング**] の下の**エンドポイント**を書き留めます。

   [**Endpoint (エンドポイント)**] は、バケットの Amazon S3 ウェブサイトエンドポイントです。バケットを静的ウェブサイトとして設定すると、このエンドポイントを使用してウェブサイトをテストできます。

## ステップ 3: パブリックアクセスブロック設定を編集する
<a name="step3-edit-block-public-access"></a>

デフォルトでは、Amazon S3 はアカウントとバケットへのパブリックアクセスをブロックします。バケットを使用して静的ウェブサイトをホストする場合は、以下のステップを使用して、パブリックアクセスブロック設定を編集できます。

**警告**  
このステップを完了する前に「[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md)」を読んで、パブリックアクセスを許可することに伴うリスクを理解し、了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. 静的ウェブサイトとして設定されたバケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. **[ブロックパブリックアクセス (バケット設定)]** で **[編集]** を選択します。

1. [**Block *all* public access (すべてのパブリックアクセスをブロックする)**] をクリアし、[**Save changes (変更の保存)**] を選択します。  
![\[バケットのブロックパブリックアクセス設定を示す Amazon S3 コンソール。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/edit-public-access-clear.png)

   Amazon S3 で、バケットのブロックパブリックアクセス設定がオフになります。パブリックな静的ウェブサイトを作成するには、バケットポリシーを追加する前に、アカウントの[ブロックパブリックアクセス設定を編集する](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-account.html)必要があります。アカウントのブロックパブリックアクセス設定が現在有効になっている場合は、**[ブロックパブリックアクセス (バケット設定)]** の下にメモが表示されます。

## ステップ 4: バケットの内容の公開を許可するバケットポリシーを追加する
<a name="step4-add-bucket-policy-make-content-public"></a>

S3 のパブリックアクセスブロック設定を編集した後で、バケットへのパブリック読み取りアクセスを許可するバケットポリシーを追加できます。パブリック読み取りアクセスを許可すると、インターネット上のだれでもバケットにアクセスできるようになります。

**重要**  
次のポリシーは、単なる例として、バケットのコンテンツへのフルアクセスを許可します。このステップに進む前に、「[Amazon S3 バケット内のファイルを保護するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/secure-s3-resources/)」を確認して、S3 バケット内のファイルを保護するためのベストプラクティスと、パブリックアクセスの許可に伴うリスクを理解してください。

1. [**バケット**] で、バケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. [**Bucket Policy (バケットポリシー)**] で [**編集**] を選択します。

1. ウェブサイトのパブリック読み取りアクセスを許可するには、次のバケットポリシーをコピーし、[**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* はバケット名のプレースホルダーです。このバケットポリシーを独自のバケットで使用するには、バケット名に合わせてこの名前を更新する必要があります。

1. [**Save changes**] (変更の保存) をクリックします。

   バケットポリシーが正常に追加されたことを示すメッセージが表示されます。

   `Policy has invalid resource` というエラーが表示された場合は、バケットポリシー内のバケット名がバケット名と一致していることを確認します。バケットポリシーの追加については、「[S3 バケットポリシーを追加する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)」を参照してください。

   エラーメッセージが表示され、バケットポリシーを保存できない場合は、アカウントとバケットの [パブリックアクセスをブロックする] 設定をチェックして、バケットへのパブリックアクセスを許可していることを確認します。

## ステップ 5: インデックスドキュメントを設定する
<a name="step5-upload-index-doc"></a>

バケットに対して静的ウェブサイトホスティングを有効にする場合は、インデックスドキュメントの名前 (**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. インデックスファイルをローカルに保存します。

   インデックスドキュメントファイル名は、[**静的ウェブサイトホスティング**] ダイアログボックスで入力したインデックスドキュメント名と正確に一致する必要があります。インデックスドキュメント名では、大文字と小文字が区別されます。例えば、**[静的ウェブサイトホスティング]** ダイアログボックスの **[インデックスドキュメント]** 名に「`index.html`」と入力する場合、インデックスドキュメントファイル名も `Index.html` ではなく `index.html` である必要があります。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングに使用するバケットの名前を選択します。

1. バケットに対して静的ウェブサイトホスティングを有効にし、インデックスドキュメントの正確な名前 (`index.html` など) を入力します。詳細については、「[ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)」を参照してください。

   静的ウェブサイトホスティングを有効にしたら、ステップ 6 に進みます。

1. インデックスドキュメントをバケットにアップロードするには、以下のいずれかを実行します。
   + インデックスファイルをコンソールバケットのリストにドラッグアンドドロップします。
   + [**Upload**] を選択し、プロンプトに従ってインデックスファイルを選択してアップロードします。

   手順については、「[オブジェクトのアップロード](upload-objects.md)」を参照してください。

1. (オプション) 他のウェブサイトコンテンツをバケットにアップロードします。

## ステップ 6: エラードキュメントの設定
<a name="step6-upload-error-doc"></a>

バケットに対して静的ウェブサイトホスティングを有効にするときは、エラードキュメントの名前 (例: **404.html**) を入力します。バケットに対して静的ウェブサイトホスティングを有効にしたら、エラードキュメント名を含む HTML ファイルをバケットにアップロードします。

**エラードキュメントを設定するには**

1. エラードキュメント (例: `404.html`) を作成します。

1. エラードキュメントのファイルをローカルに保存します。

   エラードキュメントの名前は、大文字と小文字を区別し、静的ウェブサイトホスティングを有効にする際に入力した名前と厳密に一致している必要があります。たとえば、[**Static website hosting**] (静的ウェブサイトホスティング) ダイアログボックスの [**Error document**] (エラードキュメント) 名に `404.html` と入力する場合、エラードキュメントのファイル名も `404.html` である必要があります。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングに使用するバケットの名前を選択します。

1. バケットに対して静的ウェブサイトホスティングを有効にし、エラードキュメントの正確な名前 (例: `404.html`) を入力します。詳細については、「[ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)」および「[カスタムエラードキュメントの設定](CustomErrorDocSupport.md)」を参照してください。

   静的ウェブサイトホスティングを有効にしたら、ステップ 6 に進みます。

1. エラードキュメントをバケットにアップロードするには、以下のいずれかを実行します。
   + エラードキュメントファイルをコンソールバケットのリストにドラッグアンドドロップします。
   + [**Upload**] を選択し、プロンプトに従ってインデックスファイルを選択してアップロードします。

   手順については、「[オブジェクトのアップロード](upload-objects.md)」を参照してください。

## ステップ 7: ウェブサイトエンドポイントをテストする
<a name="step7-test-web-site"></a>

バケットに静的ウェブサイトホスティングを設定したら、ウェブサイトエンドポイントをテストできます。

**注記**  
Amazon S3 は、ウェブサイトへの HTTPS アクセスをサポートしていません。HTTPS を使用する場合は、Amazon CloudFront を使用して Amazon S3 でホストされている静的ウェブサイトを提供できます。  
詳細については、「[CloudFront を使用して、Amazon S3 でホストされた静的ウェブサイトを公開するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/)」と「[ビューワーと CloudFront との通信で HTTPS を必須にする](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)」を参照してください。

1. [**バケット**] で、バケットの名前を選択します。

1. [**プロパティ**] を選択します。

1. ページの下部の [**静的ウェブサイトホスティング**] で、[**Bucket website endpoint (バケットウェブサイトエンドポイント)**] を選択します。

   インデックスドキュメントが別のブラウザウィンドウで開きます。

これで、Amazon S3 でウェブサイトがホスティングされるようになりました。このウェブサイトには、Amazon S3 ウェブサイトエンドポイントの URL を指定してアクセスできます。ただし、作成したウェブサイトのコンテンツを配信するのに、`example.com` などのドメインを使用することもできます。また、Amazon S3 のルートドメインサポートを利用すると、`http://www.example.com` と `http://example.com` のどちらのリクエストでも処理できるようになります。このようにするには、追加のステップが必要です。例については、「[チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定](website-hosting-custom-domain-walkthrough.md)」を参照してください。

## ステップ 8: クリーンアップする
<a name="getting-started-cleanup-s3-website-overview"></a>

学習のためだけに静的ウェブサイトを作成した場合は、割り当てた AWS リソースを削除して、料金が発生しないようにします。AWS リソースを削除すると、ウェブサイトは使用できなくなります。詳細については、「[汎用バケットの削除](delete-bucket.md)」を参照してください。

# チュートリアル: Route 53 に登録されたカスタムドメインを使用した静的ウェブサイトの設定
<a name="website-hosting-custom-domain-walkthrough"></a>

Amazon S3 で静的ウェブサイトをホスティングするとします。ドメインは Amazon Route 53 で登録済みであり (例: `example.com`)、`http://www.example.com` と `http://example.com` へのリクエストに対しては Amazon S3 からコンテンツを配信するようにします。このチュートリアルでは、静的ウェブサイトをホスティングし、Route 53 に登録されているカスタムドメイン名を持つウェブサイトのリダイレクトを Amazon S3 で作成する方法について説明します。Amazon S3 でホストしようとしている既存のウェブサイトを使ってもよいですし、このチュートリアルで一から始めることもできます。

チュートリアルが完了したら、Amazon CloudFront を使ってウェブサイトのパフォーマンスを向上させることも可能です。詳細については、「[Amazon CloudFront によるウェブサイトの高速化](website-hosting-cloudfront-walkthrough.md)」を参照してください。

**注記**  
Amazon S3 ウェブサイトエンドポイントは HTTPS またはアクセスポイントをサポートしていません。HTTPS を使用する場合は、Amazon CloudFront を使用して Amazon S3 でホストされている静的ウェブサイトを提供できます。  
CloudFront と Amazon S3 でコンテンツを安全にホストする方法のチュートリアルについては、「[チュートリアル: Amazon S3、Amazon CloudFront、Amazon Route 53 を使用したオンデマンドストリーミング動画のホスティング。](tutorial-s3-cloudfront-route53-video-streaming.md)」を参照してください。詳細については、「[CloudFront を使用して、Amazon S3 でホストされた静的ウェブサイトを公開するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/)」と「[ビューワーと CloudFrontとの通信で HTTPS を必須にする](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)」を参照してください。

**CloudFormation テンプレートを使用した静的ウェブサイトの設定の自動化**  
CloudFormation テンプレートを使用すると、静的ウェブサイトの設定を自動化することができます。CloudFormation テンプレートによって安全な静的ウェブサイトをホストするために必要なコンポーネントが設定されるため、コンポーネントの設定よりもウェブサイトのコンテンツに注力できるようになります。

CloudFormation テンプレートには、以下のコンポーネントが含まれています。
+ Amazon S3 - 静的ウェブサイトをホストする Amazon S3 バケットを作成します。
+ CloudFront - 静的ウェブサイトを高速化するために、CloudFront ディストリビューションを作成します。
+ Lambda@Edge ‐ [Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) を使用して、サーバーのすべてのレスポンスにセキュリティヘッダーを追加します。セキュリティヘッダーは、ウェブサーバーレスポンス内のヘッダーのグループであり、追加のセキュリティ対策を講じるようにウェブブラウザに指示します。詳細については、ブログ記事「[Adding HTTP security headers using Lambda@Edge and Amazon CloudFront](https://aws.amazon.com/blogs/networking-and-content-delivery/adding-http-security-headers-using-lambdaedge-and-amazon-cloudfront/)」を参照してください。

この CloudFormation テンプレートは、ダウンロードして使用することができます。詳細および手順については、*Amazon CloudFront デベロッパーガイド*の「[安全な静的ウェブサイトの使用開始](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/getting-started-secure-static-website-cloudformation-template.html)」を参照してください。

**Topics**
+ [開始する前に](#root-domain-walkthrough-before-you-begin)
+ [ステップ 1: カスタムドメインを Route 53 に登録する](#website-hosting-custom-domain-walkthrough-domain-registry)
+ [ステップ 2: バケットを 2 つ作成する](#root-domain-walkthrough-create-buckets)
+ [ステップ 3: ウェブサイトホスティング用にルートドメインのバケットを設定する](#root-domain-walkthrough-configure-bucket-aswebsite)
+ [ステップ 4: ウェブサイトのリダイレクト用にサブドメインのバケットを設定する](#root-domain-walkthrough-configure-redirect)
+ [ステップ 5: ウェブサイトトラフィックのログ記録を設定する](#root-domain-walkthrough-configure-logging)
+ [ステップ 6: インデックスとウェブサイトのコンテンツをアップロードする](#upload-website-content)
+ [ステップ 7: エラードキュメントのアップロード](#configure-error-document-root-domain)
+ [ステップ 8: S3 のパブリックアクセスのブロック設定を編集する](#root-domain-walkthrough-configure-bucket-permissions)
+ [ステップ 9: バケットポリシーをアタッチする](#add-bucket-policy-root-domain)
+ [ステップ 10: ドメインエンドポイントをテストする](#root-domain-walkthrough-test-website)
+ [ステップ 11: ドメインとサブドメインのエイリアスレコードを追加する](#root-domain-walkthrough-add-record-to-hostedzone)
+ [ステップ 12: ウェブサイトをテストする](#root-domain-testing)
+ [Amazon CloudFront によるウェブサイトの高速化](website-hosting-cloudfront-walkthrough.md)
+ [サンプルリソースのクリーンアップ](getting-started-cleanup.md)

## 開始する前に
<a name="root-domain-walkthrough-before-you-begin"></a>

この例で実行するステップでは、以下のサービスを使用します。

**Amazon Route 53** - Route 53 では、ドメインを登録し、ドメインのインターネットトラフィックをルーティングする先を定義します。以下の例では、Route 53 エイリアスレコードを作成して、ドメイン (`example.com`) とサブドメイン (`www.example.com`) のトラフィックを HTML ファイルが含まれている Amazon S3 バケットにルーティングする方法を示します。

**Amazon S3** - Amazon S3 を使用して、バケットを作成したり、サンプルウェブサイトページをアップロードしたり、全員がコンテンツを表示できるようアクセス許可を設定したりします。また、ウェブサイトホスティング用にバケットを設定することもできます。

## ステップ 1: カスタムドメインを Route 53 に登録する
<a name="website-hosting-custom-domain-walkthrough-domain-registry"></a>

登録済みドメイン名 (`example.com` など) がない場合は、Route 53 でドメイン名を登録します。詳細については、*Amazon Route 53 デベロッパーガイド*の「[新しいドメインの登録](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html)」を参照してください。ドメイン名を登録したら、Amazon S3 バケットを作成してウェブサイトのホスティング用に設定できます。

## ステップ 2: バケットを 2 つ作成する
<a name="root-domain-walkthrough-create-buckets"></a>

ルートドメインとサブドメインからの両方のリクエストをサポートするには、2 つのバケットを作成します。
+ **ドメインバケット** ‐ `example.com`
+ **サブドメインバケット** ‐ `www.example.com` 

これらのバケット名はドメイン名と厳密に一致している必要があります。この例では、ドメイン名は `example.com` です。コンテンツをルートドメインバケット (`example.com`) からホストします。サブドメインバケットのリダイレクトリクエストを作成します (`www.example.com`)。他のユーザーがブラウザに `www.example.com` を入力すると、`example.com` にリダイレクトされ、その名前で Amazon S3 バケットにホストされているコンテンツが表示されます。

**バケットをウェブサイトホスティング用に作成するには**

以下の手順では、ウェブサイトホスティングにバケットを作成する方法の概要を説明します。バケットの作成に関するステップバイステップの方法は、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. ルートドメインのバケットを作成します。

   1. ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、バケットを作成するリージョンを選択します。
**注記**  
レイテンシーとコストを最小化するため、さらに規制条件に対応するために、最寄りのリージョンを選択します。明示的に別のリージョンに移動する場合を除き、特定のリージョンに保管されたオブジェクトは、そのリージョンから移動されることはありません。Amazon S3 AWS リージョン のリストについては、**「Amazon Web Services 全般のリファレンス」の「[AWS のサービス エンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)」を参照してください。

   1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

   1. [**Create bucket (バケットの作成)**] を選択します。**[バケットの作成]** ページが開きます。

   1. [**バケット名**] (**example.com** など) を入力します。

   1. バケットを作成するリージョンを選択します。

      レイテンシーとコストを最小限に抑えるため、または規制要件に対処するために、最寄りのリージョンを選択します。選択したリージョンによって、Amazon S3 ウェブサイトエンドポイントが決まります。詳細については、「[ウェブサイトエンドポイント](WebsiteEndpoints.md)」を参照してください。

   1. デフォルト設定をそのまま使用してバケットを作成するには、[**作成**] を選択します。

1. サブドメインのバケットを作成します。

   1. [**Create bucket**] (バケットの作成) をクリックします。

   1. [**バケット名**] (**www.example.com** など) を入力します。

   1. バケットを作成するリージョンを選択します。

      レイテンシーとコストを最小限に抑えるため、または規制要件に対処するために、最寄りのリージョンを選択します。選択したリージョンによって、Amazon S3 ウェブサイトエンドポイントが決まります。詳細については、「[ウェブサイトエンドポイント](WebsiteEndpoints.md)」を参照してください。

   1. デフォルト設定をそのまま使用してバケットを作成するには、[**作成**] を選択します。

次のステップでは、ウェブサイトホスティング用に `example.com` を設定します。

## ステップ 3: ウェブサイトホスティング用にルートドメインのバケットを設定する
<a name="root-domain-walkthrough-configure-bucket-aswebsite"></a>

このステップでは、ルートドメインのバケット (`example.com`) をウェブサイトとして設定します。このバケットには、ウェブサイトのコンテンツが含まれます。バケットをウェブサイトホスティング用に設定すると、そのウェブサイトには [ウェブサイトエンドポイント](WebsiteEndpoints.md) を使用してアクセスできるようになります。

**静的ウェブサイトホスティングを有効にするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングを有効にするバケットの名前を選択します。

1. **[プロパティ]** を選択します。

1. [**静的ウェブサイトホスティング**] で [**編集**] を選択します。

1. [**このバケットを使用してウェブサイトをホストする**] を選択します。

1. [**静的ウェブサイトホスティング**] で [**有効化**] を選択します。

1. **[インデックスドキュメント]** に、インデックスドキュメントのファイル名 (通常は `index.html`) を入力します。

   インデックスドキュメント名の大文字と小文字は区別されます。この名前は、S3 バケットにアップロードする HTML インデックスドキュメントのファイル名と正確に一致する必要があります。バケットをウェブサイトホスティング用に設定するときは、インデックスドキュメントを指定する必要があります。Amazon S3 からこのインデックスドキュメントが返されるのは、ルートドメインまたはサブフォルダに対するリクエストが行われたときです。詳細については、「[インデックスドキュメントの設定](IndexDocumentSupport.md)」を参照してください。

1. 4XX クラスエラーに関する独自のカスタムエラードキュメントを指定する場合は、[**エラードキュメント**] にカスタムエラードキュメントのファイル名を入力します。

   エラードキュメント名の大文字と小文字は区別されます。この名前は、S3 バケットにアップロードする HTML エラードキュメントのファイル名と正確に一致する必要があります。カスタムエラードキュメントを指定しない場合、エラーが発生すると、Amazon S3 からデフォルトの HTML エラードキュメントが返されます。詳細については、「[カスタムエラードキュメントの設定](CustomErrorDocSupport.md)」を参照してください。

1. (オプション) 高度なリダイレクトツールを指定する場合は、**[Rredirection rules]** (リダイレクトルール) に、JSON を入力してルールを記述します。

   例えば、条件に応じてリクエストのルーティング先を変えることができます。この条件として使用できるのは、リクエストの中の特定のオブジェクトキー名またはプレフィックスです。詳細については、「[高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する](how-to-page-redirect.md#advanced-conditional-redirects)」を参照してください。

1. [**Save changes**] (変更の保存) をクリックします。

   Amazon S3 では、バケットの静的ウェブサイトホスティングを有効にします。ページの下部の [**静的ウェブサイトホスティング**] の下に、バケットのウェブサイトエンドポイントが表示されます。

1. [**静的 ウェブサイトホスティング**] の下の**エンドポイント**を書き留めます。

   [**Endpoint (エンドポイント)**] は、バケットの Amazon S3 ウェブサイトエンドポイントです。バケットを静的ウェブサイトとして設定すると、このエンドポイントを使用してウェブサイトをテストできます。

[パブリックアクセスのブロック設定を編集し](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html#root-domain-walkthrough-configure-bucket-permissions)、パブリック読み取りアクセスを許可する[バケットポリシーを追加](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-custom-domain-walkthrough.html#add-bucket-policy-root-domain)したら、ウェブサイトエンドポイントを使用してウェブサイトにアクセスできます。

次のステップで、リクエストをドメイン (`www.example.com`) にリダイレクトするように、サブドメイン (`example.com`) を設定します。

## ステップ 4: ウェブサイトのリダイレクト用にサブドメインのバケットを設定する
<a name="root-domain-walkthrough-configure-redirect"></a>

ウェブサイトホスティング用にルートドメインのバケットを設定したら、このドメインにすべてのリクエストをリダイレクトするように、サブドメインのバケットを設定できます。この例では `www.example.com` のすべてのリクエストが `example.com` にリダイレクトされます。

**リダイレクトリクエストを設定するには**

1. Amazon S3 コンソールの **[汎用バケット]** リストで、サブドメインのバケット名 (この例では `www.example.com`) を選択します。

1. **[プロパティ]** を選択します。

1. [**静的ウェブサイトホスティング**] で [**編集**] を選択します。

1. [**Redirect requests for an object (オブジェクトのリクエストをリダイレクト)**] を選択します。

1. [**Target bucket (ターゲットバケット)**] ボックスに、ルートドメイン (**example.com** など) を入力します。

1. [**Protocol (プロトコル)**] で、[**http**] を選択します。

1. [**Save changes**] (変更の保存) をクリックします。

## ステップ 5: ウェブサイトトラフィックのログ記録を設定する
<a name="root-domain-walkthrough-configure-logging"></a>

ウェブサイトにアクセスする閲覧者の数を追跡するには、オプションでルートドメインのバケットのログ記録を有効にできます。詳細については、「[サーバーアクセスログによるリクエストのログ記録](ServerLogs.md)」を参照してください。Amazon CloudFront を使用してウェブサイトを高速化する場合は、CloudFront のログ記録を使用することもできます。

**ルートドメインバケット用のサーバーアクセスのログ記録を有効にするには**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. 静的ウェブサイトとして設定しているバケットを作成したのと同じリージョンで、ログ記録用のバケットを作成します (例: `logs.example.com`)。

1. サーバアクセスのログを記録するログファイル用のフォルダを作成します (例: `logs`)。

1. (オプション) CloudFront を使用してウェブサイトのパフォーマンスを向上させる場合は、CloudFront ログファイル用のフォルダを作成します (例: `cdn`)。
**重要**  
ディストリビューションを作成または更新して CloudFront のログを有効にすると、CloudFront はバケットのアクセスコントロールリスト (ACL) を更新して、バケットにログを書き込む `awslogsdelivery` アクセス許可を `FULL_CONTROL` アカウントに付与します。詳細については、**「Amazon CloudFront デベロッパーガイド」の「[標準ログ記録の設定とログファイルへのアクセスに必要なアクセス許可](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#AccessLogsBucketAndFileOwnership)」を参照してください。ログを保存するバケットが S3 オブジェクト所有権のバケット所有者の強制設定を使用して ACL を無効にすると、CloudFront はバケットにログを書き込むことができません。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

1. [**Bucket (バケット)**] リストで、ルートドメインのバケットを選択します。

1. [**プロパティ**] を選択します。

1. [**Server access logging (サーバーアクセスのログ記録)**] で、[**Edit (編集)**] を選択します。

1. [**Enable**] を選択します。

1. [**Target bucket (ターゲットバケット)**] で、サーバーアクセスログのバケットとフォルダの宛先を選択します。
   + フォルダとバケットの場所を参照します。

     1. [**Browse S3(S3 の参照)**] を選択します。

     1. バケット名を選択し、ログフォルダを選択します。

     1. [**Choose path (パスの選択)**] を選択します。
   + S3 バケットパスを入力します (例: `s3://logs.example.com/logs/`)。

1. [**Save changes**] (変更の保存) をクリックします。

   ログバケットで、ログにアクセスできるようになりました。Amazon S3 は 2 時間おきにログバケットにウェブサイトアクセスログを書き込みます。

## ステップ 6: インデックスとウェブサイトのコンテンツをアップロードする
<a name="upload-website-content"></a>

このステップでは、インデックスドキュメントとオプションのウェブサイトコンテンツをルートドメインのバケットにアップロードします。

バケットに対して静的ウェブサイトホスティングを有効にする場合は、インデックスドキュメントの名前 (**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. インデックスファイルをローカルに保存します。

   インデックスドキュメントファイル名は、[**静的ウェブサイトホスティング**] ダイアログボックスで入力したインデックスドキュメント名と正確に一致する必要があります。インデックスドキュメント名では、大文字と小文字が区別されます。例えば、**[静的ウェブサイトホスティング]** ダイアログボックスの **[インデックスドキュメント]** 名に「`index.html`」と入力する場合、インデックスドキュメントファイル名も `Index.html` ではなく `index.html` である必要があります。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングに使用するバケットの名前を選択します。

1. バケットに対して静的ウェブサイトホスティングを有効にし、インデックスドキュメントの正確な名前 (`index.html` など) を入力します。詳細については、「[ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)」を参照してください。

   静的ウェブサイトホスティングを有効にしたら、ステップ 6 に進みます。

1. インデックスドキュメントをバケットにアップロードするには、以下のいずれかを実行します。
   + インデックスファイルをコンソールバケットのリストにドラッグアンドドロップします。
   + [**Upload**] を選択し、プロンプトに従ってインデックスファイルを選択してアップロードします。

   手順については、「[オブジェクトのアップロード](upload-objects.md)」を参照してください。

1. (オプション) 他のウェブサイトコンテンツをバケットにアップロードします。

## ステップ 7: エラードキュメントのアップロード
<a name="configure-error-document-root-domain"></a>

バケットに対して静的ウェブサイトホスティングを有効にするときは、エラードキュメントの名前 (例: **404.html**) を入力します。バケットに対して静的ウェブサイトホスティングを有効にしたら、エラードキュメント名を含む HTML ファイルをバケットにアップロードします。

**エラードキュメントを設定するには**

1. エラードキュメント (例: `404.html`) を作成します。

1. エラードキュメントのファイルをローカルに保存します。

   エラードキュメントの名前は、大文字と小文字を区別し、静的ウェブサイトホスティングを有効にする際に入力した名前と厳密に一致している必要があります。たとえば、[**Static website hosting**] (静的ウェブサイトホスティング) ダイアログボックスの [**Error document**] (エラードキュメント) 名に `404.html` と入力する場合、エラードキュメントのファイル名も `404.html` である必要があります。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、静的ウェブサイトホスティングに使用するバケットの名前を選択します。

1. バケットに対して静的ウェブサイトホスティングを有効にし、エラードキュメントの正確な名前 (例: `404.html`) を入力します。詳細については、「[ウェブサイトのホスティングの有効化](EnableWebsiteHosting.md)」および「[カスタムエラードキュメントの設定](CustomErrorDocSupport.md)」を参照してください。

   静的ウェブサイトホスティングを有効にしたら、ステップ 6 に進みます。

1. エラードキュメントをバケットにアップロードするには、以下のいずれかを実行します。
   + エラードキュメントファイルをコンソールバケットのリストにドラッグアンドドロップします。
   + [**Upload**] を選択し、プロンプトに従ってインデックスファイルを選択してアップロードします。

   手順については、「[オブジェクトのアップロード](upload-objects.md)」を参照してください。

## ステップ 8: S3 のパブリックアクセスのブロック設定を編集する
<a name="root-domain-walkthrough-configure-bucket-permissions"></a>

この例では、ドメインバケット (`example.com`) のパブリックアクセスブロック設定を編集して、パブリックアクセスを許可します。

デフォルトでは、Amazon S3 はアカウントとバケットへのパブリックアクセスをブロックします。バケットを使用して静的ウェブサイトをホストする場合は、以下のステップを使用して、パブリックアクセスブロック設定を編集できます。

**警告**  
このステップを完了する前に「[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md)」を読んで、パブリックアクセスを許可することに伴うリスクを理解し、了承してください。パブリックアクセスブロック設定をオフにしてバケットをパブリックにすると、インターネット上のだれでもバケットにアクセスできるようになります。バケットへのすべてのパブリックアクセスをブロックすることをお勧めします。

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. 静的ウェブサイトとして設定されたバケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. **[ブロックパブリックアクセス (バケット設定)]** で **[編集]** を選択します。

1. [**Block *all* public access (すべてのパブリックアクセスをブロックする)**] をクリアし、[**Save changes (変更の保存)**] を選択します。  
![\[バケットのブロックパブリックアクセス設定を示す Amazon S3 コンソール。\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/edit-public-access-clear.png)

   Amazon S3 で、バケットのブロックパブリックアクセス設定がオフになります。パブリックな静的ウェブサイトを作成するには、バケットポリシーを追加する前に、アカウントの[ブロックパブリックアクセス設定を編集する](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/block-public-access-account.html)必要があります。アカウントのブロックパブリックアクセス設定が現在有効になっている場合は、**[ブロックパブリックアクセス (バケット設定)]** の下にメモが表示されます。

## ステップ 9: バケットポリシーをアタッチする
<a name="add-bucket-policy-root-domain"></a>

この例では、バケットポリシーをドメインバケット (`example.com`) にアタッチして、パブリック読み取りアクセスを許可します。例えば、バケットポリシーの例の *Bucket-Name* は、ドメインバケットの名前 (例: `example.com`) に置き換えます。

S3 のパブリックアクセスブロック設定を編集した後で、バケットへのパブリック読み取りアクセスを許可するバケットポリシーを追加できます。パブリック読み取りアクセスを許可すると、インターネット上のだれでもバケットにアクセスできるようになります。

**重要**  
次のポリシーは、単なる例として、バケットのコンテンツへのフルアクセスを許可します。このステップに進む前に、「[Amazon S3 バケット内のファイルを保護するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/secure-s3-resources/)」を確認して、S3 バケット内のファイルを保護するためのベストプラクティスと、パブリックアクセスの許可に伴うリスクを理解してください。

1. [**バケット**] で、バケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. [**Bucket Policy (バケットポリシー)**] で [**編集**] を選択します。

1. ウェブサイトのパブリック読み取りアクセスを許可するには、次のバケットポリシーをコピーし、[**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* はバケット名のプレースホルダーです。このバケットポリシーを独自のバケットで使用するには、バケット名に合わせてこの名前を更新する必要があります。

1. [**Save changes**] (変更の保存) をクリックします。

   バケットポリシーが正常に追加されたことを示すメッセージが表示されます。

   `Policy has invalid resource` というエラーが表示された場合は、バケットポリシー内のバケット名がバケット名と一致していることを確認します。バケットポリシーの追加については、「[S3 バケットポリシーを追加する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)」を参照してください。

   エラーメッセージが表示され、バケットポリシーを保存できない場合は、アカウントとバケットの [パブリックアクセスをブロックする] 設定をチェックして、バケットへのパブリックアクセスを許可していることを確認します。

次のステップでは、ウェブサイトのエンドポイントを判別し、ドメインエンドポイントをテストできます。

## ステップ 10: ドメインエンドポイントをテストする
<a name="root-domain-walkthrough-test-website"></a>

パブリックウェブサイトをホストするようにドメインバケットを設定したら、エンドポイントをテストできます。詳細については、「[ウェブサイトエンドポイント](WebsiteEndpoints.md)」を参照してください。サブドメインバケットは、静的ウェブサイトホスティングではなくウェブサイトリダイレクト用に設定されているため、テストできるのはドメインバケットのエンドポイントのみです。

**注記**  
Amazon S3 は、ウェブサイトへの HTTPS アクセスをサポートしていません。HTTPS を使用する場合は、Amazon CloudFront を使用して Amazon S3 でホストされている静的ウェブサイトを提供できます。  
詳細については、「[CloudFront を使用して、Amazon S3 でホストされた静的ウェブサイトを公開するにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/)」と「[ビューワーと CloudFront との通信で HTTPS を必須にする](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)」を参照してください。

1. [**バケット**] で、バケットの名前を選択します。

1. [**プロパティ**] を選択します。

1. ページの下部の [**静的ウェブサイトホスティング**] で、[**Bucket website endpoint (バケットウェブサイトエンドポイント)**] を選択します。

   インデックスドキュメントが別のブラウザウィンドウで開きます。

次のステップでは、顧客が両方のカスタム URL を使用してサイトにアクセスできるように、Amazon Route 53 を使用します。

## ステップ 11: ドメインとサブドメインのエイリアスレコードを追加する
<a name="root-domain-walkthrough-add-record-to-hostedzone"></a>

このステップでは、ドメインマップ `example.com` と `www.example.com` のホストゾーンに追加するエイリアスレコードを作成します。IP アドレスを使用する代わりに、このエイリアスレコードでは Amazon S3 ウェブサイトエンドポイントが使用されます。Amazon Route 53 によって、エイリアスレコードと、Amazon S3 バケットが存在する IP アドレスとのマッピングが維持されます。ルートドメイン用とサブドメイン用の 2 つのエイリアスレコードを作成します。

### ルートドメインとサブドメインのエイリアスレコードの追加
<a name="add-alis-record"></a>

**ルートドメインのエイリアスレコードを追加するには (`example.com`)**

1. Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。
**注記**  
Route 53 をまだ使用していない場合は、*Amazon Route 53 デベロッパーガイド*の「[ステップ 1: ドメインの登録](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html#getting-started-find-domain-name)」を参照してください。セットアップが完了したら、指示を再開できます。

1. [**Hosted zones (ホストゾーン)**] を選択します。

1. ホストゾーンのリストで、ドメイン名に一致するホストゾーンの名前を選択します。

1. [**Create record (レコードを作成)**] を選択します。

1. [**Switch to wizard**] (ウィザードに切り替える) を選択します。
**注記**  
クイック作成を使用してエイリアスレコードを作成する場合は、「[Route 53 を設定して S3 バケットにトラフィックをルーティングする](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/RoutingToS3Bucket.html#routing-to-s3-bucket-configuring)」を参照してください。

1. [**Simple routing (シンプルルーティング)**] を選択して、[**Next (次へ)**] を選択します。

1. [**Define simple record (シンプルなレコードを定義)**] を選択します。

1. [**レコード名**] では、デフォルト値をそのまま使用します。これが、ホストゾーンとドメインの名前です。

1. [**Value/Route traffic to (値/トラフィックのルーティング先)**] で、[**Alias to S3 website endpoint (S3 ウェブサイトエンドポイントへのエイリアス)**] を選択します。

1. リージョンを選択します。

1. S3 バケットを選択します。

   バケット名は、[**Name (名前)**] ボックスに表示されている名前と一致する必要があります。[**Choose S3 bucket**] (S3 バケットを選択) リストに、バケットが作成されたリージョンの Amazon S3 ウェブサイトエンドポイントとともにバケット名が表示されます (例: `s3-website-us-west-1.amazonaws.com (example.com)`)。

   次の場合は、バケットをリストする **S3 バケットを選択**します。
   + バケットを静的ウェブサイトとして設定した場合。
   + バケットの名前が、作成するレコードの名前と同じである場合。
   + 現在の AWS アカウント でバケットを作成した場合。

   バケットが [**Choose S3 bucket**] (S3 バケットの選択) リストに表示されない場合は、バケットが作成されたリージョンの Amazon S3 ウェブサイトエンドポイント (例: **s3-website-us-west-2.amazonaws.com**) を入力します。Amazon S3 ウェブサイトエンドポイントの完全なリストについては、「[Amazon S3 ウェブサイトエンドポイント](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints)」を参照してください。エイリアス先の詳細については、*Amazon Route 53 デベロッパーガイド*の「[値/トラフィックのルーティング先](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html#rrsets-values-alias-alias-target)」を参照してください。

1. **[レコードタイプ]** で、**[A ‐ IPv4 アドレスと一部の AWS リソースにトラフィックをルーティングします]** を選択します。

1. [**Evaluate target health (ターゲットの正常性の評価)**] で [**No (いいえ)**] を選択します。

1. [**Define simple record (シンプルなレコードを定義)**] を選択します。

**サブドメインのエイリアスレコードを追加するには (`www.example.com`)**

1. [**Configure records**] (レコードを設定) で、[**Define simple record**] (シンプルなレコードを定義) を選択します。

1. サブドメインの [**Record name (レコード名)**] に「`www`」と入力します。

1. [**Value/Route traffic to (値/トラフィックのルーティング先)**] で、[**Alias to S3 website endpoint (S3 ウェブサイトエンドポイントへのエイリアス)**] を選択します。

1. リージョンを選択します。

1. S3 バケットを選択します (例: `s3-website-us-west-2.amazonaws.com (www.example.com)`)。

   バケットが [**Choose S3 bucket**] (S3 バケットの選択) リストに表示されない場合は、バケットが作成されたリージョンの Amazon S3 ウェブサイトエンドポイント (例: **s3-website-us-west-2.amazonaws.com**) を入力します。Amazon S3 ウェブサイトエンドポイントの完全なリストについては、「[Amazon S3 ウェブサイトエンドポイント](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints)」を参照してください。エイリアス先の詳細については、*Amazon Route 53 デベロッパーガイド*の「[値/トラフィックのルーティング先](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html#rrsets-values-alias-alias-target)」を参照してください。

1. **[レコードタイプ]** で、**[A ‐ IPv4 アドレスと一部の AWS リソースにトラフィックをルーティングします]** を選択します。

1. [**Evaluate target health (ターゲットの正常性の評価)**] で [**No (いいえ)**] を選択します。

1. [**Define simple record (シンプルなレコードを定義)**] を選択します。

1. [**Configure records**] (レコードを設定) ページで、[**Create records**] (レコードを作成) を選択します。

**注記**  
通常、変更は 60 秒以内にすべての Route 53 サーバーに伝播されます。伝播が完了すると、この手順で作成したエイリアスレコードの名前を使用して、トラフィックを Amazon S3 バケットにルーティングできます。

### ルートドメインとサブドメインのエイリアスレコードの追加 (以前の Route 53 コンソール)
<a name="add-alis-record-old"></a>

**ルートドメインのエイリアスレコードを追加するには (`example.com`)**

Route 53 コンソールは再設計されました。Route 53 コンソールでは、暫定的に以前のコンソールを使用することもできます。以前の Route 53 コンソールを使用する場合は、以下の手順に従ってください。

1. Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。
**注記**  
Route 53 をまだ使用していない場合は、*Amazon Route 53 デベロッパーガイド*の「[ステップ 1: ドメインの登録](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/getting-started.html#getting-started-find-domain-name)」を参照してください。セットアップが完了したら、指示を再開できます。

1. [**ホストゾーン**] を選択します。

1. ホストゾーンのリストで、ドメイン名に一致するホストゾーンの名前を選択します。

1. [**Create Record Set**] (レコードセットの作成) をクリックします。

1. 次の値を指定します。  
**名前**  
ホストゾーンとドメインの名前であるデフォルト値を受け入れます。  
ルートドメインの場合、[**Name (名前)**] フィールドに追加情報を入力する必要はありません。  
**タイプ**  
[**A – IPv4 address (A – IPv4 address)**] を選択します。  
**エイリアス**  
[**Yes**] を選択します。  
**エイリアス先**  
リストの [**S3 website endpoints (S3 ウェブサイトエンドポイント)**] セクションで、バケット名を選択します。  
バケット名は、[**Name (名前)**] ボックスに表示されている名前と一致する必要があります。[**Alias Target (エイリアス先)**] リストでは、バケット名の後にはバケットが作成されたリージョンの Amazon S3 ウェブサイトエンドポイントが続きます (例: `example.com (s3-website-us-west-2.amazonaws.com)`)。以下の場合は、[**Alias Target**] にバケットが表示されます。  
   + バケットを静的ウェブサイトとして設定した場合。
   + バケットの名前が、作成するレコードの名前と同じである場合。
   + 現在の AWS アカウント でバケットを作成した場合。
バケットが [**エイリアス先**] リストに表示されない場合は、バケットが作成されたリージョンの Amazon S3 ウェブサイトエンドポイント (`s3-website-us-west-2` など) を入力します。Amazon S3 ウェブサイトエンドポイントの完全なリストについては、「[Amazon S3 ウェブサイトエンドポイント](https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_website_region_endpoints)」を参照してください。エイリアス先の詳細については、*Amazon Route 53 デベロッパーガイド*の「[値/トラフィックのルーティング先](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html#rrsets-values-alias-alias-target)」を参照してください。  
**ルーティングポリシー**  
デフォルト値の [**Simple**] をそのまま使用します。  
**ターゲットの正常性の評価**  
デフォルト値の [**No**] をそのまま使用します。

1. [**Create**] を選択します。

**サブドメインのエイリアスレコードを追加するには (`www.example.com`)**

1. ルートドメイン (`example.com`) のホストゾーンで、[**Create Record Set (レコードセットの作成)**] を選択します。

1. 次の値を指定します。  
**名前**  
サブドメインの場合、ボックスに `www` と入力します。  
**タイプ**  
[**A – IPv4 address (A – IPv4 address)**] を選択します。  
**エイリアス**  
[**Yes**] を選択します。  
**エイリアス先**  
リストの [**S3 website endpoints (S3 ウェブサイトエンドポイント)**] セクションで、[**Name (名前)**] フィールドに表示される名前と同じバケット名を選択します (例: `www.example.com (s3-website-us-west-2.amazonaws.com)`)。  
**ルーティングポリシー**  
デフォルト値の [**Simple**] をそのまま使用します。  
**ターゲットの正常性の評価**  
デフォルト値の [**No**] をそのまま使用します。

1. [**Create**] を選択します。

**注記**  
通常、変更は 60 秒以内にすべての Route 53 サーバーに伝播されます。伝播が完了すると、この手順で作成したエイリアスレコードの名前を使用して、トラフィックを Amazon S3 バケットにルーティングできます。

## ステップ 12: ウェブサイトをテストする
<a name="root-domain-testing"></a>

ウェブサイトとリダイレクトが正しく機能することを確認します。ブラウザで、URL を入力します。この例では、次の URL を試すことができます。
+ **ドメイン** (`http://example.com`) – `example.com` バケット内のインデックスドキュメントを表示します。
+ **サブドメイン **(`http://www.example.com`) – リクエストを `http://example.com` にリダイレクトします。`example.com` バケット内のインデックスドキュメントが表示されます。

ウェブサイトやリダイレクトのリンクが機能しない場合は、以下のことを試しください。
+ **キャッシュのクリア**– ウェブブラウザのキャッシュをクリアします。
+ **ネームサーバーの確認**– キャッシュをクリアしてもウェブページやリダイレクトのリンクが機能しない場合は、ドメインのネームサーバーとホストゾーンのネームサーバーを比較します。ネームサーバーが一致しない場合は、ドメインのネームサーバーを更新してホストゾーンのネームサーバーと一致させる必要があります。詳細については、「[ドメインのネームサーバーおよびグルーレコードの追加あるいは変更](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-name-servers-glue-records.html)」を参照してください。

ルートドメインとサブドメインのテストが完了したら、[Amazon CloudFront](https://aws.amazon.com/cloudfront) ディストリビューションを設定できます。これにより、ウェブサイトのパフォーマンスを向上させ、ウェブサイトのトラフィックの確認に使用できるログを指定できます。詳細については、「[Amazon CloudFront によるウェブサイトの高速化](website-hosting-cloudfront-walkthrough.md)」を参照してください。

# Amazon CloudFront によるウェブサイトの高速化
<a name="website-hosting-cloudfront-walkthrough"></a>

[Amazon CloudFront](https://aws.amazon.com/cloudfront) を使用すると、Amazon S3 ウェブサイトのパフォーマンスを高めることができます。CloudFront を使用すると、世界中のデータセンター (*エッジロケーション* と呼ばれる) からお客様のウェブサイトのファイル (HTML、画像、動画など) を使用できるようになります。閲覧者がウェブサイトからファイルをリクエストすると、CloudFront は自動的に最も近いエッジロケーションのファイルのコピーにリクエストをリダイレクトします。これにより、遠い場所にあるデータセンターからコンテンツをリクエストした場合よりもダウンロード時間が高速になります。

CloudFront は、指定した期間にわたってコンテンツをエッジロケーションにキャッシュします。閲覧者が有効期限より長くキャッシュされていたコンテンツをリクエストすると、CloudFront はオリジンサーバーをチェックしてより新しいバージョンのコンテンツがあるかどうかを確認します。新しいバージョンが利用可能である場合、CloudFront は新しいバージョンをエッジロケーションにコピーします。元のコンテンツへの変更は、閲覧者がコンテンツをリクエストすると、エッジロケーションにレプリケートされます。

**Route 53 なしで CloudFront を使用する**  
このページのチュートリアルでは Route 53 を使用して CloudFront 配信をポイントしています。ただし、Route 53 を使用せずに CloudFront を使用して Amazon S3 バケットでホストされているコンテンツを配信する場合は、「[Amazon CloudFront チュートリアル: Amazon S3 用の動的コンテンツ配信のセットアップ](https://aws.amazon.com/cloudfront/getting-started/S3/)」を参照してください。CloudFront を使用して Amazon S3 バケットでホストされているコンテンツを配信する場合は、任意のバケット名を使用できます。また、HTTP と HTTPS の両方がサポートされます。

**CloudFormation テンプレートを使用した設定の自動化**  
ウェブサイトへの配信を行う CloudFront ディストリビューションを作成する安全な静的ウェブサイトを、CloudFormation テンプレートを使用して設定する方法の詳細については、*Amazon CloudFront デベロッパーガイド*の「[安全な静的ウェブサイトの開始方法](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/getting-started-secure-static-website-cloudformation-template.html)」を参照してください。

**Topics**
+ [ステップ 1: CloudFront ディストリビューションを作成する](#create-distribution)
+ [ステップ 2: ドメインとサブドメインのレコードセットを更新する](#update-record-sets)
+ [(オプション) ステップ 3: ログファイルを確認する](#check-log-files)

## ステップ 1: CloudFront ディストリビューションを作成する
<a name="create-distribution"></a>

まず、CloudFront ディストリビューションを作成します。これにより、ウェブサイトは世界中のデータセンターから利用できるようになります。

**Amazon S3 オリジンを使用してディストリビューションを作成するには**

1.  で CloudFront コンソールを開きます[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)

1. [**Create Distribution**] を選択します。

1. [**ディストリビューションの作成**] ページで、[**オリジンの設定**] セクションの [**オリジンドメイン名**] に、バケットの Amazon S3 ウェブサイトエンドポイントを入力します (例: **example.com.s3-website.us-west-1.amazonaws.com**)。

   CloudFront により自動的に [**Origin ID (オリジン ID)**] が入力されます。

1. [**Default Cache Behavior Settings (キャッシュ動作のデフォルト設定)**] の値はデフォルトのままにしておきます。

   [**ビューワープロトコルポリシー**] のデフォルト設定では、静的ウェブサイトに HTTPS を使用できます。これらの設定オプションの詳細については、*Amazon CloudFront デベロッパーガイド*の「[ウェブディストリビューションを作成または更新する場合に指定する値](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/WorkingWithDownloadDistributions.html#DownloadDistValuesYouSpecify)」を参照してください。

1. [**Distribution Settings (ディストリビューションの設定)**] で、以下の作業を行います。

   1. [**Price Class (価格クラス)**] は [**Use All Edge Locations (Best Performance) (すべてのエッジロケーションを使用する (最適なパフォーマンス))**] に設定されたままにしておきます。

   1. [**代替ドメイン名 (CNAME)**] をルートドメインと `www` サブドメインに設定します。このチュートリアルでは、`example.com` と `www.example.com` です。
**重要**  
このステップを実行する前に、[代替ドメイン名を使用するための要件](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-requirements)、特に有効な SSL/TLS 証明書の必要性について確認します。

   1. [**SSL 証明書**] で、[**Custom SSL Certificate (example.com) (独自 SSL 証明書 (example.com))**] を選択し、ドメイン名とサブドメイン名を対象とするカスタム証明書を選択します。

      詳細については、*Amazon CloudFront デベロッパーガイド*の「[SSL 証明書](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesSSLCertificate)」を参照してください。

   1. [**Default Root Object (デフォルトのルートオブジェクト)**] に、インデックスドキュメントの名前を入力します (例: `index.html`)。

      ディストリビューションにアクセスするために使用される URL にファイル名が含まれていない場合、CloudFront ディストリビューションはインデックスドキュメントを返します。[**Default Root Object (デフォルトのルートオブジェクト)**] は、静的ウェブサイトのインデックスドキュメントの名前と正確に一致する必要があります。詳細については、「[インデックスドキュメントの設定](IndexDocumentSupport.md)」を参照してください。

   1. [**ログ記録**] を [**On (オン)**] に設定します。
**重要**  
ディストリビューションを作成または更新して CloudFront のログを有効にすると、CloudFront はバケットのアクセスコントロールリスト (ACL) を更新して、バケットにログを書き込む `awslogsdelivery` アクセス許可を `FULL_CONTROL` アカウントに付与します。詳細については、**「Amazon CloudFront デベロッパーガイド」の「[標準ログ記録の設定とログファイルへのアクセスに必要なアクセス許可](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#AccessLogsBucketAndFileOwnership)」を参照してください。ログを保存するバケットが S3 オブジェクト所有権のバケット所有者の強制設定を使用して ACL を無効にすると、CloudFront はバケットにログを書き込むことができません。詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

   1. [**Bucket for Logs (ログ用のバケット)**] で、作成したログ記録バケットを選択します。

      ログ記録バケットの設定の詳細については、「[(オプション) ウェブトラフィックのログ記録](LoggingWebsiteTraffic.md)」を参照してください。

   1. CloudFront ディストリビューションへのトラフィックによって生成されたログをフォルダに保存する場合は、[**Log Prefix (ログのプレフィックス)**] にフォルダ名を入力します。

   1. 他の設定はすべてデフォルト値のままにしておきます。

1. [**Create Distribution**] を選択します。

1. ディストリビューションのステータスを表示するには、コンソールでディストリビューションを見つけて、[**ステータス**] 列を確認します。

   [`InProgress`] のステータスは、ディストリビューションがまだ完全にデプロイされていないことを示します。

   ディストリビューションがデプロイされたら、新しい CloudFront ドメイン名でコンテンツを参照できます。

1. CloudFront コンソールに表示される [**Domain Name (ドメイン名)**] の値を書き留めます (例: `dj4p1rv6mvubz.cloudfront.net`)。

1. CloudFront ディストリビューションが正常に動作していることを確認するには、ウェブブラウザでディストリビューションのドメイン名を入力します。

   ウェブサイトが表示されている場合、CloudFront ディストリビューションは機能します。ウェブサイトに Amazon Route 53 で登録されたカスタムドメインがある場合は、次のステップでレコードセットを更新するために CloudFront ドメイン名が必要になります。

## ステップ 2: ドメインとサブドメインのレコードセットを更新する
<a name="update-record-sets"></a>

CloudFront ディストリビューションが正常に作成されたので、Route 53 でエイリアスレコードを更新して、新しい CloudFront ディストリビューションを指すようにします。

**CloudFront ディストリビューションを指すようにエイリアスレコードを更新するには**

1. Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。

1. 左のナビゲーションで、[**Hosted zones**] (ホストゾーン) を選択します。

1. [**Hosted Zones**] (ホストゾーン) ページで、サブドメイン用に作成したホストゾーンを選択します (例: `www.example.com`)。

1. [**Records**] (レコード) で、サブドメイン用に作成した *A* レコードを選択します。

1. [**Record details**] (レコードの詳細) で、[**Edit record**] (レコードを編集) を選択します。

1. [**Route traffic to**] (トラフィックのルーティング先) で、[**Alias to CloudFront distribution**] (CloudFront ディストリビューションへのエイリアス) を選択します。

1. [**Choose distribution**] (ディストリビューションを選択) で、CloudFront ディストリビューションを選択します。

1. [**Save**] を選択します。

1. ルートドメインの *A* レコードを CloudFront ディストリビューションにリダイレクトするには、ルートドメイン用のこの手順を繰り返します (例: `example.com`)。

   レコードセットの更新は、2～48 時間以内に有効になります。

1. 新しい *A* レコードが有効かどうかを確認するには、ウェブブラウザで、サブドメイン URL を入力します (例: `http://www.example.com`)。

   ブラウザがルートドメイン (例: `http://example.com`) にリダイレクトしなくなった場合、新しい A レコードが有効になっています。新しい *A* レコードが有効になると、新しい *A* レコードによって CloudFront ディストリビューションにルーティングされるトラフィックが、ルートドメインにリダイレクトされなくなります。`http://example.com` または`http://www.example.com` を使用してサイトを参照する閲覧者は、最も近い CloudFront エッジロケーションにリダイレクトされるため、ダウンロード時間が短縮されます。
**ヒント**  
ブラウザはリダイレクト設定をキャッシュできます。新しい *A* レコードの設定が有効になったと考えられるにもかかわらず、ブラウザによって`http://www.example.com` がまだ `http://example.com` にリダイレクトされる場合は、ブラウザアプリケーションを閉じてから再び開いてブラウザの履歴とキャッシュをクリアするか、異なるウェブブラウザを使用してみてください。

## (オプション) ステップ 3: ログファイルを確認する
<a name="check-log-files"></a>

アクセスログにより、ウェブサイトを訪れたユーザーの数がわかります。また、[Amazon EMR](https://docs.aws.amazon.com/emr/latest/DeveloperGuide/) など他のサービスで分析できる貴重なビジネスデータも含まれています。

CloudFront ログは、CloudFront ディストリビューションを作成してログを有効にするときに選択したバケットとフォルダに保存されます。CloudFront は、対応するリクエストが行われると、24 時間以内にログバケットにログを書き込みます。

**ウェブサイトのログファイルを表示するには**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. ウェブサイトのログ記録バケットを選択します。

1. CloudFront ログフォルダを選択します。

1. CloudFront によって書き込まれた `.gzip` ファイルを開く前に、まずファイルをダウンロードします。

   学習のためだけにウェブサイトを作成した場合は、割り当てたリソースを削除して、課金を停止できます。これを行うには、「[サンプルリソースのクリーンアップ](getting-started-cleanup.md)」を参照してください。AWS リソースを削除すると、ウェブサイトは使用できなくなります。

# サンプルリソースのクリーンアップ
<a name="getting-started-cleanup"></a>

学習のために静的ウェブサイトを作成した場合は、割り当てた AWS リソースをここで削除して、課金を停止します。AWS リソースを削除すると、ウェブサイトは使用できなくなります。

**Topics**
+ [ステップ 1: Amazon CloudFront ディストリビューションを削除する](#getting-started-cleanup-cloudfront)
+ [ステップ 2: Route 53 ホストゾーンを削除する](#getting-started-cleanup-route53)
+ [ステップ 3: ログ記録を無効にし、S3 バケットを削除する](#getting-started-cleanup-s3)

## ステップ 1: Amazon CloudFront ディストリビューションを削除する
<a name="getting-started-cleanup-cloudfront"></a>

Amazon CloudFront ディストリビューションを削除する前に、そのディストリビューションを無効にする必要があります。無効になったディストリビューションは機能しなくなり、料金も発生しません。無効にしたディストリビューションはいつでも有効にすることができます。無効にしたディストリビューションを削除すると、使用できなくなります。

**CloudFront ディストリビューションを無効にして削除するには**

1.  で CloudFront コンソールを開きます[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)

1. 無効にするディストリビューションを選択してから [**Disable (無効化)**] を選択します。

1. 確認を求められたら、[**Yes, Disable (はい、無効化する)**] を選択します。

1. 無効にしたディストリビューションを選択してから [**削除**] を選択します。

1. 確認を求めるメッセージが表示されたら、[**Yes, Delete (はい、削除します)**] を選択します。

## ステップ 2: Route 53 ホストゾーンを削除する
<a name="getting-started-cleanup-route53"></a>

ホストゾーンを削除する前に、作成したレコードセットを削除する必要があります。NS レコードと SOA レコードを削除する必要はありません。これらはホストゾーンが削除されるときに自動的に削除されます。

**レコードセットを削除するには**

1. Route 53 コンソール ([https://console.aws.amazon.com/route53/](https://console.aws.amazon.com/route53/)) を開きます。

1.  ドメイン名のリストでドメイン名を選択し、[**Go to Record Sets (レコードセットに移動)**] を選択します。

1. レコードセットのリストで、作成した *A* レコードを選択します。

   各レコードセットのタイプは [**タイプ**] 列に表示されます。

1. [**Delete Record Set (レコードセットの削除)**] を選択します。

1. 確認を求められたら、[**確認**] を選択します。

**Route 53 ホストゾーンを削除するには**

1.  前のステップを終了した画面で [**Back to Hosted Zones (ホストゾーンに戻る)**] を選択します。

1.  ドメイン名を選択してから [**Delete Hosted Zone (ホストゾーンの削除)**] を選択します。

1.  確認を求められたら、[**確認**] を選択します。

## ステップ 3: ログ記録を無効にし、S3 バケットを削除する
<a name="getting-started-cleanup-s3"></a>

S3 バケットを削除する前に、バケットのログ記録が無効であることを確認します。それ以外の場合、削除するバケットへのログの書き込みが AWS によって継続されます。

**バケットのログ記録を無効にするには**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。

1. [**バケット**] でバケット名を選択し、[**プロパティ**] を選択します。

1. [**プロパティ**] から [**ログ記録**] を選択します。

1. [**有効**] チェックボックスをオフにします。

1. [**Save**] を選択します。

これで、バケットを削除できます。詳細については、「[汎用バケットの削除](delete-bucket.md)」を参照してください。

# S3 汎用バケットから AWS Amplify ホスティングへの静的ウェブサイトのデプロイ
<a name="website-hosting-amplify"></a>

[AWS Amplify ホスティング](https://docs.aws.amazon.com//amplify/latest/userguide/welcome.html.html)を使用して、S3 に保存されている静的ウェブサイトのコンテンツをホストすることをお勧めします。Amplify ホスティングは、Amazon CloudFront を利用したグローバルに利用可能なコンテンツ配信ネットワーク (CDN) にウェブサイトを簡単にデプロイできるフルマネージドサービスです。これにより、大規模なセットアップなしで安全な静的ウェブサイトホスティングが可能になります。AWS Amplify ホスティングを使用すると、汎用バケット内のオブジェクトの場所を選択して、コンテンツをマネージド CDN にデプロイし、ウェブサイトのパブリック HTTPS URL を生成してどこからでもアクセス可能にすることができます。Amplify ホスティングを使用して静的ウェブサイトをデプロイすると、以下の利点と機能が得られます。
+ **Amazon CloudFront を利用した AWS コンテンツ配信ネットワーク (CDN) へのデプロイ** - CloudFront は、ユーザーへの静的および動的ウェブコンテンツの配信を高速化するウェブサービスです。CloudFront では、エッジロケーションというデータセンターの世界的ネットワークを経由してコンテンツを配信します。CloudFront で提供しているコンテンツをユーザーがリクエストすると、リクエストはレイテンシー (遅延時間) が最小のエッジロケーションにルーティングされるため、コンテンツの配信が可能な限り最高のパフォーマンスとなり、信頼性と可用性が高まります。詳細については、「[Amazon CloudFront デベロッパーガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowCloudFrontWorks.html)」の「*CloudFront がコンテンツを配信する方法*」を参照してください。
+ **HTTPS サポート** - ウェブサイトとユーザーのウェブブラウザとの間で安全な通信とデータ転送を提供します。
+ **カスタムドメイン** - Amazon Route 53 などのドメインレジストラから購入したカスタム URL にウェブサイトを簡単に接続します。
+ **カスタム SSL 証明書** - カスタムドメインを設定するときに、Amplify が自動でプロビジョニングするデフォルトのマネージド証明書を使用することも、選択したサードパーティの認証機関から購入した独自のカスタム証明書を使用することもできます。
+ **組み込みメトリクスと CloudWatch モニタリング** - ウェブサイトのトラフィック、エラー、データ転送、レイテンシーをモニタリングします。
+ **パスワード保護** - Amplify コンソールでユーザー名とパスワードの要件を設定することで、ウェブサイトへのアクセスを制限します。
+ **リダイレクトと書き換え** - Amplify コンソールでリダイレクトと書き換えのルールを作成し、特定の URL から別の URL へのナビゲーションをウェブサーバーで再ルーティングできるようにします。

Amazon S3 汎用バケットから Amplify ホスティングにアプリケーションをデプロイする場合、AWS 料金は Amplify の料金モデルが基準となります。詳細については、[AWS Amplify の料金](https://aws.amazon.com/amplify/pricing/)を参照してください。

**重要**  
Amplify ホスティングは、Amazon S3 が利用可能なすべての AWS リージョンで利用できるわけではありません。静的ウェブサイトを Amplify ホスティングにデプロイするには、ユーザーのウェブサイトを有する Amazon S3 汎用バケットが Amplify が利用可能なリージョンにある必要があります。Amplify が利用可能なリージョンのリストについては、「*Amazon Web Services 全般のリファレンス*」の「[Amplify endpoints](https://docs.aws.amazon.com/general/latest/gr/amplify.html#amplify_region)」を参照してください。

デプロイプロセスは、Amazon S3 コンソール、Amplify コンソール、AWS CLI、または AWS SDK から開始できます。独自のアカウントにある汎用バケットからのみ Amplify にデプロイできます。Amplify はクロスアカウントバケットアクセスをサポートしていません。

次の手順に従って Amazon S3 コンソールから開始し、Amazon S3 汎用バケットから Amplify ホスティングに静的ウェブサイトをデプロイします。

## S3 コンソールから Amplify への静的ウェブサイトのデプロイ
<a name="DeployAmplify"></a>

**Amazon S3 コンソールから静的ウェブサイトをデプロイするには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **[バケット]** リストで、Amplify ホスティングにデプロイするウェブサイトが含まれている汎用バケットを選択します。

1. **[プロパティ]** タブを選択します。

1. **[静的ウェブサイトホスティング]** で、**[Amplify アプリを作成]** を選択します。このステップで、デプロイプロセスは Amplify コンソールに移動します。

1. **[S3 によるデプロイ]** ページで、次のいずれかのステップを実行します。

   1. **[アプリ名]** に、アプリまたはウェブサイトの名前を入力します。

   1. **[ブランチ名]** に、アプリのバックエンドの名前を入力します。

   1. **[ホストするオブジェクトの S3 の場所]** で、汎用バケットへのディレクトリパスを入力するか、**[S3 を参照]** を選択して検索および選択します。

1. **[保存してデプロイ]** を選択します。

**注記**  
 Amplify でホストされている汎用バケットで静的ウェブサイトのいずれかのオブジェクトを更新した場合は、変更を有効にするためにアプリケーションを Amplify ホスティングに再デプロイする必要があります。Amplify ホスティングは、バケットへの変更を自動的には検出しません。詳細については、「*AWS Amplify Hosting User Guide*」の「[Updating a static website deployed to Amplify from an S3 bucket](https://docs.aws.amazon.com//amplify/latest/userguide/update-website-deployed-from-s3.html)」を参照してください。

Amplify コンソールから直接開始するには、「*AWS Amplify ホスティングユーザーガイド*」の「[Amplify コンソールを使用して S3 から静的ウェブサイトをデプロイする](https://docs.aws.amazon.com//amplify/latest/userguide/deploy--from-amplify-console.html)」を参照してください。

AWS SDK を使用して開始するには、「*AWS Amplify ホスティングユーザーガイド*」の「[AWS SDK を使用して S3 から静的ウェブサイトをデプロイするためのバケットポリシーの作成](https://docs.aws.amazon.com//amplify/latest/userguide/deploy-with-sdks.html)」を参照してください。