7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Route53】プライベートホストゾーンを利用してみる

Last updated at Posted at 2024-12-30

概要

AWSのRoute53を使用する際、プライベートホストゾーンを作成することでプライベートIPアドレスを返却することができます。
これにより、特定のVPC内からの通信がネットワーク内で完結するようになり、効率的でセキュアな通信が可能になります。
本記事ではプライベートホストゾーンの導入方法および概要についてまとめたいと思います。

パブリックホストゾーンの場合

まずはパブリックホストゾーンを使用した名前解決の例を見てみましょう。
テスト用のパブリックホストゾーンとしてtaka_2525.jpを作成してみます。

スクリーンショット 2024-12-30 11.35.44.png

さらに、とあるALBへのAレコード(エイリアス)としてservice.taka_2525.jpのレコードを作成してみます。
この状態で名前解決を行うとALBのグローバルIPアドレスが返却されます。

dig 'service.taka_2525.jp'
# => ALBのグローバルIPアドレスを返却

この結果は、VPC内外を問わず同じものです。
(VPC内で実行したとしてもグローバルIPアドレスが返却される)

プライベートホストゾーンを追加してみる

ここからが本題です。
上記の設定に追加して、プライベートホストゾーンのtaka_2525.jpを作成します。
今回はテストなのでtest_vpcというVPCに紐づけることとします。
VPCの選択があること以外は、パブリックホストゾーンの時と同じ手順です。

スクリーンショット 2024-12-30 11.45.03.png

左上にプライベートと表示されていますね。

パブリックホストゾーンの時と同じように、ALBへのAレコードservice.taka_2525.jpを作成します。
この状態で名前解決を行うとどうなるのでしょうか。

VPC外からのアクセス

今回テスト用に用意したtest_vpcの外からのアクセスを考えてみます。
この場合は、パブリックホストゾーンのレコードが参照されるため、名前解決の結果は前回と同じです。

dig 'service.taka_2525.jp'
# => ALBのグローバルIPアドレスを返却(さっきと一緒)

VPC内からのアクセス

では、test_vpc内のリソースからのアクセスの場合はどうなるでしょうか。
VPC内の踏み台サーバー等から同様のコマンドを実行してみます。

# VPC内のリソースで実行
dig 'service.taka_2525.jp'
# => ALBのプライベートIPアドレスを返却

先ほどとはうってかわり、プライベートIPアドレスが返却されるようになりました。

注意点!

プライベートホストゾーンを作成したことにより、test_vpc内からの名前解決はパブリックホストゾーンのtaka_2525.jpではなくプライベートホストゾーンのtaka_2525.jpで行われるようになりました。
プライベートホストゾーンにレコードがない時にパブリックホストゾーンのレコードにフォールバックするわけではないので注意が必要です(自分はここで失敗しました)。
わかりづらいと思うので以下の例を考えてみます。

私の失敗を再現してみる

今までの設定は一旦忘れて、以下のような状況を想定してみます。

パブリックホストゾーンtaka_2525.jp

  • Aレコード: service_a.taka_2525.jp → ALB_aへのエイリアス
  • Aレコード: service_b.taka_2525.jp → ALB_bへのエイリアス

プライベートホストゾーンtaka_2525.jp

  • Aレコード: service_a.taka_2525.jp → ALB_aへのエイリアス
    (ALB_bへのレコードは作成していない)

パブリックホストゾーンにはALB_aとALB_bへのエイリアスが設定されていますが、プライベートホストゾーンにはALB_aへのみのエイリアスを設定しました。

この状態でservice_b.taka_2525.jpの名前解決を行ってみます。

VPC外からのアクセス

dig 'service_b.taka_2525.jp'
# => ALB_bのグローバルIPアドレスを返却

問題なく名前解決できています。

VPC内からのアクセス

VPC内からアクセスしてみます。

# VPC内のリソースで実行
dig 'service_b.taka_2525.jp'
# => NODOMAIN(レコードが見つからない)

あれ、名前解決できないですね...
プライベートホストゾーンを作成する前は名前解決できていたのに...

それもそのはずで、AWS公式には以下のように書かれています。
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zone-private-considerations.html

一致するプライベートホストゾーンがあるが、リクエストのドメイン名とタイプに一致するレコードがない場合、Resolver はリクエストをパブリック DNS リゾルバーに転送しません。代わりに、NXDOMAIN (存在しないドメイン) をクライアントに返します。

つまり、プライベートホストゾーンで名前解決が完了するようにレコードを用意しておく、もしくは名前空間が競合しないようにホストゾーンを作成しておく必要があります。

最後に

プライベートホストゾーンを作成したら名前解決ができなくなってめちゃくちゃ焦りました(検証環境なので大きな問題はありませんでしたが)。
プライベートホストゾーンで名前解決できない時はパブリックホストゾーンのレコードを参照してくれるのではないかと勝手に希望的観測を持っていましたが、きちんと公式を読むのが肝要だと再確認させられました。

それでは、良いお年を。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?