AWSでウェブアプリケーション環境構築：⑦ACMを利用してHTTPS通信可能にする

# はじめに
これはシリーズ記事の中の1つです。

[AWSでウェブアプリケーション環境構築：⓪概要](https://qiita.com/minato-naka/items/ddb5f5301f9f590cdcbf)
[AWSでウェブアプリケーション環境構築：①EC2インスタンスにwebサーバを構築](https://qiita.com/minato-naka/items/c21e4d53db7a720f8fdd)
[AWSでウェブアプリケーション環境構築：②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築](https://qiita.com/minato-naka/items/03f9dbd09eb3919a501f)
[AWSでウェブアプリケーション環境構築：③ロードバランサーを作成し、webサーバを冗長化する](https://qiita.com/minato-naka/items/396e2a25ec9a94840a67)
[AWSでウェブアプリケーション環境構築：④ElastiCacheのRedisを作成し、セッション共有可能にする](https://qiita.com/minato-naka/items/76cd5f660d987d34f7be)
[AWSでウェブアプリケーション環境構築：⑤webサーバをプライベートサブネットに配置し、メンテナンス用踏み台サーバを構築](https://qiita.com/minato-naka/items/406c2f247c0d29a93665)
[AWSでウェブアプリケーション環境構築：⑥Route53を利用して独自ドメインでアクセス可能にする](https://qiita.com/minato-naka/items/6f29694c1540f04dedb2)
[AWSでウェブアプリケーション環境構築：⑦ACMを利用してHTTPS通信可能にする](https://qiita.com/minato-naka/items/1a4f03e85857b8f61c4f)
**↑↑↑現在の記事↑↑↑**
[AWSでウェブアプリケーション環境構築：⑧サーバ負荷に応じてwebサーバがオートスケーリングする仕組みを構築](https://qiita.com/minato-naka/items/c0fab5d9fbb1cce68ac9)


#前回まで
![6.png](https://qiita-image-store.s3.amazonaws.com/0/297693/57413d5a-0db4-9bcc-61c0-b8192bddcaa9.png)

前回はRoute53を利用してドメインを購入し、
独自ドメインでLaravelサンプルアプリにアクセスできるようにしました。

# 今回構築する環境
![7.png](https://qiita-image-store.s3.amazonaws.com/0/297693/40c97a78-0bd1-0126-b164-19bb19d30c68.png)

サーバ構成は特に変わっていませんが、
上の方に緑色の[HTTPS]というマークが追加されています。

現状はHTTP通信でしかLaravelサンプルアプリを使えない状態なので、
AWS Certificate Manager（ACM）を利用してHTTPS通信可能にします。

# ACMでSSL証明書を作成
AWS Certificate Managerとは
SSL証明書を管理するためのサービスで、
SSL証明書の作成、削除や外部からのインポートなどができます。

マネジメントコンソールの[Certificate Manager]のページの
上部にある[証明書のリクエスト]ボタンをクリック。

表示されたリクエストのタイプ選択で、
[パブリック証明書のリクエスト]を選択して
[証明書のリクエスト]ボタンをクリックします。
![screencapture-us-east-2-console-aws-amazon-acm-home-2019-02-07-11_34_12.png](https://qiita-image-store.s3.amazonaws.com/0/297693/e0856a48-a4f2-2433-a2c2-906a1697e4bd.png)

## ドメイン名の追加
SSL証明書を発行する対象のドメインを設定します。

前回Route53で購入したドメイン名を入力してください。
![screencapture-us-east-2-console-aws-amazon-acm-home-2019-02-07-11_36_51.png](https://qiita-image-store.s3.amazonaws.com/0/297693/4f610f4b-2ca3-c807-51fa-53a2ac20ee7e.png)

## 検証方法の選択
SSL証明書を作成するには、
本当に対象のドメインの所有者かどうかの検証をする必要があります。

その方法として
[DNS の検証]
または
[Eメールの検証]
が選択可能です。

今回はEメールの検証にします。
![screencapture-us-east-2-console-aws-amazon-acm-home-2019-02-07-11_38_37.png](https://qiita-image-store.s3.amazonaws.com/0/297693/593dd723-354d-5349-d6f6-da4a33a7ba0c.png)

後のステップで実際に検証を行う際に、
前回ドメイン購入した時に
コンタクト情報として入力したメールアドレスに確認メールが送信されます。
[Route53 コンタクト情報](https://qiita.com/minato-naka/items/6f29694c1540f04dedb2#%E3%82%B3%E3%83%B3%E3%82%BF%E3%82%AF%E3%83%88%E6%83%85%E5%A0%B1)


## 確認とリクエスト
これまで入力した内容を確認し、
[確認とリクエスト]ボタンをクリックします。
![screencapture-us-east-2-console-aws-amazon-acm-home-2019-02-07-11_45_08.png](https://qiita-image-store.s3.amazonaws.com/0/297693/7d25107f-774d-2674-77fd-c22e17f61d9a.png)


## 検証
最後に、先ほど述べた
ドメイン所有者かどうかの検証
を行います。

![screencapture-us-east-2-console-aws-amazon-acm-home-2019-02-07-11_47_13.png](https://qiita-image-store.s3.amazonaws.com/0/297693/0b2c4293-05b2-ba59-64f4-62c950c66734.png)

[続行]ボタンをクリックすると、
確認メールが送信されます。

[Certificate approval for laravel-sample.net]という件名のメールがすぐに届くと思うので、
メールを開きます。
※迷惑メールに分類されている可能性があるので迷惑メールフォルダも確認してください

メール本文の
>To approve this request, go to Amazon Certificate Approvals

という部分のリンクをクリックします。

本人確認のためのページが表示されるので、
[I Approve]ボタンをクリックします。
<img width="964" alt="screencapture-us-east-2-certificates-amazon-approvals-2019-02-07-12_07_01 (1).png" src="https://qiita-image-store.s3.amazonaws.com/0/297693/3a35c3d9-9827-f8ca-3639-c2cb042215d5.png">

[Success!]と表示されれば本人確認成功です。

これでSSL証明書の作成作業は完了です。

# ALBのHTTPSリスナーを追加
以前ALBを作成した際にはHTTPのリスナーしか設定していない状態なので、
現在ALBはHTTPリクエストしか受け付けていません。

ここにHTTPSのリスナーを追加します。
その際に先ほど作成したSSL証明書を利用することになります。


[EC2]のページの
サイドメニューの[ロードバランサー]をクリックし、
表示されたロードバランサー一覧から以前作成した[laravel-sample-alb]をチェックします。

ページ下部に表示されたALBの詳細情報の
[リスナー]タブをクリックし、
[リスナーの追加]ボタンをクリックします。

表示されたフォームで下記のように設定します。
![screencapture-us-east-2-console-aws-amazon-ec2-v2-home-2019-02-07-12_15_32.png](https://qiita-image-store.s3.amazonaws.com/0/297693/d3b8d276-4cda-2986-e1c0-8018e3b0449b.png)

|項目|設定値|説明|
|:------------------------|:-------------------------|:-------------------------|
|プロトコル：ポート|HTTPS：443|-|
|デフォルトアクション|1.転送先に以前作成した[laravel-sample-target-group]を選択|-|
|セキュリティーポリシー|ELBSecurityPolicy-2016-08|ALBにHTTPS接続する際のセキュリティポリシーを選択できます。<br>特別な理由がなければデフォルトのままにします。|
|デフォルトのSSL証明書|{先ほど作成したlaravel-sample.netのSSL証明書}|先ほどのSSL証明書作成作業が正常に完了していれば、<br>プルダウンにそのSSL証明書が表示されます。|

これで[保存]ボタンをクリックすればHTTPSのリスナー追加完了です。

# セキュリティグループ修正
HTTPSのリスナー追加が完了したので
https://laravel-sample.net にアクセスしてみると、
タイムアウトになってしまいます。

原因は、ALBにつけているセキュリティグループが
HTTPS接続を許可していないためです。

ABLのセキュリティグループの設定を修正します。

[EC2]のページの
サイドメニューの[セキュリティグループ]をクリックし、
以前作成した[laravel-sample-sg-alb]をチェックして
ページ上部の[アクション]→[インバウンドルールの編集]をクリック。

現在は
・自分のIPからの**HTTP**接続を許可
のルールのみがある状態なので
・自分のIPからの**HTTPS**接続を許可
のルールを追加してください。

セキュリティグループの設定変更が完了したら、
もう一度 https://laravel-sample.net にアクセスしてみます。
<img width="725" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/297693/d8f7b4a4-9c75-ae98-bb04-3d8627d36498.png">

アドレスバーに鍵マークが表示され、
正常にHTTPSでのアクセスができました。

# 次回
次回はこのLaravelサンプルアプリのwebサーバが
オートスケーリングするように設定変更します。
[AWSでウェブアプリケーション環境構築：⑧サーバ負荷に応じてwebサーバがオートスケーリングする仕組みを構築する](https://qiita.com/minato-naka/items/c0fab5d9fbb1cce68ac9)