AWSのhttps化に挑戦
AWSへのデプロイは完了しましたが、まだ暗号化は行っていないので以下の記事を参考にAWSのhttps化に挑戦してみました。
■必要な手順
軽くみてよくわからないので用語は以下の通り
- ACM・・・マネージド型のプライベートCAサービス、このサービスのおかげでプライベート証明書の発行・管理が可能とのこと。
- ALB・・・Application Load Balancerのこと、webサービスでは高トラフィックに対して振り分けを適切にするための機能です。詳細は以下記事参照
- Route53・・・AWSが提供するルーティング機能。詳細は以下リンク参照
AWS Certificate Manager
https://aws.amazon.com/jp/certificate-manager/
【ALBってなに?】初心者でもわかる簡単 AWS 用語解説
https://www.wafcharm.com/blog/difference-between-alb-and-elb/
Amazon Route 53
まずは、証明書のプロビジョンニング からスタートとのこと。
プロビジョンニング・・・元々は施設や設備を意味するProvisionが語源で、必要に応じた仮想化技術などリソースを必要に応じて準備することを指すみたいです。
プロビジョンニングとは
1. まずは、証明書のプロビジョンニング の「今すぐ始める」をクリック
2. 「パブリック証明書のリクエスト」を選択して、「証明書のリクエスト」をクリック
3. 登録したいドメイン名を入力する。。。
ん?まだドメイン名割り振ってないぞ。。。ドメイン登録しないとダメなことに気づいたのでRoute53を使って以下の手順に従ってドメインを登録することに。
ドメインを登録する方法
https://aws.amazon.com/jp/getting-started/tutorials/get-a-domain/
step1は対応済みなので、step2から着手
1. ドメインの登録の「今すぐ始める」をクリック
2. 「ドメインの登録」をクリック
3. 登録したいドメインを入力して登録する。※無料ではないです。
以下のように、1年で約1,000〜3,000円程度必要となります。。。
今回はmeublog.infoを登録することにしました。
4. 個人情報を登録
5. ドメインは無効化にしておく
よし、これでhttps化の作業が可能となる。。。と思ったが
「以下の点に注意してください。
- ドメインの登録が完了するには、最大で 3 日かかる場合があります。」
な、なんだっってー!
以下の通りリクストが保留中です。まだかな・・・と待つこと15分
以下の通り登録ができました。良かった。
gmail側にもverification メールが飛んできているので、リンクから飛んで認証します。
以下の画面が開かれたので、おそらくOK
では、最後にドメインの割り当てを行います。
レコードセットの作成ボタンを押して、
名前欄にwww、エイリアスにリンク先のIPアドレスを設定します。
入力完了後は「作成」ボタンをクリック
これで新しいレコードセットが作成されました。
■リンク
これで無事にドメイン後でも移動することができました!
それでは、ようやくドメイン登録が行えたのでAWSによるhttps化を進めてみます。
1. ドメインの追加では、Route53で追加したドメインを入力して次へ
2. 検証方法の選択では、DNS検証を選択して次へ
3. タグを追加は何も入力せずに次へ
4. 確認とリクエストでは問題ないことを確認して、「確定とリクエスト」をクリック
ここまでで、以下の画面に移動することができました。
まだ検証が完了していないので、このまま続行をクリックします。
※サブドメインも含める場合*.<ドメイン名>とした方が良いです。
Route53でのレコード作成を行い、レコードセットを作成?すると以下の通り成功となります。あとはメッセージの通り一定時間待ちます。
30分後に確認すると、、、
成功です。いけてますね。
それでは最後の設定であるALBに移ります。
EC2マネジメントコンソールに移動して、
エクスプローラの「ロードバランシング」>「ロードバランサー」を選択してロードバランサーの作成をクリック
手順ではALBを使うとのことで、Application Load Balancerで作成ボタンをクリック
名前やサブネットは適当に設定します。
名前はbalancer-01、サブネットはus-east-1a, us-east-1cにしました。
次の手順に移動して、証明書の選択をしようとしたが表示されず。
なぜか、証明書が発行できていなかった模様。もう一度リクエスト飛ばすことで再度SSL証明書が発行され選択できるようになった。
セキュリティグループは既存を設定
名前は適当に入力「targetgroup-01」と入力して次の手順へ
ターゲットの登録は何もせずに、「次の手順:確認」をクリック
最後に確認ボタンが表示されるので、「作成」ボタンをクリック
上記画面が表示されたら、閉じるボタンを押して戻ります。
ドメイン名が参照できるようになっているので、コピーしておきます。
Route53の管理画面に移動して、ホストゾーン>レコードセットの作成に移動してコピーしたドメインをエイリアスに貼り付けて作成ボタンを押します。
これでAWSの作業は完了とのことです。さて、、、果たして、、、
ダメですね。。。うーん。レコードセットの設定が誤っていた可能性があるので、
うーんと色々悩んでいるとやはりロードバランサの設定が適当だったのが原因っぽい。
また、リージョンを間違えており東京のはずがバージニア北部で対応していた。。。
リージョンは作業場所が変わるのか。。。と一つ勉強になった。
改めてロードバランサの設定を見直し、レコードセットの設定も行いさあ接続と試みた結果以下の通り
インバウンドの設定にHTTPSを追加していなかったので、追加。
したが結果は変わらず。。。
503接続できているということは、ロードバランサー側の設定ミスってる気がするなーと見直していると、
上記の存在しません系無視していたけど、
これパブリックじゃなくて誤ってプライベートサブネットを指定していることに気づく。
色々調べるとインスタンスの追加を忘れているのでは?という記事が出てきたので更新してみる(なぜか編集から行けなかったので、新しくロードバランサを追加する。)
エラーはなくなったが、httpsにならない。
うーんと考えているとルーティング設定がhttpのままになっていることに気づく
設定をhttpsに変更したロードバランサを再度作成する。
これならどうだろうか・・・?と確認したが、、、
が、ダメ、、、!!!
うんうん唸っていこの問題10日以上放置してましたが、先ほどようやく解消しました!!!
原因は以下下線部の443がLISTENとなっていない=利用できないことでした。
nginxの起動構成を見直すと、、、
■<laradock>/nginx/sites/default.conf
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# For https
#listen 443 ssl default_server;
#listen [::]:443 ssl default_server ipv6only=on;
#ssl_certificate /etc/nginx/ssl/default.crt;
#ssl_certificate_key /etc/nginx/ssl/default.key;
嘘やろ、、、コメントアウトされているやんけ(確か参考にした資料が不要だからとかでコメントアウトした気がするな。。。)
急いでコメントを削除して対応
docker-compose restart nginxを実行して、実行状況を確認
root@ip-10-0-0-200:/home/ubuntu/laradock_blog# sudo lsof -i -P | grep "LISTEN"
systemd-r 631 systemd-resolve 13u IPv4 15692 0t0 TCP localhost:53 (LISTEN)
sshd 977 root 3u IPv4 19497 0t0 TCP *:22 (LISTEN)
sshd 977 root 4u IPv6 19505 0t0 TCP *:22 (LISTEN)
docker-pr 2036 root 4u IPv6 25249 0t0 TCP *:3306 (LISTEN)
docker-pr 2165 root 4u IPv6 25673 0t0 TCP *:2222 (LISTEN)
docker-pr 3093 root 4u IPv6 31546 0t0 TCP *:443 (LISTEN)
docker-pr 3105 root 4u IPv6 31575 0t0 TCP *:81 (LISTEN)
docker-pr 3117 root 4u IPv6 31602 0t0 TCP *:80 (LISTEN)
さあ、再度確認だ!
URLに鍵のアイコンがつきました。。。
長かったですが、ようやくひと段落しました。。。
引き続き機能実装に向けてプログラミング頑張りたいと思います。