2016年1月から、AWSで無料のSSL証明書が発行できるようになりました。企業のコーポレートサイト等の静的サイトでも、SSL化するのが一般的になりつつありましたが、無料でSSL証明書が取得できるようになったことで、SSL化しない理由がなくなりました。やっておくと、少し詳しい人にも、それっぽく見えますし(笑)
やりたいこと
AWSのS3上にコーポレートサイトを作っておいて、Certificate ManagerでSSL証明書を発行して公開するっていうのが、ほとんど無料に近い金額でできるようになります。じゃあ、やっておこう。ひと昔前では考えられなかったようなリッチな構成が、ほとんど無料!すごい時代になったもんだ。
で、以下がやりたいことです。4つ目は、SEO対策的なアレです。
- S3上にコーポレートサイト(静的サイト)を作る
- 独自ドメイン(ここでは、
example.com
とします)で公開する - さらにSSL化する
- SE0対策のため、各種リダイレクト設定をする
http://www.example.com
をhttps://example.com
にリダイレクトさせるhttps://www.example.com
をhttps://example.com
にリダイレクトさせるhttps://example.com
をhttps://example.com
にリダイレクトさせる
CloudFrontとRoute53を駆使するのですが、ちゃんと理解していないと意外とはまるので、以下で解説しておきます。誰かの役に立つと嬉しいです。
手順
独自ドメインでサイトを公開する
以下に詳細な手順が公開されているので、基本的にはこの通りにやれば大丈夫です。途中、HTTPSは対応していないと記載がありますが、ここは無視してください。後で他の方法を使ってできるようにします。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html
公開したサイトをSSL化する
基本設定を行う
まずは、Certificate ManagerでSSL証明書を発行し、それをCloudFrontを使って紐付けします。そのあと、Route53でバケットを見ていたものを、CloudFrontを見るように変えます。ここまでの手順については、クラスメソッドさんの記事がわかりやすいので、この手順でやってみます。
http://dev.classmethod.jp/cloud/aws/acm-cloudfront-ssl/
CloudFrontを設定する際の注意
基本的には、ここに記載されている手順でできるのですが、以下の構成になるように2つのディストリビューションを作成します。なお、CloudFrontに指定するOrigin Domain Nameは、対応するS3 Bucketのエンドポイント(example.com.s3-website-ap-northeast-1.amazonaws.com
みたいなやつ)を指定するように注意してください。
SSL証明書 | 紐付けるCloudFront | Origin Domain Name |
---|---|---|
example.comのSSL証明書 | example.com のCloudFrontディストリビューション |
example.com の方のS3のエンドポイント |
www.example.comのSSL証明書 | www.example.com のCloudFrontディストリビューション |
www.example.com の方のS3のエンドポイント |
Route53を設定する際の注意
クラスメソッドさんのページにも記載されていますが、Route53のレコードセットが以下の内容になるように調整します。
Name | Type | Arias Target |
---|---|---|
空(つまり、example.com) | A | 上で作ったexample.com のCloudFrontディストリビューションを選択 |
www(つまり、www.example.com) | A | 上で作ったwww.example.com のCloudFrontディストリビューションを選択 |
動作確認
ここまでの設定で、以下の動作をするようになっていると思います。そうならない場合は、もう一度、S3、Route53、CloudFrontの設定を見直してみてください。
http://example.com
にアクセスすると、リダイレクトされずにそのページが表示される。https://example.com
にアクセスすると、リダイレクトされずにそのページが表示される。http://www.example.com
にアクセスすると、http://example.com
にリダイレクトされる。https://www.example.com
にアクセスすると、https://example.com
にリダイレクトされる。
メインのURLにリダイレクトさせる
CloudFrontの設定を変更する
ここまでくればあと少し。CloudFrontディストリビューションの設定を変えて、HTTPでアクセスされた時に、HTTPSにリダイレクトするように修正します。注意すべきは、example.com
が使っているCloudFrontディストリビューションのみ設定を変えるようにすること。www.example.com
はそのままHTTPもHTTPSも使えるようにしておいてください。
example.com
のCloudFrontディストリビューションを開く- Behaviorsのタブを選択する
- 該当のものにチェックを入れて、Editする
- Viewer Protocol PolicyをRedirect HTTP to HTTPSにして保存する
動作確認
これで、以下の動作をするようになります。
http://example.com
にアクセスすると、example.com
の方のCloudFront側でHTTPSにリダイレクトされ、https://example.com
に飛ばされる。https://example.com
にアクセスすると、S3のバケットの内容が表示される。http://www.example.com
にアクセスすると、CloudFront側でwww.example.com
の方のS3のバケットに行き、S3側のリダイレクト設定によりhttp://example.com
に飛ばされ、example.com
の方のCloudFront側でHTTPSの方に飛ばされる。https://www.example.com
にアクセスすると、CloudFront側でwww.example.com
の方のS3のバケットに行き、S3側のリダイレクト設定によりhttps://example.com
に飛ばされる。
注意としては、CloudFrontはCDNなので、設定が反映されるまでに時間がかかることがあります。その場合は、全てのキャッシュをクリアするなり、時間を置いてから確認するなどする必要があります。
これで全てのアクセスがhttps://example.com
に集約されるようになりました。
おわりに
とまあ、一度理解してしまえば、どうということはないのですが、ちゃんと理解していないと、相互の関係性が複雑なのでハマってしまいます。
誰の役に立つのかわからない内容になってしまいましたが、これで低コストでセキュアなコーポレートサイトが作れるようになります。個人のサイトでも使っても良いかもですね。