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を使う。