【AWS】AWS Network Firewall をさくっと設定してみる【セキュリティ】
どもども!そろそろ靴を買い替えたいsaisaiです。
みなさま、AWS Network Firewallをご存知でしょうか。AWS Network Firewall は VPC 向けのステートフルなマネージドネットワークファイアウォールのサービスです。2021/3くらいに東京リージョンでも使用できるようになりました。
マネージドサービスということでサーバ管理しなくてもいいのがやはり魅力的ですよね。プロキシサーバは果たして不要になるのか…。
本日はAWS Network Firewallを使用してドメインレベルのアクセス制御を行ってみましたので、使用を検討されている方々向けに設定方法を共有したいと思います。
原理を理解するよりもまずは触ってみたい人向けに書きますので、そういった方は是非参考にしていただければと思います。
実際に設定してみた
今回はプライベートサブネットやNat Gatewayは使用しない非常に簡素な構成です。まずはサービスに触れることを目的に設定していきます。
まずはVPCを作成、2つのパブリックサブネットを用意しましょう。
VPC:10.0.0.0/16
パブリックサブネット1:10.0.0.0/24(firewallを配置)
パブリックサブネット2:10.0.1.0./24(保護するサブネット)
※Internet Gatewayも作成しておく
次にAWS Network Firewallを設定していきます。
AWS Network Firewallは3つの要素で構成されます。
・ファイアウォール
・ファイアウォールポリシー
・ファイアウォールグループ
それぞれ作成していきましょう。
ファイアウォールを作成
VPCのページより左側、AWSネットワークファイアウォールの欄よりファイアウォールを選択します。あとは下記の手順となります。
・ファイアウォール名の入力
・VPCの選択(先ほど作成したVPC)
・サブネットの選択(パブリックサブネット1)
・空のファイアウォールポリシーを作成して関連付ける
・ポリシー名入力
・ファイアウォールを作成
5分ほどでプロビジョニングが完了します。
ファイアウォールポリシーの作成
次にファイアウォールポリシーを作成します。
・先ほど作成したポリシーを選択
・新しいルールグループの追加(今回はドメイン制限を試したいのでステートフルルール)
・グループ名入力
・キャパシティの入力(ルールの組み合わせ上限)プロトコル数×ソース数×宛先数(今回は一旦10){ステートフル は1以上30000以下、ステートレスは10000以下}
・ステートフルルールグループのオプションはDomain list
・ドメイン名のソースを入力(今回は当サイトgraff-it-i.com)
・プロトコルは80と443
・アクションは拒否
・ルールの作成
これで当サイトへのアクセスを拒否するポリシー、及びそのポリシーを含むグループが作成されます。
ルートテーブルの設定
今回の一番の肝はこのルートテーブルの設定と言っても過言ではないでしょう。
というのも、今回はInternet GatewayからのトラフィックをAWS NetworkFirewallエンドポイントにルーティングする必要があります。
そこでVPC Ingress Routing機能を使用して、サブネットとインターネットゲートウェイ(IGW)の間にファイアウォールエンドポイントを挿入します。
その工程も踏まえた設定手順が以下の通りです。
ルートテーブルの編集
・VPC Ingress Routingの適用(Internet Gateway -> Network Firewall)
新たにルートテーブルを作成、右クリック「edgeの関連づけ」->Edgeの関連づけで確認可能
対象のインターネットゲートウェイを選択して変更を保存
保護サブネットにトラフィックが向くようルールを追加
10.0.1.0/24 -> Gateway LoadBalancerのエンドポイント(Firewallエンドポイントではないfgw-xxxx)
※Network Firewallの中身はAWS Gateway LoadBalancerで動作しています。
・ルートテーブルの編集1(NetWork Firewall用)
新たにルートテーブルを作成、0.0.0.0/0 -> Internet Gateway
NetWorkFirewallを配置したサブネットを関連づけ
・ルートテーブルの編集2(保護領域用)
新たにルートテーブルを作成、0.0.0.0/0 -> Gateway Load Balancer
保護領域サブネットを関連づけ
テスト用EC2インスタンスの作成
パブリックサブネット2にEC2インスタンスを1台作成し、SSH接続できるようにしておいてください。
実際に試してみる
それでは実際にEC2インスタンスにSSH接続し、想定通りのアクセス制御が行われるかを試してみます。
まずは特に制御していないamazonのサイトに接続してみて、そのあと当サイトへアクセスしてみました。
$ curl -I https://amazon.com
HTTP/1.1 301 Moved Permanently
Server: Server
Date: Sun, 27 Jun 2021 06:00:43 GMT
Content-Type: text/html
Content-Length: 179
Connection: keep-alive
Location: https://www.amazon.com/
Permissions-Policy: interest-cohort=()
$ curl -I https://graff-it-i.com
curl: (28) Operation timed out after 300527 milliseconds with 0 out of 0 bytes received
成功です!無事特定のドメインへのアクセスが制限されていることが確認できました!
お片付け
Network Firewall は便利な分なかなか高価なサービスです。しかもエンドポイントは AZ 単位で課金されます。
複数AZで使用した場合はその分料金マシマシなので注意が必要です。
今回はあくまでテスト運用なのでお片付けまでしっかりやっておきましょう。
お片付け
・EC2の終了(EBSやEIPも削除確認)
・ルートテーブルの関連づけの開放
・ルートテーブルの削除
・ファイアウォール->ポリシー->グループの順に削除
・Internet Gatewayの削除
・サブネットの削除
・VPCの削除
さいごに
今回はAWS Network Firewallについて記事にしてみました。
プロキシサーバの構築やサーバ運用と比較すると非常に便利なサービスです。
ただその分費用は割高ですので運用コストと慎重に比較する必要がありそうです。
今後セキュリティ要件の厳しい企業様のアーキテクチャ構築等、インフラエンジニアとして考慮する場面が増えそうなサービスなのでしっかり設定できるようになっておきたいものです。
最後まで読んでいただきありがとうございました!
↓オススメ教材