AWSを使ってSSL通信をする方法(EBLを使う方法)

AWS

SSL通信をする為に今回は下記の三つを使って実装する。

Route 53でドメインの発行

まずはRoute53を使って、ドメインを取得する。
ドメインの取得に関しては、取得したいドメインを入力して空いていれば、あとは取得者の情報を英語で入力するのみなので簡単。

Certificate Managerで証明書の発行

Certificate Managerを使って、ドメインの証明書を発行する。
ドメインの証明をする為に、DNSを使用したドメインの所有権の検証をする必要がある。
下記公式ドキュメントを参照
https://docs.aws.amazon.com/ja_jp/acm/latest/userguide/gs-acm-validate-dns.html

AWSを使用していれば、Certificate Managerから検証のリクエストをボタン一つでできるのでめちゃめちゃ便利。上記ドキュメント読もうとしたら、ワンクリックでいけたので、ほぼ読んでません。
下記は検証ボタンを押して、検証中待ちの画面。

15分程度たてば、通常はステータスが成功になる。
これで証明書のついたドメインを作成できたので次はELBを作成しアタッチする。

EBLを作成

ELBの機能としては、負荷分散等もあるが、ドメインのアタッチや、SSL通信の場しても活用できる。

まずはロードバランサ―の設定をするが、どの通信をするか設定する。
通常は下記の二つを許可する。
HTTP通信(80)
HTTPS通信(443)

また上記の通信をどのサブネットに割り当てるかその後設定する。
VPC内に各AZと通信をする為のパブリックサブネットを先に作って置く事。
(前回の記事を参照)

次へ進むと先ほど作成した、証明書が出てくるのでアタッチして進む
下の青く塗りつぶして、

次はセキュリティグループを設定しますが、EBL用のセキュリティグループを新規に作成してアタッチして完了です。

次はルーティングの設定をします。
インスタンスに設定するか、IPに設定するかですが、今回はインスタンスに設定します。ですので、先にEC2インスタンスを作成する必要があります。

作成完了したら、実際登録したドメイン名ではなく、DNS名というロードバランサ―のドメインでアクセスしてみましょう。
〇〇〇〇〇 .ap-northeast-1.elb.amazonaws.com
みたいな名前になっているはずです。
こちらにアクセスし登録したサーバーに振り分けられたら成功です。

Route53でドメイン転送先の設定

ロードバランサーで振り分けを確認できたら次は、作成したELBにドメインからアクセスできるように設定します。
ホストゾーンから指定のドメインをクリックし下記の画面に移動します。

その次にレコードの作成をクリックし、シンプルルーティング→シンプルなレコードを作成を選択します。

ルーティングで、先ほど作成したアプリケーションロードバランサをしてしたら完了です。

以上で全ての設定になります。指定ドメインをクリックし、ロードバランサで負荷分散されていれば完了です。

はまりポイント

ELBを設定した際に、二つのサーバーを跨ぐのでsession情報がおかしくなりプログラムが動かない事象が発生しました。

今回はlaravelで作成したので、.envファイルの
session_driverをdatabaseからcookie(fileでもよいかも?)に変更する事によりエラーを修正できました。

Laravelの設定

アプリ側の設定もメモ程度に…

AppServiceProviderに下記を追加する事で、https通信が可能になる。
.envファイルをlocalからproduction等に変更も必要。

    public function boot()
    {
        $this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');
    }