EC2+ACM+ALB+お名前.comで設定をしてサブドメインでhttps接続できるようになるまでひととおり
EC2でインスタンスを作成し、AWS Certificate Manager (ACM)でSSL証明書を取得し、Application Load Balancer (ALB)を設定してhttpsでアクセスできるまでの流れをメモする。SSL証明書取得は無料で、ALBを使うとそれを利用することができる。
前提として1つのドメイン、1つのEC2インスタンス、1つのALBでの構成とする。
ちなみに、ドメインは今回、お名前.comで取得し、Route53を利用しない。ALBへのアクセスは80と443を受け付けるが、ALBからEC2へのアクセスは80のみとしている。
User——→ALB(80,443)——→EC2(80)
また、今回は、お名前.comでCNAMEレコードを登録するのだが、お名前.comで、サブドメインなしのCNAMEレコードは登録できない。ということは、現時点で「ACM+ALB+お名前.com」を使用した場合は、サブドメインありのドメインしか扱うことが出来ないということだ。ここは、気をつけるべきところだ。もしサブドメインなしの素のドメインを扱うことができたら教えてください。
1.EC2インスタンス作成
今回の手順は、AWS MarketplaceのCentOS7のAmazon マシンイメージから作成を行った。(他のイメージでも問題なく動くと思う)
1.1: AMI の選択
「CentOS 7」を選択する。
1.2: インスタンスタイプの選択(ご自由に)
今回は「t2.micro」を選択する。
1.3: インスタンスの詳細の設定
デフォルトのまま進める。
1.4: ストレージの追加
デフォルトのまま進める。
1.5: タグの追加
デフォルトのまま進める。
1.6: セキュリティグループの設定
デフォルトのまま進める。後ほど80番ポートでALBのみから受け付けるように設定する。
「確認」>「作成」でインスタンスを作成する。SSHでログインするための鍵ファイル(pemファイル)を無くさないようにする。
作成したSSHにダウンロードしたpemでログインする。自分の場合は、Windows7のputtyやWinSCPを使ってログインするため、PuTTYgenを使用し、pemをppkファイルに変換してログインした。Macの場合はそのままpemファイルを使用してログインできる。
2.ACMで証明書を取得
証明書発行における、ドメインの認証は、メールではなく、DNSでの認証を行った。
証明書のリクエスト
「パブリック証明書のリクエスト」を選択
2.1: ドメイン名の追加
今回証明書を発行するドメインを入力します。
2.2: 検証方法の選択
[DNS の検証] 選択して、お名前.comで認証を進める。
2.3: 確認とリクエスト
ドメイン名と検証方法を確認します。
2.4: 検証
お名前.com側でDNSレコードの設定をしましょう。
認証できれば、「検証保留中」→「発行済み」
20〜30分くらいで発行済みになった。
証明書の発行はこれでOK。
3.ALBの設定
ALB (Application Load Balancer) の作成をする。
3.1: ロードバランサーの設定
名前は半角英数の方が良さそう。リスナーは「HTTP(80)」「HTTPS(443)」に。
(のちのちhttpでアクセスしてきたら、httpsにリダイレクト用)
アベイラビリティーゾーンを選択する。振り分けたいEC2のインスタンスが所属しているアベイラビリティーゾーンを含む2つを選択します。
3.2: セキュリティ設定の構成
「ACMから証明書を選択する」:先ほどACMで取得した証明書を選択する。
3.3: セキュリティグループの設定
「HTTP(80)」「HTTPS(443)」の2つを許可しておく。
3.4: ルーティングの設定
名前を入力して、あとはデフォルトでOK。
3.5: ターゲットの登録
ALBで振り分けるEC2のインスタンスを選択します。
4.CNAMEの設定
お名前.com側のCNAMEを登録します。すでにAレコードを登録してある場合は、それを削除します。
VALUEはALBの「DNS名」を登録する。
5.設定の確認
5.1: EC2インスタンスにWebサーバーをインストールしておく(動作確認用)
$ sudo yum install -y httpd
$ sudo systemctl start httpd
5.2: EC2のセキュリティグループ設定
EC2へのアクセスをALBからのみにします。
このときHTTPのインバウンドは、ALBで選択しているセキュリティグループを選択します。
(補足)5.3: 1つのALBにSSL証明書を複数登録する場合
すでに1つ証明書は登録されているが、「+」マークで証明書を追加できる。
今回設定しませんが、もし1つのALBに複数の証明書を登録したい場合に追加します。
6.アクセス
httpsでアクセスしてみましょう。
Apacheの初期画面が表示されました。
アクセスできない場合、ALB側のセキュリティグループを確認します。