Cloudfrontで静的にホストされているウェブサイトのサブディレクトリにデフォルトのルートオブジェクトをどのように設定しますか?具体的にはwww.example.com/subdir/index.html
、ユーザーがを要求するたびにサービスを提供したいと考えていますwww.example.com/subdir
。これは、S3バケットに保持されている静的なWebサイトを配信するためのものであることに注意してください。さらに、S3バケットへのアクセスをCloudfrontのみに制限するために、オリジンアクセスIDを使用したいと思います。
現在、Cloudfrontの動作はS3およびAmazonの状態とは異なっていることを認識しています:
CloudFrontデフォルトルートオブジェクトの動作は、Amazon S3インデックスドキュメントの動作とは異なります。Amazon S3バケットをウェブサイトとして設定し、インデックスドキュメントを指定すると、ユーザーがバケット内のサブディレクトリをリクエストした場合でも、Amazon S3はインデックスドキュメントを返します。(インデックスドキュメントのコピーは、すべてのサブディレクトリに表示される必要があります。)Amazon S3バケットをウェブサイトとして設定する方法とインデックスドキュメントの詳細については、Amazon Simple Storage Service開発者ガイドの「Amazon S3でのウェブサイトのホスティング」の章を参照してください。
そのため、Cloudfrontではデフォルトのルートオブジェクトを指定できますが、これはに対してのみ機能しwww.example.com
、に対しては機能しませんwww.example.com/subdir
。この問題を回避するために、S3によって提供されたWebサイトのエンドポイントを指すようにオリジンドメイン名を変更できます。これはうまく機能し、ルートオブジェクトを均一に指定できます。残念ながら、これはオリジンアクセスIDと互換性がないようです。具体的には、上記のリンクは次のように述べています。
編集モードに変更します。
Webディストリビューション– [Origins]タブをクリックし、編集するオリジンをクリックして、[Edit]をクリックします。オリジンタイプがS3オリジンであるオリジンに対してのみ、オリジンアクセスIDを作成できます。
基本的に、正しいデフォルトルートオブジェクトを設定するために、ウェブサイトバケット自体ではなく、S3ウェブサイトエンドポイントを使用します。これは、発信元アクセスIDの使用と互換性がありません。したがって、私の質問はどちらかに要約されます
Cloudfrontで静的にホストされているウェブサイトのすべてのサブディレクトリにデフォルトのルートオブジェクトを指定することは可能ですか?
オリジンがS3バケットではなくS3ウェブサイトエンドポイントであるCloudfrontから提供されるコンテンツのオリジンアクセスIDをセットアップすることは可能ですか?