🛡️ Route 53 Resolver DNS Firewall

VPC内のDNSクエリを守る門番 — フェイルオープン&フェイルクローズ徹底解説

📡 Amazon Route 53 🔒 DNS Security 🏗️ VPC Networking

📌 まず押さえるべき3つのポイント

DNS Firewallの役割

VPC内のリソースが外部ドメインへDNSクエリを行う際、ルールに基づいて許可・ブロック・アラートを行う「DNS版セキュリティゲート」です。

フェイルオープン

Firewallが障害で応答できないとき、DNSクエリをそのまま通す設定。可用性を優先し、サービスを止めない方針です。

フェイルクローズ

Firewallが障害で応答できないとき、DNSクエリをブロックする設定。セキュリティを優先し、未検査の通信を許さない方針です。

🌐 セクション1:DNS Firewallとは?

🏢 たとえ話:オフィスビルの受付カウンター

あなたのオフィスビル(VPC)の受付カウンター(DNS Firewall)を想像してください。 社員(EC2やLambda)が外部の会社(インターネット上のドメイン)に電話をかけたいとき、 まず受付に「○○社に電話したい」と申し出ます。受付は許可リストを確認し、 許可された相手には電話をつなぎ、拒否リストにある怪しい相手への電話はブロックします。 これがDNS Firewallの仕組みです。

DNS Firewallの処理フロー
💻 VPCリソース
(EC2, Lambda等) DNSクエリ送信
🛡️ DNS Firewall
(ルール評価) ルールに基づき判定
🔍 Route 53
Resolver
(名前解決) 許可されたクエリのみ
🌍 外部DNS
(インターネット) 名前解決実行

DNS Firewallの主な機能

📋 ドメインフィルタリング

特定のドメインに対するDNSクエリを許可またはブロックするルールを作成。悪意あるドメインやデータ流出先へのアクセスを防止します。

📁 ルールグループ

複数のルールをグループ化して一貫したポリシーを適用。ルールグループは複数のVPCに関連付けでき、組織全体で統一したDNSセキュリティポリシーを展開できます。

⚡ アクション設定

マッチしたクエリに対して「ALLOW(許可)」「BLOCK(ブロック)」「ALERT(アラート)」のアクションを設定。BLOCKではカスタム応答(NODATA/NXDOMAIN/OVERRIDE)も選択可能です。

📊 ログ記録と監視

DNSクエリのログをCloudWatch Logs、S3、Kinesis Data Firehoseに記録して分析。ブロック・アラートされたクエリを可視化し、セキュリティ運用に活用できます。

📁 セクション2:ルールグループの仕組み

📖 たとえ話:受付の「チェックリストファイル」

ルールグループは、受付カウンターに置かれたチェックリストファイルのようなものです。 1つのファイルに「許可する会社リスト」「拒否する会社リスト」が書かれており、 受付はこのファイルを上から順番に確認します。最初にマッチしたルールが適用され、 どのルールにもマッチしなければ、次のファイル(次の優先度のルールグループ)を確認します。

ルールグループとルール構成の例
🔷 VPC に関連付けられたルールグループ

🔴 ルールグループ①(優先度: 100)

P:1 ⛔ *.malware-site.com → BLOCK
P:2 ⛔ *.phishing.example → BLOCK
P:3 ⚠️ *.suspicious.net → ALERT
🟢 ルールグループ②(優先度: 200)
P:1 ✅ *.amazonaws.com → ALLOW
P:2 ✅ *.mycompany.com → ALLOW
P:3 ⛔ * (すべて) → BLOCK

🔀 セクション3:フェイルオープン vs フェイルクローズ

🚪 たとえ話:オフィスの自動ドアが故障したら?

オフィスの入口にはセキュリティゲート(自動ドア)があります。 このゲートが停電で動かなくなったとき、2つの選択肢があります。
フェイルオープン=ドアを開けっ放しにして、全員が通れるようにする(業務が止まらない)
フェイルクローズ=ドアをロックして、誰も通れないようにする(不審者の侵入を防ぐ)
どちらが正しいかは、「可用性」と「セキュリティ」どちらを優先するかで決まります。

🟢 フェイルオープン

Fail Open

DNS Firewallが応答しない場合、DNSクエリはフィルタリングなしで通常通り処理されます。 Firewallの障害によってサービス全体が停止することを防ぎます。

📡 可用性を優先

🔴 フェイルクローズ

Fail Close

DNS Firewallが応答しない場合、DNSクエリはブロックされ名前解決が失敗します。 Firewallが未検査のまま通信が行われるリスクを排除します。

🔒 セキュリティを優先
🚪 自動ドア故障時の動作イメージ

🟢 フェイルオープン

🧑‍💼 → 🚪💨 → 🏢
ドアが開放 → 全員通過OK

メリット:業務が止まらない
リスク:セキュリティチェックなしで通過してしまう可能性がある

🔴 フェイルクローズ

🧑‍💼 → 🚪🔒 → ❌
ドアがロック → 全員通過NG

メリット:未チェックの人が入れない
リスク:正規の社員も入れず業務が停止する可能性がある

DNS Firewall障害時の具体的な動作フロー

🟢 フェイルオープンの動作フロー

1
DNSクエリ送信
EC2から example.com へのDNSクエリ
2
DNS Firewallに到達
Firewallがルール評価を試みる
3
⚠️ Firewall応答なし
障害やタイムアウトでルール評価不可
4
フィルタリングをスキップ
Resolverがそのまま名前解決を実行
✅ DNSクエリ成功(フィルタなし)

🔴 フェイルクローズの動作フロー

1
DNSクエリ送信
EC2から example.com へのDNSクエリ
2
DNS Firewallに到達
Firewallがルール評価を試みる
3
⚠️ Firewall応答なし
障害やタイムアウトでルール評価不可
4
DNSクエリをブロック
SERVFAIL応答を返しクエリを拒否
🚫 DNSクエリ失敗(名前解決不可)
比較項目 🟢 フェイルオープン 🔴 フェイルクローズ
障害時の動作 DNSクエリをそのまま通過させる DNSクエリをブロック(SERVFAIL)
優先する価値 可用性(Availability) セキュリティ(Security)
サービス影響 なし(通信は継続) あり(DNS依存のサービスが停止)
セキュリティリスク 未検査のDNSクエリが通過する可能性 最小(フィルタ未通過の通信なし)
適切な場面 一般的なWebサービス、可用性重視の環境 金融、医療、政府機関など高セキュリティ環境
AWSデフォルト ✅ デフォルト設定 明示的に設定が必要

🎯 セクション4:ユースケースと選択基準

どちらを選ぶべき? — 意思決定フロー
❓ セキュリティ要件がコンプライアンス(PCI-DSS, HIPAAなど)で厳格に求められているか?
はい
🔴 フェイルクローズを推奨
未検査トラフィックは許容不可
いいえ
❓ サービスのダウンタイムが
ビジネスに重大な影響を与えるか?
はい
🟢 フェイルオープンを推奨
可用性を確保
いいえ
🔴 フェイルクローズを推奨
安全側に倒す

業界別おすすめ設定

🛒 ECサイト・一般Webサービス

ユーザー体験とサービスの継続性が最優先。DNS障害でカート機能や商品ページが表示されなくなると、直接的な売上損失につながります。

🟢 フェイルオープン推奨

🏦 金融サービス・決済システム

PCI-DSSなどの厳格なコンプライアンスが求められ、未検査のDNSクエリがデータ漏洩のリスクとなります。セキュリティが可用性に優先します。

🔴 フェイルクローズ推奨

🏥 医療・ヘルスケア

HIPAA等の規制により患者データの保護が最優先。ただし生命に関わるシステムでは可用性も重要なため、システムごとに使い分けが必要です。

🔴 フェイルクローズ推奨(要件次第)

🎮 ゲーム・メディア配信

リアルタイム性が求められるサービスでは、DNS障害によるサービス停止がユーザー離脱に直結。可用性を確保しつつ、ログ監視で補完します。

🟢 フェイルオープン推奨

🏗️ セクション5:アーキテクチャと設定

DNS Firewall アーキテクチャの全体像
リソース層
💻 EC2 / Lambda / ECS など VPC内リソース
↓ DNSクエリ送信
Resolver層
🔍 Route 53 Resolver(VPCのDNSサーバー .2アドレス)
↓ Firewallが介入
フィルタリング層
🛡️ DNS Firewall(ルールグループで評価)
↓ ルール評価
ルール層
📋 ドメインリスト+アクション(ALLOW / BLOCK / ALERT)
↓ 判定結果
結果
✅ 許可 → 外部DNS解決 / 🚫 ブロック → エラー返却 / ⚠️ アラート → ログ記録&通過

AWS CLIでの設定例

AWS CLI
# ドメインリストの作成(ブロック対象ドメイン)
aws route53resolver create-firewall-domain-list \
    --name "blocked-domains" \
    --domains "malware-site.com" "phishing.example.com"

# ルールグループの作成
aws route53resolver create-firewall-rule-group \
    --name "my-security-rules"

# ルールの追加(ブロックルール)
aws route53resolver create-firewall-rule \
    --firewall-rule-group-id "rslvr-frg-xxxxx" \
    --firewall-domain-list-id "rslvr-fdl-xxxxx" \
    --priority 100 \
    --action "BLOCK" \
    --block-response "NXDOMAIN" \
    --name "block-malware"
AWS CLI - フェイルオープン/クローズ設定
# VPCとルールグループの関連付け(フェイルオープン)
aws route53resolver associate-firewall-rule-group \
    --firewall-rule-group-id "rslvr-frg-xxxxx" \
    --vpc-id "vpc-xxxxx" \
    --priority 100 \
    --name "my-vpc-association"

# フェイルオープン設定(デフォルト)
aws route53resolver update-firewall-config \
    --resource-id "vpc-xxxxx" \
    --firewall-fail-open ENABLED

# フェイルクローズ設定
aws route53resolver update-firewall-config \
    --resource-id "vpc-xxxxx" \
    --firewall-fail-open DISABLED

✅ セクション6:ベストプラクティス

📝 段階的なルール導入

最初はALERT(監視のみ)でルールを作成し、ログを分析してから本番BLOCKに切り替えましょう。いきなりブロックすると、正常な通信まで止めてしまうリスクがあります。

🔗 AWSマネージドドメインリスト活用

AWSが提供するマネージドドメインリスト(マルウェア、ボットネット C&C など)を活用すると、自分でリストを管理する手間を大幅に削減できます。

📊 CloudWatchアラーム設定

ブロックされたDNSクエリのメトリクスを監視し、異常増加を検知するアラームを設定しましょう。攻撃の兆候を早期に発見できます。

🏢 RAM で組織全体に共有

AWS RAM(Resource Access Manager)を使って、ルールグループを AWS Organizations 全体で共有できます。セキュリティポリシーの一元管理に有効です。

❓ セクション7:よくある質問(FAQ)

💬 DNS Firewallと Network Firewall の違いは何ですか?
DNS FirewallはDNSクエリ(ドメイン名解決のリクエスト)のみをフィルタリングするサービスです。Network Firewallはネットワークトラフィック全体(HTTP、TCP/UDPなど)をフィルタリングします。DNS Firewallは「どのドメインに聞きに行くか」を制御し、Network Firewallは「実際の通信内容」を制御する違いがあります。
💬 DNS Firewallはインバウンドのクエリもフィルタリングできますか?
いいえ。DNS FirewallはVPC内のリソースから外部へのDNSクエリ(アウトバウンド)のみを対象とします。外部からVPC内へのインバウンドDNSクエリは対象外です。
💬 フェイルオープン/フェイルクローズはVPC単位の設定ですか?
はい。フェイルオープン/フェイルクローズの設定はVPC単位で行います。同一アカウント内でも、VPCごとに異なる設定が可能です。例えば本番VPCはフェイルクローズ、開発VPCはフェイルオープンといった使い分けができます。
💬 DNS Firewallの料金はどうなっていますか?
DNS Firewallの料金は、処理されたDNSクエリ数に基づきます。ルールグループの作成やVPCへの関連付けには追加料金はかかりません。AWSマネージドドメインリストの使用にも追加料金はありません。
💬 ルールにマッチしなかったDNSクエリはどうなりますか?
どのルールにもマッチしなかったDNSクエリは、通常通り処理されます(許可されます)。明示的にすべてのドメインをブロックしたい場合は、最も低い優先度でワイルドカード(*)のBLOCKルールを追加する必要があります。

Created by SSuzuki1063

AWS SAP Learning Resources