はじめに
今回は、S3の機能の一つである静的ウェブサイトホスティングについてまとめてみました。
特に、静的ウェブサイトホスティング機能でユーザはS3バケットに対してどのようにアクセスしているのかといった点に着目しました。
VPC内のサービスとインターネットはインターネットゲートウェイによって通信が可能になります。しかし、S3はVPC外に構成されるサービスのため、インターネットゲートウェイは使用できません。そのため、S3とインターネットの通信を可能にするためにはインターネットゲートウェイのような役割を担うサービスがあるのではないかと考え、このテーマに着目しました。
S3の静的ウェブサイトホスティング機能とは
・ 概要
S3の静的ウェブサイトホスティング機能とは、S3を使用することによって静的ウェブサイトをホストできる機能のことです。
S3バケットで静的ウェブサイトホスティングを有効にすることによって、そのバケットにアップロードされたファイル(HTMLファイルなど)にユーザがブラウザ等からアクセスすることができます。
静的ウェブサイトホスティングを有効にすることによって、バケットのあるリージョン固有のウェブサイトエンドポイントを利用することができます。
| リージョン名 | リージョン | エンドポイント | プロトコル |
|---|---|---|---|
| バージニア北部 | us-east-1 | s3-website.us-east-1.amazonaws.com | HTTP |
| 東京 | ap-northeast-1 | s3-website-ap-northeast-1.amazonaws.com | HTTP |
・ ウェブサイトエンドポイント
ウェブサイトエンドポイントはウェブブラウザを介してアクセスするように最適化されており、REST APIエンドポイントとは以下の点で異なります。
| 主な違い | REST APIエンドポイント | ウェブサイトエンドポイント |
|---|---|---|
| アクセスコントロール | パブリックコンテンツとプライベートコンテンツの両方をサポートする | 公開で読み取り可能なコンテンツのみをサポートする |
| エラーメッセージの処理 | XML形式のエラーレスポンスを返す | HTMLドキュメントを返す |
| リダイレクトのサポート | なし | オブジェクトレベルとバケットレベルの両方のリダイレクトが可能 |
| サポートされるリクエスト | バケット及びオブジェクトのすべてのオペレーションをサポート | オブジェクトに対するGET及びHEADリクエストのみをサポート |
| バケットのルートでのGET及びHEADリクエストに対する応答 | バケット内のオブジェクトキーのリストを返す | ウェブサイト設定で指定されているインデックスドキュメントを返す |
| Secure Sockets Layer(SSL)のサポート | SSL接続をサポート | SSL接続をサポートしない |
また、使用しているリージョンによってウェブサイトエンドポイントの形式は異なり、以下2つの形式のいずれかになります。
・http://[バケット名].s3-website-[リージョン].amazonaws.com
・http://[バケット名].s3-website.[リージョン].amazonaws.com
S3のバケット名はグローバルで一意になる必要があるため、静的ウェブサイトホスティング機能で有効になるウェブサイトエンドポイントも重複することがありません。
・ インデックスドキュメントについて
静的ウェブサイトホスティング機能を使用するために必要な設定として、インデックスドキュメントの設定およびアップロードがあります。インデックスドキュメントとは、リクエストが行われたときにS3によって返されるWEBページのことです。静的ウェブサイトホスティングを有効にする場合は、インデックスドキュメントの名前(index.htmlなど)を指定し、そのファイルをバケットにアップロードする必要があります。その結果、上記URLにアクセスされるとインデックスドキュメントが返されるようになります。
ユーザとS3の通信経路について
・ 通信経路
ここからが本題の静的ウェブサイトホスティングを有効にすることによって確立される、S3とインターネットの通信経路についてです。
結論、ユーザがブラウザ等でウェブサイトエンドポイントにアクセスすることで、指定されたリージョンのウェブサイトエンドポイントにアクセスされ、そこから指定されたバケットにアクセスし、バケット内にあるインデックスドキュメントがユーザに返されるという通信経路になります。
このアクセス経路を確保するためには、対象のバケットが静的ウェブサイトホスティングを有効化していること、バケットにインデックスドキュメントが設定され、そのファイルがアップロードされていること、そしてパブリックアクセスブロック設定を無効にし、パブリック読み取りアクセスを許可するバケットポリシーを設定する必要があります。
・ 注意点
ウェブサイトエンドポイントはHTTPSをサポートしていません。そのため、HTTPSを使用したい場合はほかの方法で実施する必要があります。
・AWS Amplify Hostingを使用することで、S3バケットから静的ウェブサイトをデプロイする
・CloudFrontを使用して、S3バケットに対するHTTPSリクエストを処理する
これらの方法を使用してS3バケットを公開することによってセキュアな通信が可能になります。
まとめ
以上、S3の機能の1つである静的ウェブサイトホスティングについてまとめてみました。ウェブサイトエンドポイントによってユーザとS3バケットの通信が可能になっていることがわかりました。
静的ウェブサイトホスティング機能のアクセス経路について皆様の理解の助けになれば幸いです。
お読みいただき、ありがとうございました。
