ユーザー (ビューワー) がディストリビューション内のオブジェクトではなくディストリビューションのルート URL をリクエストした場合に、特定のオブジェクト (デフォルトルートオブジェクト) を返すように CloudFront を設定できます。デフォルトルートオブジェクトを使用して、ディストリビューションのコンテンツの公開を回避できます。
デフォルトルートオブジェクトを指定する方法
ディストリビューションのコンテンツが公開されたり、エラーが返されたりすることを回避するには、ディストリビューションのデフォルトルートオブジェクトを指定します。正確なファイル名またはファイルへのパスを指定できます。例えば、ルートオブジェクトが index.html
ファイルの場合、そのファイル名を指定できます。index.html
ファイルが別のフォルダにある場合は、代わりに
などのパスを指定します。デフォルトルートオブジェクトへのパスを設定すると、ディストリビューションのルート URL へのビューワーリクエストはそのパスから指定したファイルを返します。ファイルパスを使用すると、デフォルトルートオブジェクトをルートレベルではなくフォルダに配置できるため、オリジンでコンテンツをより柔軟に整理できます。exampleFolderName
/index.html
ディストリビューションのデフォルトルートオブジェクトを指定するには
-
デフォルトルートオブジェクトを、ディストリビューションが指しているオリジンにアップロードします。
ファイルには、CloudFront でサポートされるあらゆるタイプを使用できます。ファイル名に対する制約事項のリストについては、「Amazon CloudFront API Reference」の「DistributionConfig」で
DefaultRootObject
エレメントを参照してください。注記
デフォルトルートオブジェクトのファイル名が長すぎるか、そのファイル名に無効な文字が含まれている場合、CloudFront はエラー
HTTP 400 Bad Request - InvalidDefaultRootObject
を返します。また、CloudFront はコードをキャッシュに (デフォルトで) 10 秒間保持し、結果をアクセスログに書き込みます。 -
オブジェクトのアクセス許可によって CloudFront に少なくとも読み取りアクセス権が付与されていることを確認します。
Amazon S3 のアクセス権限の詳細については、Amazon Simple Storage Service ユーザーガイドの「Amazon S3 での Identity and Access Management」を参照してください。
-
CloudFront コンソールまたは CloudFront API を使用して、デフォルトルートオブジェクトを参照するようにディストリビューションを更新します。
CloudFront コンソールを使用してデフォルトルートオブジェクトを指定するには:
AWS Management Console にサインインし、https://console.aws.amazon.com/cloudfront/v4/home
で CloudFront コンソールを開きます。 -
上部ペインにあるディストリビューションのリストで、更新するディストリビューションを選択します。
-
[Settings] (設定) ペインで、[General] (一般) タブの [Edit] (編集) を選択します。
-
[設定を編集] ダイアログボックスの [デフォルトルートオブジェクト] フィールドに、デフォルトルートオブジェクトのファイル名またはパスを入力します。
ヒント
文字列をスラッシュ (
/
) で始めることはできません。オブジェクト名またはオブジェクトへのパスのみを指定します。例えば、index.html
または
を使用します。exampleFolderName
/index.html/
またはexampleFolderName
/index.html/index.html
を指定すると、403 アクセス拒否エラーが発生する可能性があります。 -
[Save changes] (変更の保存) をクリックします。
CloudFront API を使用して設定を更新するには、ディストリビューションの
DefaultRootObject
エレメントの値を指定します。CloudFront API を使用してデフォルトのルートオブジェクトを指定する方法については、Amazon CloudFront API リファレンスの「UpdateDistribution」を参照してください。 -
ルート URL を要求することで、デフォルトルートオブジェクトが有効になっていることを確認します。ブラウザにデフォルトルートオブジェクトが表示されない場合、以下のステップを実行します。
-
CloudFront コンソールにディストリビューションのステータスを表示し、ディストリビューションが完全にデプロイされていることを確認します。
-
ステップ 2 と 3 を繰り返し、適切な許可を付与したこと、およびデフォルトルートオブジェクトを指定するようにディストリビューションの構成を適切に更新したことを確認します。
-
デフォルトのルートオブジェクトの仕組み
次のリクエストはオブジェクト image.jpg
を指すとします。
https://d111111abcdef8.cloudfront.net/image.jpg
これに対して、最初の例のように、次のリクエストは特定のオブジェクトではなく、同じディストリビューションのルート URL を指します。
https://d111111abcdef8.cloudfront.net/
デフォルトルートオブジェクトを定義した場合、ディストリビューションのルートを呼び出すエンドユーザーリクエストはデフォルトルートオブジェクトを返します。たとえば、ファイル index.html
をデフォルトルートオブジェクトとして指定したと仮定します。
https://d111111abcdef8.cloudfront.net/
戻り値:
https://d111111abcdef8.cloudfront.net/index.html
注記
CloudFront は、末尾に複数のスラッシュ (https://d111111abcdef8.cloudfront.net///
) が付いている URL が https://d111111abcdef8.cloudfront.net/
と等しいかどうかを判断しません。オリジンサーバーがその比較を行います。
デフォルトルートオブジェクトを定義しても、ディストリビューションのサブディレクトリに対するエンドユーザーリクエストはデフォルトルートオブジェクトを返しません。例えば、index.html
がデフォルトルートオブジェクトであり、CloudFront が CloudFront ディストリビューション下の install
ディレクトリに対するエンドユーザーリクエストを受け取ったと仮定します。
https://d111111abcdef8.cloudfront.net/install/
index.html
のコピーが install
ディレクトリ内にあっても、CloudFront はデフォルトルートオブジェクトを返しません。ただし、デフォルトルートオブジェクトへのパス (install/index.html
) を指定すると、CloudFront は install
ディレクトリへのエンドユーザーリクエストにデフォルトルートオブジェクトを返します。
CloudFront がサポートするすべての HTTP メソッドを許可するようにディストリビューションを設定する場合、デフォルトのルートオブジェクトがすべてのメソッドに適用されます。例えば、デフォルトのルートオブジェクトが index.php であり、POST
リクエストをドメインのルート (https://example.com) に送信するようにアプリケーションを作成するなら、CloudFront はリクエストを https://example.com/index.php に送信します。
CloudFront のデフォルトルートオブジェクトの動作は、Amazon S3 のインデックスドキュメントの動作とは異なります。Amazon S3 バケットをウェブサイトとして設定し、インデックスドキュメントを指定した場合、ユーザーがバケット内のサブディレクトリを要求しても、Amazon S3 はインデックスドキュメントを返します。(インデックスドキュメントのコピーがすべてのサブディレクトリに含まれる必要があります)。Amazon S3 バケットをウェブサイトとして設定する方法とインデックスドキュメントの詳細については、Amazon Simple Storage Service ユーザーガイドの「Amazon S3 でのウェブサイトのホスティング」を参照してください。
重要
デフォルトルートオブジェクトは CloudFront ディストリビューションにのみ適用されることに注意してください。オリジンのセキュリティを依然として管理する必要があります。例えば、Amazon S3 オリジンを使用する場合、Amazon S3 バケットの ACL も依然として適切に設定する必要があり、バケットに対する必要なアクセスレベルを確保する必要があります。
ルートオブジェクトを定義しない場合の CloudFront の動作
デフォルトルートオブジェクトを定義しない場合、ディストリビューションのルートの要求はオリジンサーバーに渡されます。Amazon S3 オリジンを使用する場合、以下のいずれかが返される場合があります。
-
Amazon S3 バケットのコンテンツのリスト – 以下のいずれかの条件が満たされる場合、CloudFront を使用してディストリビューションにアクセスするユーザーにオリジンのコンテンツが表示されます。
-
バケットが適切に構成されていない。
-
ディストリビューションに関連付けられているバケット、およびバケット内のオブジェクトに対する Amazon S3 アクセス許可で、すべてのユーザーにアクセスが付与されている。
-
エンドユーザーがオリジンのルート URL を使用してオリジンにアクセスしている。
-
-
オリジンのプライベートコンテンツのリスト – オリジンをプライベートディストリビューション (設定者と CloudFront のみがアクセス可能) として設定している場合、ディストリビューションに関連付けられた Amazon S3 バケットのコンテンツは、CloudFront 経由でディストリビューションにアクセスできる認証情報を持っているユーザーにも表示されます。この場合、ユーザーは、オリジンのルート URL を使用してコンテンツにアクセスできません。プライベートコンテンツの配信の詳細については、「署名付き URL と署名付き Cookie を使用したプライベートコンテンツを提供する」を参照してください。
-
Error 403 Forbidden
– CloudFront は、ディストリビューションに関連付けられた Amazon S3 バケットに対する許可またはそのバケット内のオブジェクトに対する許可によって CloudFront およびすべてのユーザーのアクセスが拒否された場合にこのエラーを返します。