【学習記録】DNSについて勉強、ALB+Route 53でHTTPS接続を設定

DNSについて勉強しながらALB+Route 53でHTTPS接続まで設定したので箇条書きでメモします。
まだ情報が頭の中でまとまってないですが、アウトプットした方が吸収効率良いのでブログに書いてちょっとずつ整理していきます。

ドメインの構造

ドメインはピリオドで区切られた構造になっている。
www.example.co.jpの場合、jpがトップレベルドメイン、coが第二レベルドメイン、exampleが第3レベルドメイン、wwwが第四レベルドメイン

ドメインは一意でなければいけない。

ICANNドメイン全体を管理している。(ICANNIPアドレスも管理している)

ICANNが新しいトップレベルドメインをI作る権限を持っている。
ICANNトップレベルドメインの管理を任命する組織がレジストリ

.jpを管理しているのはレジストリJPRS

jprs.co.jp

レジストリドメインの管理を行うが、販売は行なっていない。

販売を行うのはレジストラやリセラという組織

お名前ドットコムはレジストラムームードメインはリセら。

レジストラからドメインを購入してもリセラから購入してもだいたい同じでオプションなどサービス面が違う。

ドメインを購入するだけではWebサイトは見れないので、ドメインとサーバーのIPアドレスを紐づける必要がある。その仕組みがDNS(Domain Name System)

DNSの仕組み

DNSはネームサーバーとフルリゾルバで構成されている。

ネームサーバーはドメイン名とそれに紐づくIPアドレスが登録されている。

フルリゾルバはネームサーバーに問い合わせるサーバー。
ブラウザからドメイン名にアクセスするとフルリゾルバがそのリクエストを受け取って、いろんなネームサーバーに問い合わせて、ブラウザにIPアドレスを返す。これを名前解決という。
ブラウザがやりとりするのはフルリゾルバ。

フルリゾルバはキャッシュを保持できるので、一度名前解決したドメインIPアドレスはキャッシュがある間はネームサーバーに問い合わせることなくIPアドレスを返せる。

DNSIPアドレス以外も管理していて、それらの情報をリソースレコードと呼ぶ。
AレコードやNSレコードなどはタイプ別のリソースレコード。

Whois情報とは

ドメインは持ち主の名前や連絡先を公開しなければならないという決まりがありそれをWhois情報と呼ぶ。
ドメインで何かトラブルがあった場合などに持ち主と連絡をとるため。
Whois情報に間違った情報があるとドメインを止められる可能性がある。

Route53について

AWSDNSサービスで、ネームサーバーの役割を持っている(フルリゾルバではない)。
ドメイン名とそれに紐づくIPアドレスが登録されている。
SLA(Service Level Agreement)は100%で、DNSが落ちることはないとAWSが保証している。

Route 53で使われる概念

ホストゾーン - DNSのリソースレコードのまとまり。 レコードセット - リソースレコードのこと。
ルーティングポリシー - Route 53がレコードセットに対してどうルーティングするのかの設定
ヘルスチェック- DNSサーバーの稼働状況をチェックすること

ブラウザからRoute 53に登録されているDNSexample.comにアクセスすると、以下の流れになる。

エンジニアはexample.comがどのIPアドレスなのかをRoute 53に登録した上で、comのネームサーバーの次にRoute 53に問い合わせが行くように設定する必要がある。

Route 53でEC2など決まったIPアドレスを持つインスタンスと紐づける場合はAレコードでエイリアスを使用せず値にIPアドレスを設定する。
CloufFrontやロードバランサーと紐づける場合はエイリアスを使用して「エイリアス先」から選択して紐づける。

Route 53ではホストゾーンを作成し、その中にレコードセットを登録してドメインIPアドレスの紐付けなどを設定する

Route 53に問い合わせが行くように設定する

Route 53のマネジメントコンソールから自分の持っているドメイン名でホストゾーンを作成する(タイプはパブリックにしておく。バックエンド用だったら「Amazon VPCのプライベートホストゾーン」にしても良いかも知れない)
f:id:JunpeiNakasone:20210207215904p:plain NSレコードはドメインを管理するネームサーバーとの紐付け情報で、SOAレコードはドメインのゾーンの管理情報。

ホストゾーン作成時にAWSのネームサーバーも登録される
f:id:JunpeiNakasone:20210207220004p:plain この登録されている4つのネームサーバーが名前解決を行うためにフルリゾルバが問い合わせるサーバーだと思われる

お名前ドットコムでドメインを取得した場合はデフォルトでお名前ドットコムのネームサーバーがドメインに紐づいているのでRoute 53のネームサーバーに変更する

digコマンドについて

digコマンドはDNSサーバに問い合わせることでドメイン名からIPアドレスを調べたり、IPアドレスからドメイン名を調べたりできるコマンド。
digの後にドメイン名を指定し、NSをつけることでネームサーバーを調べることができる。

www.atmarkit.co.jp

自分が取得したドメインAWSのネームサーバーが紐づいていることが確認できる。(ローカルのターミナルからも確認できた)
f:id:JunpeiNakasone:20210207221745p:plain

Route 53でドメインとALBの紐付け

Route 53のマネジメントコンソールからCreate Record Setを選択し、TypeはA-IPv4 AddressでAliasをYesにしてAlias Targetから紐付けたいALBを選択する。(Alias Targetの中に紐付けたいALBが出ない場合はそもそもALBを想定通りに作成できているか確認)
Routing PolicyはとりあえずSimpleにしておく
f:id:JunpeiNakasone:20210207222632p:plain

Createをクリックして紐付けを設定するとレコードセットの中にAレコードが追加されている f:id:JunpeiNakasone:20210207222907p:plain

ブラウザにドメイン名でアクセスして想定通りにレスポンスが返ってくることを確認する
f:id:JunpeiNakasone:20210207222951p:plain

https接続を設定

AWS Certificate Managerの画面でRequest certificateをクリック
f:id:JunpeiNakasone:20210207223550p:plain

Step 1 Add domain namesの画面で自分のドメインを入力しNextをクリック
f:id:JunpeiNakasone:20210207223721p:plain

Step 2 Select validation methodでDNS validationを選択しNextをクリック
f:id:JunpeiNakasone:20210207223854p:plain

Step 3 Add tagsは任意でわかりやすいタグを入力(飛ばしても問題ないはず)
f:id:JunpeiNakasone:20210207224031p:plain

Step 4 Reviewで設定に問題ないことを確認
f:id:JunpeiNakasone:20210207224155p:plain

Step 5 Validationの画面でCreate record in Route 53をクリック
f:id:JunpeiNakasone:20210207224322p:plain

Route 53にCNAMEが登録される
f:id:JunpeiNakasone:20210207224509p:plain

Route 53のマネジメントコンソールでもCNAMEが追加されていることが確認できる
f:id:JunpeiNakasone:20210207224633p:plain

CNAMEがいまいち意味がわからなかったので調べました。

help.onamae.com

上記サイトでは以下のように説明されていました。

CNAMEレコードは正規ホスト名に対する別名を定義するレコードです。 特定のホスト名を別のドメイン名に転送する時などに利用します。 ※正規ホスト名はAレコードが登録されている必要があります。 ※特定のファイルやサブディレクトリを指定する事はできません。 ※ホスト名なしのCNAMEレコードは登録することができません。

しばらくするとCertificatesのStatusがIssuedになっている
f:id:JunpeiNakasone:20210207224916p:plain

ロードバランサーのリスナーの設定をhttpからhttpsに変更する

ロードバランサーの設定画面のListenerタブからeditをクリック
f:id:JunpeiNakasone:20210207225157p:plain

Edit Listenersの画面でProtocolをhttpsにしてCertificate nameを先ほど設定したものに指定(この時点でcertificateが選択項目の中になかったらACMの設定が上手くいってないかも)
f:id:JunpeiNakasone:20210207225441p:plain

Certificateを選択してListenerの設定を更新すると、ドメインhttpsで接続できるようになっていることを確認する
f:id:JunpeiNakasone:20210207225813p:plain

参考YouTube動画

https://www.youtube.com/watch?v=MVBAnucCwrg