S3 + CloudFront を HTTPS 対応リダイレクトサーバとして活用する
AWS S3 のウェブサイトホスティング機能にはリダイレクト機能があります。
S3 単体では HTTP のリクエストが捌けますが、CloudFront を組み合わせることで HTTPS にも対応できます。EC2 や Lambda を用意する必要もありません。
今回は、例として https://hoge.yuu26.com へのアクセスを https://blog.yuu26.com にリダイレクトさせてみます。
S3 バケットのリダイレクト機能を有効化
S3 コンソール から新規バケットを作成します。
ドメイン名に合わせて hoge.yuu26.com
で作成しました。
好きなリージョンを選んだだけで残りはすべてデフォルト設定です。
バケットのプロパティから Static website hosting
の設定を有効化します。
リダイレクト先のドメイン名とプロトコル欄を埋めます。
画面に記載されているエンドポイント xxxxx.s3-website-xxx.amazonaws.com
をメモします。
curl で呼び出してみるとリダイレクトされることが確認できます。
$ curl -I http://hoge.yuu26.com.s3-website-ap-northeast-1.amazonaws.com
HTTP/1.1 301 Moved Permanently
Location: https://blog.yuu26.com/
Server: AmazonS3
ACM で CloudFront 用の証明書を取得
S3 のウェブサイトホスティングでは、独自ドメインの HTTPS リクエストを受け付けられません。
そのため、一度 CloudFront を経由することで対応します。
ACM (Amazon Certificate Manager) から証明書を発行しておきます。無料です。
注意点として、CloudFront で利用する証明書は バージニア北部リージョン (us-east-1) で取得する必要があります。東京リージョンで取得しても使えません。
CloudFront を組み合わせて HTTPS 対応
CloudFront の Distribution (Web) を新規作成します。
Origin Domain Name
: S3 のウェブサイトホスティング用エンドポイントViewer Protocol Policy
: HTTP and HTTPSAlternate Domain Names (CNAMEs)
: ドメイン名 (hoge.yuu26.com)SSL Certificate
:Custom SSL Certificate
から ACM で作成した証明書を選択
オリジンには S3 のウェブサイト用エンドポイントを入力します。
予測で出てくる S3 のバケット名ではないため注意が必要です。
設定が有効になれば準備完了です。数分~長いときは数時間ほどかかります。
curl でも確認しておきます。
$ curl -I http://dyzmyxzffsq8f.cloudfront.net
HTTP/1.1 301 Moved Permanently
Location: https://blog.yuu26.com/
Server: AmazonS3
X-Cache: Miss from cloudfront
$ curl -I https://dyzmyxzffsq8f.cloudfront.net
HTTP/2 301
location: https://blog.yuu26.com/
server: AmazonS3
x-cache: Hit from cloudfront
Route 53 で ALIAS レコードを設定
CloudFront 経由でリダイレクトされることを確認したら、Route 53 に登録します。
今回は hoge.yuu26.com
→ dyzmyxzffsq8f.cloudfront.net
となるように設定します。
CNAME でも良いのですが、向き先が AWS 内部なので ALIAS レコードが適しています。
独自ドメインで、HTTP および HTTPS のリダイレクトができるようになりました。
$ curl -I http://hoge.yuu26.com
HTTP/1.1 301 Moved Permanently
Location: https://blog.yuu26.com/
Server: AmazonS3
X-Cache: Hit from cloudfront
$ curl -I https://hoge.yuu26.com
HTTP/2 301
location: https://blog.yuu26.com/
server: AmazonS3
x-cache: Hit from cloudfront
まとめ
- S3 と CloudFront を組み合わせて HTTPS 対応のリダイレクトサーバにしました
- EC2 や Web サーバを用意することなくサーバレスで実現できます
- CloudFront 用の証明書は us-east-1 の ACM で発行しましょう
規模にもよりますが、リダイレクトのみであれば S3 や CloudFront の費用も無視できるレベルかと思います。機会があればぜひご活用ください。
【追記】Application Load Balancer (ALB) でも同様の処理が可能となりました。
ディスカッション
コメント一覧
まだ、コメントがありません
フォローする
カテゴリー
最近の投稿
ブログについて