SJ blog
architecture
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

Route53プライベートホストゾーンとResolver — VPC内DNS設計

Route53プライベートホストゾーンの設定、VPCとの関連付け、Resolverインバウンド/アウトバウンドエンドポイント、オンプレミスとVPC間のDNS解決、スプリットビュー設計を解説。

一言結論

オンプレミスとVPC間のDNS統合にはResolverのインバウンド/アウトバウンドエンドポイントとForwarding Ruleが必要で、スプリットビューDNSを使えば同じドメインをVPC内外で異なるIPに解決して無駄なインターネット往復を排除できる。

プライベートホストゾーンの概要

プライベートホストゾーンはVPC内のリソースのDNS名前解決に使用する。パブリックDNSには登録されず、関連付けられたVPC内からのみ解決できる。

パブリックホストゾーン:
  → インターネット全体から解決可能
  → example.com → 203.0.113.10

プライベートホストゾーン:
  → 関連付けられたVPC内からのみ解決可能
  → internal.example.com → 10.0.1.50
  → 社内サービス、内部API、DB接続先に使用

プライベートホストゾーンの作成とVPCの関連付け

# プライベートホストゾーンの作成
aws route53 create-hosted-zone \
  --name internal.example.com \
  --caller-reference "internal-hz-001" \
  --hosted-zone-config Comment="Internal DNS",PrivateZone=true \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-xxx

# 別のVPCを追加で関連付け
aws route53 associate-vpc-with-hosted-zone \
  --hosted-zone-id Z1234567890 \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-yyy

# クロスアカウントVPCとの関連付け(別アカウントの場合)
# 1. ゾーンオーナーが認可
aws route53 create-vpc-association-authorization \
  --hosted-zone-id Z1234567890 \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-zzz

# 2. VPCオーナーが関連付け実行
aws route53 associate-vpc-with-hosted-zone \
  --hosted-zone-id Z1234567890 \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-zzz

スプリットビュー DNS(Split-Horizon)

同じドメイン名をパブリックとプライベートで別のIPに解決する設計。

example.com のパブリックホストゾーン:
  api.example.com → 203.0.113.10(パブリックIP/ALB)

example.com のプライベートホストゾーン(VPCに関連付け):
  api.example.com → 10.0.1.50(プライベートIP/内部ALB)

効果:
  VPC内からのアクセス → 内部IPに解決(レイテンシー低減、NAT不要)
  外部からのアクセス → パブリックIPに解決

Route53 Resolver

VPCのデフォルトDNSリゾルバー(VPCの第2アドレス: 10.0.0.2等)はRoute53 Resolverを使用する。

Route53 Resolver の役割:
  1. プライベートホストゾーンの解決
  2. パブリックDNSの再帰的解決(8.8.8.8等を使わない)
  3. オンプレミスとのDNS統合(Resolver Endpoints)

Resolver インバウンドエンドポイント

オンプレミスサーバーがAWSのプライベートDNSを解決するために使う。

オンプレミス → (DNS転送) → Resolverインバウンドエンドポイント

                          Route53 Resolver

                    プライベートホストゾーン解決
# インバウンドエンドポイントの作成
aws route53resolver create-resolver-endpoint \
  --creator-request-id "inbound-endpoint-001" \
  --direction INBOUND \
  --security-group-ids sg-xxx \
  --ip-addresses '[
    {"SubnetId": "subnet-aaa", "Ip": "10.0.1.10"},
    {"SubnetId": "subnet-bbb", "Ip": "10.0.2.10"}
  ]'

Resolver アウトバウンドエンドポイント

VPC内リソースがオンプレミスのDNSを解決するために使う。

VPC内EC2 → Resolver アウトバウンドエンドポイント
              ↓ (転送ルールで特定ドメインをオンプレミスDNSに転送)
           オンプレミス DNS サーバー

         corp.example.com 解決
# アウトバウンドエンドポイントの作成
aws route53resolver create-resolver-endpoint \
  --creator-request-id "outbound-endpoint-001" \
  --direction OUTBOUND \
  --security-group-ids sg-xxx \
  --ip-addresses '[
    {"SubnetId": "subnet-aaa"},
    {"SubnetId": "subnet-bbb"}
  ]'

# 転送ルールの作成(corp.example.comをオンプレミスDNSに転送)
aws route53resolver create-resolver-rule \
  --creator-request-id "rule-001" \
  --rule-type FORWARD \
  --domain-name "corp.example.com" \
  --resolver-endpoint-id ENDPOINT_ID \
  --target-ips '[
    {"Ip": "192.168.1.53", "Port": 53},
    {"Ip": "192.168.1.54", "Port": 53}
  ]'

DNS クエリログ

Route53 Resolverのクエリをログに記録してセキュリティ分析に使う。

# クエリログの設定(S3またはCloudWatch Logsに保存)
aws route53resolver create-resolver-query-log-config \
  --name "vpc-dns-logs" \
  --destination-arn arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/route53/queries

# VPCにクエリログを関連付け
aws route53resolver associate-resolver-query-log-config \
  --resolver-query-log-config-id rqlc-xxx \
  --resource-id vpc-xxx

試験頻出ポイント

シナリオ回答
VPC内リソースのプライベートDNS設定プライベートホストゾーン
同じドメインで内外で別IPを返したいスプリットビューDNS
オンプレミスからAWS内部DNSを解決Resolverインバウンドエンドポイント
VPC内からオンプレミスDNSを解決Resolverアウトバウンドエンドポイント + 転送ルール
クロスアカウントVPCとホストゾーン紐付けcreate-vpc-association-authorizationが必要

まとめ

プライベートホストゾーンでVPC内のDNS名前解決を管理し、スプリットビューで内外の解決を分離する。オンプレミスとのDNS統合にはResolver EndpointとForwarding Ruleを使う。