AWSのhttps化に挑戦

AWSへのデプロイは完了しましたが、まだ暗号化は行っていないので以下の記事を参考にAWShttps化に挑戦してみました。

 

qiita.com

 

■必要な手順

軽くみてよくわからないので用語は以下の通り

  • 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 

https://aws.amazon.com/jp/route53/

 

まずは、証明書のプロビジョンニング からスタートとのこと。

プロビジョンニング・・・元々は施設や設備を意味するProvisionが語源で、必要に応じた仮想化技術などリソースを必要に応じて準備することを指すみたいです。

プロビジョンニングとは

https://www.idcf.jp/words/provisioning.html

 

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を登録することにしました。

f:id:lawrence-twin:20200211151603p:plain

 

4. 個人情報を登録

5. ドメインは無効化にしておく

よし、これでhttps化の作業が可能となる。。。と思ったが

「以下の点に注意してください。

  • ドメインの登録が完了するには、最大で 3 日かかる場合があります。」

な、なんだっってー!

以下の通りリクストが保留中です。まだかな・・・と待つこと15分

f:id:lawrence-twin:20200211154035p:plain

以下の通り登録ができました。良かった。

f:id:lawrence-twin:20200211154142p:plain

 

gmail側にもverification メールが飛んできているので、リンクから飛んで認証します。

以下の画面が開かれたので、おそらくOK

f:id:lawrence-twin:20200211154534p:plain

 

では、最後にドメインの割り当てを行います。

 

DNS の管理画面を開いて、対象のドメイン名をクリック

 

f:id:lawrence-twin:20200211154855p:plain

レコードセットの作成ボタンを押して、

名前欄にwww、エイリアスにリンク先のIPアドレスを設定します。

入力完了後は「作成」ボタンをクリック

f:id:lawrence-twin:20200211155026p:plain


これで新しいレコードセットが作成されました。

f:id:lawrence-twin:20200211155225p:plain

 

■リンク

http://18.178.77.192/

http://www.meublog.info/

これで無事にドメイン後でも移動することができました!

AWSの場合結構簡単にドメイン設定できますね。

 

それでは、ようやくドメイン登録が行えたのでAWSによるhttps化を進めてみます。

f:id:lawrence-twin:20200211153640p:plain

1. ドメインの追加では、Route53で追加したドメインを入力して次へ

2. 検証方法の選択では、DNS検証を選択して次へ

3. タグを追加は何も入力せずに次へ

4. 確認とリクエストでは問題ないことを確認して、「確定とリクエスト」をクリック

ここまでで、以下の画面に移動することができました。

まだ検証が完了していないので、このまま続行をクリックします。

 

f:id:lawrence-twin:20200211155622p:plain

サブドメインも含める場合*.<ドメイン名>とした方が良いです。 

 

Route53でのレコード作成を行い、レコードセットを作成?すると以下の通り成功となります。あとはメッセージの通り一定時間待ちます。

f:id:lawrence-twin:20200211160531p:plain

 

30分後に確認すると、、、

 

f:id:lawrence-twin:20200211163315p:plain

成功です。いけてますね。

それでは最後の設定であるALBに移ります。

 

EC2マネジメントコンソールに移動して、

エクスプローラの「ロードバランシング」>「ロードバランサー」を選択してロードバランサーの作成をクリック

 

手順ではALBを使うとのことで、Application Load Balancerで作成ボタンをクリック

プロトコルhttps化を追加して、

名前やサブネットは適当に設定します。

名前はbalancer-01、サブネットはus-east-1a, us-east-1cにしました。

 

次の手順に移動して、証明書の選択をしようとしたが表示されず。

なぜか、証明書が発行できていなかった模様。もう一度リクエスト飛ばすことで再度SSL証明書が発行され選択できるようになった。

 

セキュリティグループは既存を設定

名前は適当に入力「targetgroup-01」と入力して次の手順へ

 

ターゲットの登録は何もせずに、「次の手順:確認」をクリック

最後に確認ボタンが表示されるので、「作成」ボタンをクリック

 

f:id:lawrence-twin:20200211170141p:plain

上記画面が表示されたら、閉じるボタンを押して戻ります。

ドメイン名が参照できるようになっているので、コピーしておきます。

 

Route53の管理画面に移動して、ホストゾーン>レコードセットの作成に移動してコピーしたドメインエイリアスに貼り付けて作成ボタンを押します。

これでAWSの作業は完了とのことです。さて、、、果たして、、、

ダメですね。。。うーん。レコードセットの設定が誤っていた可能性があるので、

 

f:id:lawrence-twin:20200211170738p:plain

 

うーんと色々悩んでいるとやはりロードバランサの設定が適当だったのが原因っぽい。

また、リージョンを間違えており東京のはずがバージニア北部で対応していた。。。

リージョンは作業場所が変わるのか。。。と一つ勉強になった。

改めてロードバランサの設定を見直し、レコードセットの設定も行いさあ接続と試みた結果以下の通り

 

f:id:lawrence-twin:20200211175921p:plain

 

 

 

インバウンドの設定にHTTPSを追加していなかったので、追加。

したが結果は変わらず。。。

503接続できているということは、ロードバランサー側の設定ミスってる気がするなーと見直していると、

f:id:lawrence-twin:20200211182346p:plain

上記の存在しません系無視していたけど、

これパブリックじゃなくて誤ってプライベートサブネットを指定していることに気づく。

 

色々調べるとインスタンスの追加を忘れているのでは?という記事が出てきたので更新してみる(なぜか編集から行けなかったので、新しくロードバランサを追加する。)

エラーはなくなったが、httpsにならない。

うーんと考えているとルーティング設定がhttpのままになっていることに気づく

設定をhttpsに変更したロードバランサを再度作成する。

 

これならどうだろうか・・・?と確認したが、、、

f:id:lawrence-twin:20200211184039p:plain

が、ダメ、、、!!!

 

うんうん唸っていこの問題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)

 

 

さあ、再度確認だ!

https://www.meublog.info

 

f:id:lawrence-twin:20200222183202p:plain

 

URLに鍵のアイコンがつきました。。。

長かったですが、ようやくひと段落しました。。。

引き続き機能実装に向けてプログラミング頑張りたいと思います。