AWSのroute53(DNS)とdot tk(無料ドメイン)で、EC2に独自ドメイン(AWS Certificate Manager+Application Load Balancer)でHTTPSアクセス出来るようにしてみた。
前回の続き
AWSでEC2(nginx)+RDS(MySQL8)+PHP7.3なLAMP環境を構築して、phpMyAdmin導入までやってみた。セキュリティグループ(ファイアウォール)の設定が分かりづらい…。
ドメインorサーバを取得すれば、DNSサーバは無料で使えるけど、せっかくなのでAWSのroute53を使ってみた。
0, 適当なドメイン名を決める。
1, AWSのサービスからroute53を選択
2, 「ホストゾーン」の作成ボタンを押す。右側にドメイン名入力欄が出てくるので入力
3, DNSサーバのアドレスが4つ表示されるのでメモして「レコードセットの保存」ボタンを押す(最後のドットはあってもなくても行けた)
4, dot tkで適当なドメインを取得
5, 取得過程で、Use DNSとUse your own DNSを選択して、route53のDNS最初の2個とEC2のIPアドレスを入力する。
6, ドメイン登録完了した後なら、DNSサーバ5台まで登録できるので4つともdot tkに登録する。
7, 数分~数十分待って、ブラウザからアクセス出来るようになればOK!
※先にドメイン取得しておいた方が良いかも?
冷静に考えると、EC2は再起動するとIPが変わる事があるので、Elastic IPで固定IP化する。
1, ECのコンパネにあるので「Elastic IP アドレスの割り当て」ボタンを押す。
2, 新しいIP(Elastic IP)取得される。
3, Elastic IPをECインスタンスに割り当てる(Elastic IP アドレスの関連付け)
4, 今後はSSHやroute53の接続先IPを、このElastic IPに変更する。
※先にElasticIP設定をしておいた方が良いな…。
ココまで来たらHTTPS化したい!
AWSでWebサイトをHTTPS化 その1:ELB(+ACM発行証明書)→EC2編
無料SSLと言えば、Let’s Encryptだけど、AWSでも無料SSLを発行してくれるのね。
1, AWS Certificate Managerで「証明書のリクエスト」ボタンを押して、ドメイン名を入力する。
2, 検証方法(DNS/Eメール)を選ぶ。今回はDNSにしよう。
3, 人間が識別するためのタグ入力があるけど、未入力のままでいいや。
4, DNS設定ファイルをダウンロードして、Route53で「レコードセットの作成」ボタンを押して、指定されたCNAMEレコード(名前、値)を入力する。
5, ACM画面に戻って、続行ボタンを押す。問題がなければSSL証明書が発行されるはず。
発行されたSSL証明書は、普通Webサーバ(nginx@ec2)に登録するもんだけどAWSの場合は、EC2の前にELB or CroudFrontを置いて、そこに登録するものらしい。
1, EC2コンソールを開いて、左下の「ロードバランサー」→Application Load Balancerを選択
2,「elb for 独自ドメイン名」とか適当な名前をけて、プルダウンでHTTPS選択。AZは適当に全部選択(2個以上)
3, ACMで取得したSSL証明書がデフォでセットされているので、「次の手順:セキュリティグループの設定」ボタンを押すだけ
4, 新しいセキュリティグループを作成して、HTTPS許可+ソースは「マイIP」にする。
5, 新しいターゲットグループの名前だけ入力して、次へボタンを押す
6, 最後にドメインを割り当てたいEC2インスタンスを選択したら終わり。
次にroute53の対象ドメインで、Aレコードを変更する
一番最初 = EC2のIPアドレス
2番目 = Elastic IPアドレス
3番目(今回) = ELBのIPアドレス(エイリアスを「はい」にするとELBが選択できる)
う~ん、httpsでアクセスすると503エラーになる。証明書そのものは適応されているっぽい。
EC2のセキュリティグループが、HTTPSを許可していなかったからだ!
それでも駄目…。う~ん、設定を見直してみると、ロードバランサーのターゲットグループで登録済みターゲットにEC2が何も設定されてない!これってエラーにならないのか…。
とりあえず、これでhttpsでアクセス出来た。やったね!
ELB(ALB)に証明書をもたせるのは、EC2が使い捨てワーカー的な扱いだからか…。
レンタルサーバみたいに、SSL証明書が発行されたから、自動的にhttpsでアクセス出来るようにして欲しい(苦笑)