メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

デフォルトルートオブジェクトの指定(ウェブディストリビューションのみ)

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

たとえば、次のリクエストはオブジェクト image.jpg を指します。

http://d111111abcdef8.cloudfront.net/image.jpg

次のリクエストは、特定のオブジェクトではなく、同じディストリビューションのルート URL を指します。

http://d111111abcdef8.cloudfront.net/

デフォルトルートオブジェクトを定義した場合、ディストリビューションのルートを呼び出すエンドユーザーリクエストはデフォルトルートオブジェクトを返します。たとえば、ファイル index.html をデフォルトルートオブジェクトとして指定したと仮定します。

http://d111111abcdef8.cloudfront.net/

上のリクエストは次のオブジェクトを返します。

http://d111111abcdef8.cloudfront.net/index.html

ただし、デフォルトルートオブジェクトを定義しても、ディストリビューションのサブディレクトリに対するエンドユーザーリクエストはデフォルトルートオブジェクトを返しません。たとえば、index.html がデフォルトルートオブジェクトであり、CloudFront が CloudFront ディストリビューション下の install ディレクトリに対するエンドユーザーリクエストを受け取ったと仮定します。

http://d111111abcdef8.cloudfront.net/install/

index.html のコピーが install ディレクトリ内にあっても、CloudFront はデフォルトルートオブジェクトを返しません。

CloudFront がサポートするすべての HTTP メソッドを許可するようにディストリビューションを構成する場合、デフォルトのルートオブジェクトがすべてのメソッドに適用されます。たとえば、デフォルトのルートオブジェクトが index.php であり、POST リクエストをドメインのルート(http://example.com)に送信するようにアプリケーションを作成するなら、CloudFront はリクエストを http://example.com/index.php に送信します。

CloudFront のデフォルトルートオブジェクトの動作は、Amazon S3 のインデックスドキュメントの動作とは異なります。Amazon S3 バケットをウェブサイトとして構成し、インデックスドキュメントを指定した場合、ユーザーがバケット内のサブディレクトリを要求しても、Amazon S3 はインデックスドキュメントを返します。(インデックスドキュメントのコピーがすべてのサブディレクトリに含まれる必要があります)。Amazon S3 バケットをウェブサイトとして構成する方法およびインデックスドキュメントの詳細については、「Amazon Simple Storage Service 開発者ガイド」の「Amazon S3 での静的ウェブサイトのホスティング」を参照してください。

Important

デフォルトルートオブジェクトは CloudFront ディストリビューションにのみ適用されることに注意してください。オリジンのセキュリティを依然として管理する必要があります。たとえば、Amazon S3 オリジンを使用する場合、Amazon S3 バケットの ACL も依然として適切に設定する必要があり、バケットに対する必要なアクセスレベルを確保する必要があります。

デフォルトルートオブジェクトを定義しない場合、ディストリビューションのルートの要求はオリジンサーバーに渡されます。Amazon S3 オリジンを使用する場合、以下のいずれかが返される場合があります。

  • Amazon S3 バケットのコンテンツのリスト – 以下のいずれかの条件が満たされる場合、CloudFront を使用してディストリビューションにアクセスするユーザーにオリジンのコンテンツが表示されます。

    • バケットが適切に構成されていない。

    • ディストリビューションに関連付けられているバケット、およびバケット内のオブジェクトに対する Amazon S3 アクセス許可で、すべてのユーザーにアクセスが付与されている。

    • エンドユーザーがオリジンのルート URL を使用してオリジンにアクセスしている。

  • オリジンのプライベートコンテンツのリスト – オリジンをプライベートディストリビューション(構成者と CloudFront のみがアクセス可能)として構成している場合、ディストリビューションに関連付けられた Amazon S3 バケットのコンテンツは、CloudFront 経由でディストリビューションにアクセスできる認証情報を持っているユーザーにも表示されます。この場合、ユーザーは、オリジンのルート URL を使用してコンテンツにアクセスできません。プライベートコンテンツの配信の詳細については、「CloudFront を使用してプライベートコンテンツを供給する」を参照してください。

  • エラー 403 アクセス不可 – CloudFront は、ディストリビューションに関連付けられた Amazon S3 バケットに対する許可またはそのバケット内のオブジェクトに対する許可によって CloudFront およびすべてのユーザーのアクセスが拒否された場合にこのエラーを返します。

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

ディストリビューションのデフォルトルートオブジェクトを指定するには

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

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

    Note

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

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

    Amazon S3 許可の詳細については、「Amazon Simple Storage Service 開発者ガイド」の「アクセスコントロール」を参照してください。Amazon S3 コンソールを使用して許可を更新する方法については、「Amazon Simple Storage Service Console User Guide」を参照してください。

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

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

    1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/cloudfront/ にある、CloudFront コンソールを開きます。

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

    3. [Distribution Details] ペインの [General] タブで、[Edit] をクリックします。

    4. [Edit Distribution] ダイアログボックスの [Default Root Object] フィールドに、デフォルトルートオブジェクトのファイル名を入力します。

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

    5. 変更を保存するには、[Yes, Edit] をクリックします。

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

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

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

    2. ステップ 2 と 3 を繰り返し、適切な許可を付与したこと、およびデフォルトルートオブジェクトを指定するようにディストリビューションの構成を適切に更新したことを確認します。