デフォルトのルートオブジェクトの指定
ユーザーがディストリビューション内のオブジェクトではなくウェブディストリビューションのルート URL をリクエストした場合に特定のオブジェクト (デフォルトのルートオブジェクト) を返すように CloudFront を構成できます。デフォルトのルートオブジェクトを指定すると、ディストリビューションのコンテンツが公開されなくなります。
デフォルトのルートオブジェクトを指定する方法
ウェブディストリビューションのコンテンツが公開されたり、エラーが返されたりすることを回避するには、以下のステップを実行して、ディストリビューションのデフォルトのルートオブジェクトを指定します。
ディストリビューションのデフォルトルートオブジェクトを指定するには
-
デフォルトルートオブジェクトを、ディストリビューションが指しているオリジンにアップロードします。
ファイルには、CloudFront でサポートされるあらゆるタイプを使用できます。ファイル名に対する制約事項のリストについては、「DistributionConfig 複合型」の
DefaultRootObject
エレメントの説明を参照してください。注記
デフォルトルートオブジェクトのファイル名が長すぎるか、そのファイル名に無効な文字が含まれている場合、CloudFront はエラー
HTTP 400 Bad Request - InvalidDefaultRootObject
を返します。また、CloudFront はコードをキャッシュに 5 分間保持し、結果をアクセスログに書き込みます。 -
オブジェクトのアクセス許可によって CloudFront に少なくとも
read
アクセスが付与されていることを確認します。Amazon S3 アクセス許可の詳細については、Amazon Simple Storage Service 開発者ガイド の「アクセスコントロール」を参照してください。Amazon S3 コンソールを使用してアクセス許可を更新する方法については、Amazon Simple Storage Service コンソールユーザーガイドを参照してください。
-
CloudFront コンソールまたは CloudFront API を使用して、デフォルトルートオブジェクトを参照するようにディストリビューションを更新します。
CloudFront コンソールを使用して、デフォルトルートオブジェクトを指定するには、次を実行します。
-
AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/cloudfront/ にある、CloudFront コンソールを開きます。
-
上部ペインにあるディストリビューションのリストで、更新するディストリビューションを選択します。
-
[Distribution Details] ペインの [General] タブで、[Edit] を選択します。
-
[Edit Distribution] ダイアログボックスの [Default Root Object] フィールドに、デフォルトルートオブジェクトのファイル名を入力します。
オブジェクト名のみを入力します (例:
index.html
)。オブジェクト名の前に/
を追加しないでください。 -
変更を保存するには、[Yes, Edit] を選択します。
CloudFront API を使用して、構成を更新するには、ディストリビューションの
DefaultRootObject
エレメントの値を指定します。CloudFront API を使用してデフォルトルートオブジェクトを指定する方法については、Amazon CloudFront API リファレンス の「PUT Distribution Config」を参照してください。 -
-
ルート URL を要求することで、デフォルトルートオブジェクトが有効になっていることを確認します。ブラウザにデフォルトルートオブジェクトが表示されない場合、以下のステップを実行します。
-
CloudFront コンソールにディストリビューションのステータスを表示し、ディストリビューションが完全にデプロイされていることを確認します。
-
ステップ 2 と 3 を繰り返し、適切なアクセス許可を付与したこと、およびデフォルトルートオブジェクトを指定するようにディストリビューションの構成を適切に更新したことを確認します。
-
ヘッダーとデフォルトのルートオブジェクトの連携方法
デフォルトのルートオブジェクトの動作の例を示します。次のリクエストはオブジェクト 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 での静的ウェブサイトのホスティング」を参照してください。
重要
デフォルトルートオブジェクトは CloudFront ディストリビューションにのみ適用されることに注意してください。オリジンのセキュリティを依然として管理する必要があります。たとえば、Amazon S3 オリジンを使用する場合、Amazon S3 バケットの ACL も依然として適切に設定する必要があり、バケットに対する必要なアクセスレベルを確保する必要があります。
ルートオブジェクトを定義しない場合の CloudFront の動作
デフォルトルートオブジェクトを定義しない場合、ディストリビューションのルートの要求はオリジンサーバーに渡されます。Amazon S3 オリジンを使用する場合、以下のいずれかが返される場合があります。
-
Amazon S3 バケットのコンテンツのリスト— 以下のいずれかの条件が満たされる場合、CloudFront を使用してディストリビューションにアクセスするユーザーにオリジンのコンテンツが表示されます。
-
バケットが適切に構成されていない。
-
ディストリビューションに関連付けられているバケット、およびバケット内のオブジェクトに対する Amazon S3 アクセス許可で、すべてのユーザーにアクセスが付与されている。
-
エンドユーザーがオリジンのルート URL を使用してオリジンにアクセスしている。
-
-
オリジンのプライベートコンテンツのリスト— オリジンをプライベートディストリビューション (構成者と CloudFront のみがアクセス可能) として構成している場合、ディストリビューションに関連付けられた Amazon S3 バケットのコンテンツは、CloudFront 経由でディストリビューションにアクセスできる認証情報を持っているユーザーにも表示されます。この場合、ユーザーは、オリジンのルート URL を使用してコンテンツにアクセスできません。プライベートコンテンツの配信の詳細については、「署名付き URL と署名付き Cookie を使用してプライベートコンテンツを供給する」を参照してください。
-
エラー 403 アクセス不可—CloudFront は、ディストリビューションに関連付けられた Amazon S3 バケットに対する許可またはそのバケット内のオブジェクトに対するアクセス許可によって CloudFront およびすべてのユーザーのアクセスが拒否された場合にこのエラーを返します。