- 公開日
- 最終更新日
DNS Firewallを活用してVPCのDNSアクセス制御を強化する
この記事を共有する

目次
はじめに
こんにちは!パーソル&サーバーワークスの野間です。
普段利用しているEC2インスタンスでは、セキュリティ対策としてセキュリティグループで必要なポートのみを開放するようにしています。 しかし、それだけでは意図しない外部ドメインへのアクセスを防ぐことができないため、ドメインベースでの制御を目的に、Route 53 Resolver DNS Firewall (以下、DNS Firewall) の導入を検討しました。
この記事では、DNS Firewallを使って特定のドメインのみ名前解決できるように構成する方法を、実際に手を動かして試した手順とともに紹介します。
DNS Firewallについて
DNS Firewallは、Amazon Route 53 Resolverと連携してVPCからのDNSクエリを検査・制御できるサービスです。 ドメインベースで通信の許可・拒否を定義するルールグループを作成し、それをVPCに関連付けることで、VPCレベルのセキュリティを強化できます。
参考:Route 53 Resolver DNS Firewall の仕組み
DNS Firewallを作成する
それでは早速VPCコンソールからDNS Firewallを作成します。 今回は「persol-serverworks.co.jp」への通信のみ許可するルールを作成したいと思います。
DNS Firewall ルールグループの作成
- VPCコンソールの画面左ペインから [DNS ファイアウォール] > [ルールグループ] を選択します。
- [ルールグループを作成] を押下します。
- ルールグループ名を入力して、[ルールグループを追加] を押下します。
許可ルールの作成
次に作成したルールグループに許可ルールを設定していきます。
- 先程作成したルールグループの画面から、[ルールを追加] を押下します。
- [カスタムドメインリスト] > [新しいドメインリスト] を押下します。
- 「persol-serverworks.co.jp」を追加します。
- アクションは [ALLOW] を選択します。
- [ルールを追加] を押下します。
※注意:ここで指定した「persol-serverworks.co.jp」はあくまでこのドメイン単体に対する許可です。サブドメインも許可したい場合は、「*.persol-serverworks.co.jp」などワイルドカードを使って指定する必要があります。
拒否ルールの作成
このままでは「persol-serverworks.co.jp」以外のドメインへの通信も許可されています。 次に拒否ルールを作成していきます。
- 先程作成したルールグループの画面から、[ルールを追加] を押下します。
- [カスタムドメインリスト] > [新しいドメインリスト] を押下します。
- 「*」を追加します。
- アクションは [BLOCK] を選択します。
- [ルールを追加] を押下します。
VPCとの関連付け
最後にDNS FirewallとVPCを関連付けます。
- ルールグループの画面から [関連付けられたVPC] タブを選択します。
- [VPCを関連付け] から関連付けしたいVPCを選択します。
EC2から動作確認
設定が完了したので、EC2から動作確認を行います。 今回はnslookupコマンドを使い、名前解決が行えるかテストしました。
persol-serverworks.co.jpへの名前解決結果
$ nslookup persol-serverworks.co.jp
Server: xx.xx.xx.xx
Address: xx.xx.xx.xx#53
Non-authoritative answer:
Name: persol-serverworks.co.jp
Address: 48.210.41.187
google.comへの名前解決結果
$ nslookup google.com
Server: xx.xx.xx.xx
Address: xx.xx.xx.xx#53
Non-authoritative answer:
*** Can't find google.com: No answer
無事にpersol-serverworks.co.jp以外のドメインへの通信をブロックできました! CloudFormationを使って構築する場合は、以下テンプレートファイルを使うことで作成が行えます。
DNS Firewall用 CloudFormationテンプレート
AWSTemplateFormatVersion: '2010-09-09'
Description: DNS Firewall rule group with whitelist and default deny rule
Parameters:
VpcId:
Type: String
Resources:
DomainListAllow:
Type: AWS::Route53Resolver::FirewallDomainList
Properties:
Domains:
- "persol-serverworks.co.jp"
Name: "AllowList"
DomainListBlock:
Type: AWS::Route53Resolver::FirewallDomainList
Properties:
Domains:
- "*"
Name: "BlockAll"
RuleGroup:
Type: AWS::Route53Resolver::FirewallRuleGroup
Properties:
Name: "AllowOnlySpecificDomain"
FirewallRules:
- Action: ALLOW
FirewallDomainListId: !Ref DomainListAllow
Priority: 1
- Action: BLOCK
FirewallDomainListId: !Ref DomainListBlock
Priority: 2
BlockResponse: NODATA
RuleGroupAssociation:
Type: AWS::Route53Resolver::FirewallRuleGroupAssociation
Properties:
FirewallRuleGroupId: !Ref RuleGroup
Priority: 200
VpcId: !Ref VpcId
Name: "associatewithvpc"
まとめ
DNS Firewallを使うことでドメインベースで柔軟なアクセス制御が可能になります。 特定のドメインのみを許可し、その他のドメインはすべてブロックするといったホワイトリスト方式の実装も容易です。
ドメインベースでの通信制御が必要なユースケースでは、DNS Firewallの活用をぜひご検討ください。
最後までお読みいただきありがとうございました!
この記事は私が書きました
野間 太一
記事一覧猫とCloudFormationが好きです。
