2016年1月から、AWSで無料のSSL証明書が発行できるようになりました。企業のコーポレートサイト等の静的サイトでも、SSL化するのが一般的になりつつありましたが、無料でSSL証明書が取得できるようになったことで、SSL化しない理由がなくなりました。やっておくと、少し詳しい人にも、それっぽく見えますし(笑)

やりたいこと

AWSのS3上にコーポレートサイトを作っておいて、Certificate ManagerでSSL証明書を発行して公開するっていうのが、ほとんど無料に近い金額でできるようになります。じゃあ、やっておこう。ひと昔前では考えられなかったようなリッチな構成が、ほとんど無料!すごい時代になったもんだ。

で、以下がやりたいことです。4つ目は、SEO対策的なアレです。

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の設定を見直してみてください。

メインのURLにリダイレクトさせる

CloudFrontの設定を変更する

ここまでくればあと少し。CloudFrontディストリビューションの設定を変えて、HTTPでアクセスされた時に、HTTPSにリダイレクトするように修正します。注意すべきは、example.comが使っているCloudFrontディストリビューションのみ設定を変えるようにすること。www.example.comはそのままHTTPもHTTPSも使えるようにしておいてください。

  1. example.comのCloudFrontディストリビューションを開く
  2. Behaviorsのタブを選択する
  3. 該当のものにチェックを入れて、Editする
  4. Viewer Protocol PolicyをRedirect HTTP to HTTPSにして保存する

動作確認

これで、以下の動作をするようになります。

注意としては、CloudFrontはCDNなので、設定が反映されるまでに時間がかかることがあります。その場合は、全てのキャッシュをクリアするなり、時間を置いてから確認するなどする必要があります。

これで全てのアクセスがhttps://example.comに集約されるようになりました。

おわりに

とまあ、一度理解してしまえば、どうということはないのですが、ちゃんと理解していないと、相互の関係性が複雑なのでハマってしまいます。

誰の役に立つのかわからない内容になってしまいましたが、これで低コストでセキュアなコーポレートサイトが作れるようになります。個人のサイトでも使っても良いかもですね。