CloudFrontとELB間をSSLで通信させる

ご機嫌いかがでしょうか、豊崎です。

そろそろ花粉の季節ですね。
昨年鼻水と目のかゆみがひどかったので、アレルギーの検査に行ったのですが、
何のアレルギーもありませんでした。
私の抗体は何に対して鼻水と目のかゆみを出していたのでしょうか。

はじめに

CloudFrontでELBをオリジンとして使うときに、CloudFrontと、ELBにそれぞれACM証明書を割り当てて、
インターネットからCloudFront間、CloudFrontからELB間をSSLで通信させるというケースがよくあります。

証明書の取得や設定に少しだけお作法がありますので、まとめてみたいと思います。

図の様な構成を作成します。

Untitled

お作法

先にお作法を書きます。

  • CloudFrontで利用できるACM証明書はバージニアリージョンで発行されたものだけ!
  • ELBにも証明書がいるので、ELBのリージョンでもACMから証明書を発行する

上記はACMを利用した場合ですが、
別の認証局が発行した証明書の場合も同様で各リージョンにインポートする必要があります。

必要なもの

  • CloudFront
  • CloudFront用ACM証明書 (バージニアリージョンで取得する
  • ELB
  • ELB用ACM証明書 (ELBと同じリージョンで取得する
  • EC2
  • Route53

やってみる

証明書の準備

まずはCloudFront用の証明書です。
CloudFrontに使用できる証明書は以下の様なものがあります。

  • 信頼された認証機関が発行する証明書 (Comodo、DigiCert、Symantec など)
  • ACMが提供する証明書
  • 自己署名証明書

繰り返しになりますが、CloudFrontでACM証明書を利用する場合はバージニアリージョンで取得する必要があります

スクリーンショット_2017-02-17_18_30_33

次にELB用の証明書です。
ELBで使用する証明書はELBと同じリージョンで取得を行います。
今回は東京リージョンにELBを作成するので、東京リージョンで証明書を取得します

スクリーンショット_2017-02-17_18_30_15

今回はどちらもワイルドカード証明書を取得しました。

EC2の作成

EC2作成の手順は割愛します。
作成したEC2にはapacheをインストールしておきましょう。

ELBの作成

ELBについてはSSL通信に関する設定箇所をピックアップして説明を行います。

ELBがリッスンするプロトコルをhttps、ポートを443にしましょう。

EC2_Management_Console_1

証明書の選択画面では東京リージョンで発行したACM証明書を選択しましょう。

EC2_Management_Console

作成が終わったらRoute53でELBのエンドポイント名に対して Aレコード(エイリアス)設定しておきましょう。 ここではssl-elb-origin.xxxx.comとしました。

当然つながります。(SecurityGroupは適宜設定してください)

https___ssl-elb-origin_omuraizu_com_index_html

CloudFrontの作成

CloudFrontも必要な箇所だけピックアップして説明します。

まずはOrigin Domain Nameです。

ここにはELBのFQDN(ssl-elb-origin.xxxx.com)を入力しましょう。

AWS_CloudFront_Management_Console_1

つぎにCloudFrontは「https://ssl-cfn.xxxx.com」で接続させる予定なので、 Alternate Domain Names(CNAMEs)にはssl-cfn.xxxx.comを入力しておきましょう。

SSL CertificateはCustom SSL Certificateを選択し、 バージニアリージョンで用意をしたACM証明書が選択されていることを確認しておきましょう。

AWS_CloudFront_Management_Console

CloudFrontが作成されたらRoute53でCroudFrontのドメイン名に対して Aレコード(エイリアス)設定をしておきましょう。 ここではssl-cfn.xxxx.comとしました。
CloudFrontが作成されるまでしばらく待ちます。

CloudFrontへ接続

ブラウザからhttps://ssl-cfn.xxxx.com/へ接続してみます。

https___ssl-cfn_omuraizu_com_index_html

無事、CloudFrontからELBオリジンへ接続が確認できました。

さいごに

以上簡単でしたが「CloudFrontとELB間をSSLで通信させる」でした。
正しく設定してセキュアな通信ライフを送りたいものです。

参考:http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-requirements.html