DNSについて勉強しながらALB+Route 53でHTTPS接続まで設定したので箇条書きでメモします。
まだ情報が頭の中でまとまってないですが、アウトプットした方が吸収効率良いのでブログに書いてちょっとずつ整理していきます。
ドメインの構造
ドメインはピリオドで区切られた構造になっている。
www.example.co.jpの場合、jpがトップレベルドメイン、coが第二レベルドメイン、exampleが第3レベルドメイン、wwwが第四レベルドメイン
ドメインは一意でなければいけない。
ICANNがドメイン全体を管理している。(ICANNはIPアドレスも管理している)
ICANNが新しいトップレベルドメインをI作る権限を持っている。
ICANNガトップレベルドメインの管理を任命する組織がレジストリ。
販売を行うのはレジストラやリセラという組織
レジストラからドメインを購入してもリセラから購入してもだいたい同じでオプションなどサービス面が違う。
ドメインを購入するだけではWebサイトは見れないので、ドメインとサーバーのIPアドレスを紐づける必要がある。その仕組みがDNS(Domain Name System)
DNSの仕組み
ネームサーバーはドメイン名とそれに紐づくIPアドレスが登録されている。
フルリゾルバはネームサーバーに問い合わせるサーバー。
ブラウザからドメイン名にアクセスするとフルリゾルバがそのリクエストを受け取って、いろんなネームサーバーに問い合わせて、ブラウザにIPアドレスを返す。これを名前解決という。
ブラウザがやりとりするのはフルリゾルバ。
フルリゾルバはキャッシュを保持できるので、一度名前解決したドメインのIPアドレスはキャッシュがある間はネームサーバーに問い合わせることなくIPアドレスを返せる。
DNSはIPアドレス以外も管理していて、それらの情報をリソースレコードと呼ぶ。
AレコードやNSレコードなどはタイプ別のリソースレコード。
Whois情報とは
ドメインは持ち主の名前や連絡先を公開しなければならないという決まりがありそれをWhois情報と呼ぶ。
ドメインで何かトラブルがあった場合などに持ち主と連絡をとるため。
Whois情報に間違った情報があるとドメインを止められる可能性がある。
Route53について
AWSのDNSサービスで、ネームサーバーの役割を持っている(フルリゾルバではない)。
ドメイン名とそれに紐づくIPアドレスが登録されている。
SLA(Service Level Agreement)は100%で、DNSが落ちることはないとAWSが保証している。
Route 53で使われる概念
ホストゾーン - DNSのリソースレコードのまとまり。
レコードセット - リソースレコードのこと。
ルーティングポリシー - Route 53がレコードセットに対してどうルーティングするのかの設定
ヘルスチェック- DNSサーバーの稼働状況をチェックすること
ブラウザからRoute 53に登録されているDNS名example.comにアクセスすると、以下の流れになる。
- ブラウザがフルリゾルバにexample.comのIPアドレスを問い合わせる
- フルリゾルバがルードネームサーバーにexample.comのIPアドレスを問い合わせて、ルートネームサーバーはcomのネームサーバーに問い合わせるようレスポンスを返す
- フルリゾルバがcomのネームサーバーにexample.comのIPアドレスを問い合わせて、comのネームサーバーはRoute 53に問い合わせるようレスポンスを返す
- フルリゾルバがRoute 53にexample.comのIPアドレスを問い合わせて、Route 53がexample.comのIPアドレスを返す
- フルリゾルバがブラウザにexample.comのIPアドレスを返す
- ブラウザが受け取ったIPアドレスにアクセスする
エンジニアはexample.comがどのIPアドレスなのかをRoute 53に登録した上で、comのネームサーバーの次にRoute 53に問い合わせが行くように設定する必要がある。
Route 53でEC2など決まったIPアドレスを持つインスタンスと紐づける場合はAレコードでエイリアスを使用せず値にIPアドレスを設定する。
CloufFrontやロードバランサーと紐づける場合はエイリアスを使用して「エイリアス先」から選択して紐づける。
Route 53ではホストゾーンを作成し、その中にレコードセットを登録してドメインとIPアドレスの紐付けなどを設定する
Route 53に問い合わせが行くように設定する
Route 53のマネジメントコンソールから自分の持っているドメイン名でホストゾーンを作成する(タイプはパブリックにしておく。バックエンド用だったら「Amazon VPCのプライベートホストゾーン」にしても良いかも知れない)
NSレコードはドメインを管理するネームサーバーとの紐付け情報で、SOAレコードはドメインのゾーンの管理情報。
ホストゾーン作成時にAWSのネームサーバーも登録される
この登録されている4つのネームサーバーが名前解決を行うためにフルリゾルバが問い合わせるサーバーだと思われる
お名前ドットコムでドメインを取得した場合はデフォルトでお名前ドットコムのネームサーバーがドメインに紐づいているのでRoute 53のネームサーバーに変更する
digコマンドについて
digコマンドはDNSサーバに問い合わせることでドメイン名からIPアドレスを調べたり、IPアドレスからドメイン名を調べたりできるコマンド。
digの後にドメイン名を指定し、NSをつけることでネームサーバーを調べることができる。
自分が取得したドメインのAWSのネームサーバーが紐づいていることが確認できる。(ローカルのターミナルからも確認できた)
Route 53でドメインとALBの紐付け
Route 53のマネジメントコンソールからCreate Record Setを選択し、TypeはA-IPv4 AddressでAliasをYesにしてAlias Targetから紐付けたいALBを選択する。(Alias Targetの中に紐付けたいALBが出ない場合はそもそもALBを想定通りに作成できているか確認)
Routing PolicyはとりあえずSimpleにしておく
Createをクリックして紐付けを設定するとレコードセットの中にAレコードが追加されている
ブラウザにドメイン名でアクセスして想定通りにレスポンスが返ってくることを確認する
https接続を設定
AWS Certificate Managerの画面でRequest certificateをクリック
Step 1 Add domain namesの画面で自分のドメインを入力しNextをクリック
Step 2 Select validation methodでDNS validationを選択しNextをクリック
Step 3 Add tagsは任意でわかりやすいタグを入力(飛ばしても問題ないはず)
Step 4 Reviewで設定に問題ないことを確認
Step 5 Validationの画面でCreate record in Route 53をクリック
Route 53にCNAMEが登録される
Route 53のマネジメントコンソールでもCNAMEが追加されていることが確認できる
CNAMEがいまいち意味がわからなかったので調べました。
上記サイトでは以下のように説明されていました。
CNAMEレコードは正規ホスト名に対する別名を定義するレコードです。 特定のホスト名を別のドメイン名に転送する時などに利用します。 ※正規ホスト名はAレコードが登録されている必要があります。 ※特定のファイルやサブディレクトリを指定する事はできません。 ※ホスト名なしのCNAMEレコードは登録することができません。
しばらくするとCertificatesのStatusがIssuedになっている
ロードバランサーのリスナーの設定をhttpからhttpsに変更する
ロードバランサーの設定画面のListenerタブからeditをクリック
Edit Listenersの画面でProtocolをhttpsにしてCertificate nameを先ほど設定したものに指定(この時点でcertificateが選択項目の中になかったらACMの設定が上手くいってないかも)
Certificateを選択してListenerの設定を更新すると、ドメインにhttpsで接続できるようになっていることを確認する
参考YouTube動画