デフォルトのルートオブジェクトを指定する - Amazon CloudFront

デフォルトのルートオブジェクトを指定する

ユーザーがディストリビューション内のオブジェクトではなくディストリビューションのルート URL をリクエストした場合に特定のオブジェクト (デフォルトのルートオブジェクト) を返すように CloudFront を設定できます。デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。

デフォルトのルートオブジェクトを指定する方法

ディストリビューションのコンテンツが公開されたり、エラーが返されたりすることを回避するには、以下のステップを実行して、ディストリビューションのデフォルトのルートオブジェクトを指定します。

ディストリビューションのデフォルトルートオブジェクトを指定するには
  1. デフォルトルートオブジェクトを、ディストリビューションが指しているオリジンにアップロードします。

    ファイルには、CloudFront でサポートされるあらゆるタイプを使用できます。ファイル名に対する制約事項のリストについては、「DefaultRootObjectDistributionConfig 」の エレメントの説明を参照してください。

    注記

    デフォルトルートオブジェクトのファイル名が長すぎるか、そのファイル名に無効な文字が含まれている場合、CloudFront はエラー HTTP 400 Bad Request - InvalidDefaultRootObject を返します。また、CloudFront はコードをキャッシュに (デフォルトで) 10 秒間保持し、結果をアクセスログに書き込みます。

  2. オブジェクトのアクセス許可によって CloudFront に少なくとも read アクセスが付与されていることを確認します。

    Amazon S3 のアクセス権限の詳細については、Amazon Simple Storage Service ユーザーガイドの「Amazon S3 での Identity and Access Management」を参照してください。

  3. CloudFront コンソールまたは CloudFront API を使用して、デフォルトルートオブジェクトを参照するようにディストリビューションを更新します。

    CloudFront コンソールを使用して、デフォルトルートオブジェクトを指定するには、次を実行します。

    1. AWS Management Console にサインインし、https://console.aws.amazon.com/cloudfront/v4/home で CloudFront コンソールを開きます。

    2. 上部ペインにあるディストリビューションのリストで、更新するディストリビューションを選択します。

    3. [Settings] (設定) ペインで、[General] (一般) タブの [Edit] (編集) を選択します。

    4. [Edit settings] (設定の編集) ダイアログボックスの [Default root object] (デフォルトルートオブジェクト) フィールドに、デフォルトルートオブジェクトのファイル名を入力します。

      オブジェクト名のみを入力します (例: index.html)。オブジェクト名の前に / を追加しないでください。

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

    CloudFront API を使用して、設定を更新するには、ディストリビューションの DefaultRootObject エレメントの値を指定します。CloudFront API を使用してデフォルトのルートオブジェクトを指定する方法については、Amazon CloudFront API リファレンスの「UpdateDistribution」を参照してください。

  4. ルート URL を要求することで、デフォルトルートオブジェクトが有効になっていることを確認します。ブラウザにデフォルトルートオブジェクトが表示されない場合、以下のステップを実行します。

    1. CloudFront コンソールにディストリビューションのステータスを表示し、ディストリビューションが完全にデプロイされていることを確認します。

    2. ステップ 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 はデフォルトルートオブジェクトを返しません。

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 およびすべてのユーザーのアクセスが拒否された場合にこのエラーを返します。