備忘録のため残します。
ゴール
S3に配置したファイルを、SSL + カスタムドメインでWeb配信する。
構成要素
1. S3(Amazon Simple Storage Service)
ファイルの配置場所。
2. CloudFront(CDN)
- キャッシュを利用してユーザーのページ表示を高速化し、オリジンサーバーの負荷を軽減。
- S3に対してディストリビューションを作成し、ACM(AWS Certificate Manager)を使ったSSL証明書を紐づける。
- CloudFrontのACM証明書を使って、ユーザーとの通信をHTTPSにする。
3. Route 53(DNS管理)
- CloudFrontディストリビューションに対してAレコード(エイリアス)を向ける。
- これにより、ユーザーは独自ドメイン(例:
example.com
)でアクセス可能。 - 既存のドメインがある場合、ACMでSSL証明書を発行し、CNAMEの値をDNS設定に手動で追加(DNS検証)。
方法
【1】S3の静的サイトホスティングを使う方法
このやり方ならCloudFrontじゃなくてもできる。(Cloudflareとか)
S3静的サイトホスティングとは
- S3にアップロードしたHTMLなどのファイルを、そのままWebサイトとして公開できる機能。
- HTTPSは非対応。
- S3がWebサーバーのように振る舞う。
手順
- S3の静的サイトホスティングを有効化
-
CloudFrontのディストリビューションを設定
- オリジンにS3のWebサイト用エンドポイントを指定。
- SSL証明書の選択。
- カスタムドメインの設定。
-
S3のバケットをパブリック化
- バケットポリシーで全体に許可を付与。
注意点
- S3がパブリック状態になり、直接URL(
http://your-bucket.s3-website-ap-northeast-1.amazonaws.com/
)でもアクセス可能。 - CloudFront ⇔ S3間の通信がHTTP。
- セキュリティ面で堅牢性が劣る。
【2】OAC(Origin Access Control)を使い、CloudFront経由のアクセスのみにする方法
CloudFrontを使う所のメリットはここ。
方法の概要
- S3の静的サイトホスティングを使わず、バケットも非公開にする。
- CloudFront + OACを利用してセキュアにアクセス制御。
手順
-
CloudFrontのディストリビューションを設定
- S3の「バケットエンドポイント」を指定。
- OAC(Origin Access Control)を新規作成。
- OACを設定したCloudFrontからのアクセスのみをS3に許可するため、OAC作成時に生成されるバケットポリシーをS3に適用。
-
Default root Object
にindex.html
を指定。
- S3のアクセス許可を更新(CloudFrontのOAC用バケットポリシーを適用)。
注意点
-
S3のバケットエンドポイントを使用する場合の問題点
-
/mypage
にアクセスしてもindex.html
を自動補完しない。 -
/mypage/index.html
のような構成でなければ403 Access Denied
になる。 -
解決策:
-
Lambda@Edge
を使用。 -
CloudFront Functions
でリライト関数を作成し、Viewer Request にアタッチ。
-
-
-
**S3のWebサイト用エンドポイント(http://your-bucket.s3-website-ap-northeast-1.amazonaws.com/)は使用不可**。
- セキュリティとHTTPS対応を重視するなら【2】(OAC + CloudFront)が推奨。
- 手軽に設定したい場合は【1】(S3静的サイトホスティング)も選択肢だが、セキュリティリスクあり。
CloudFrontの設定を適切に行い、OACを活用することで、安全にS3のコンテンツを配信できる環境を構築できる。