AWS Network Firewallは、Amazon Virtual Private Cloud(VPC)向けに提供されるステートフル型のマネージドネットワークファイアウォール兼侵入検知・防御サービスです。ステートフルインスペクションによりネットワークトラフィックの文脈を踏まえた判断が可能になり、より精度の高い制御を実現します。さらに、AWS Network Firewallの侵入防御システム(IPS)は、トラフィックフローをアクティブに検査し、脆弱性の悪用や総当たり攻撃に対してネットワーク層・アプリケーション層でリアルタイムに保護を提供します。
AWSは継続的に機能を拡張しており、従来型NGFWの高度な機能に並ぶべく、今後もさらなる機能追加が見込まれます。
12月19日、AWS Network FirewallのエグレスTransport Layer Security(TLS)インスペクション機能が、すべてのAWSリージョンで一般提供(GA)となりました。本機能を利用すると、インターネット・別のVPC・別のサブネット宛てのアウトバウンドTLSトラフィックを復号し、検査したうえで再暗号化できます。なお、Network FirewallのイングレスTLSインスペクションは、すでに全AWSリージョンで利用可能です。
アウトバウンドSSL/TLS復号が必要な理由
アウトバウンドTLSインスペクションとは、外向きの暗号化トラフィックを監視・検査するための仕組みです。データの外部流出やマルウェア、その他のセキュリティ脅威の検知・防止に役立ちます。TLS暗号化はインターネット上で安全に通信を届けるための技術ですが、悪意あるトラフィックを隠す手段として悪用されることもあります。アウトバウンドのTLS接続を検査することで、リスクのあるトラフィックを傍受してフィルタリングでき、データ侵害の検知・防止や、規制要件への準拠維持にも効果を発揮します。
リファレンスアーキテクチャ図とトラフィックフロー

Network Firewallがない場合、WebサイトへのSSL暗号化リクエストはクライアントとサーバー間で直接やり取りされます。ファイアウォールでTLSインスペクションを有効化すると、ブラウザとサーバーの間にミドルボックス(SSLインターセプトデバイス)として介在するようになります。
なお、TLSインスペクションはHTTPSだけでなく、SMTPやPOP3sなど、TLSを利用するTCPベースのアプリケーションプロトコル全般に対応します。
トラフィックフローの例 — [HTTPSの場合]
- クライアントリクエスト:クライアントがHTTPSでサーバーへのセキュア接続を開始します。
- Server Helloと証明書:サーバーがSSL暗号スイートと証明書をクライアントへ返します。
- Network FirewallによるSSLインスペクション:証明書を傍受し、動的に生成した新しい証明書に差し替えます。サーバーになりすましてクライアントとSSL接続を確立すると同時に、クライアントの代理として実際のサーバーとも別途セキュア接続を確立します。
- コンテンツ検査:クライアントから送られた暗号化データをNetwork Firewallが復号し、ファイアウォールポリシーのステートフルルールに従ってマルウェア、ウイルス、不正データなど潜在的なセキュリティリスクを検査します。ファイアウォールは接続を許可するかドロップするかを判断し、許可した場合はデータを再暗号化してサーバーへ転送します。
- サーバー応答:サーバーは暗号化データでリクエストに応答し、応答も同じSSLインスペクションデバイスを経由してクライアントへ戻ります。
**設定手順**
前提条件
AWSコンソールにログインし、VPCサービス内の「TLS inspection configurations」を開きます。「Create TLS inspection configuration」をクリック —

「Associate certificates」ページで、アウトバウンドSSLインスペクション用のCA証明書を選択し、「Next」をクリックします。
アウトバウンドSSL/TLSインスペクションで使用するCA証明書の一般要件はこちらを参照してください。

「Name」を入力し、必要に応じて「Description」も入力します —

次のページでは、Network Firewallに復号させたいトラフィックの範囲(スコープ)を定義します。Network Firewallは、スコープ設定で定義した5タプルにマッチするトラフィックを復号します。以下は、ポート443宛てのすべてのトラフィックを検査する設定例です。「Add scope configuration」をクリック —

設定を確認し、「Next」をクリック —

必要に応じて、保存データの暗号化に独自のカスタマーマネージドキーを指定することもできます。ここではチェックを外したままにしますが、失効済みや不明なサーバー証明書に対してアクションを取れるよう、「Check certificate revocation status」のチェックを推奨します。

タグを追加したら、「Review and create」ページで設定内容を再確認し、「Create TLS inspection configuration」をクリックします —

続いて、作成したTLSインスペクション設定をファイアウォールポリシーに紐付けます。
ファイアウォールポリシーを作成し、「Step 4」でTLSインスペクション設定を追加します。なお、TLSインスペクション設定は新規ポリシー作成時にのみ追加でき、既存ポリシーには追加できません。

ただし、ファイアウォールポリシー内の既存のTLSインスペクション設定を別の設定に差し替えることは、「TLS inspection configuration」タブから可能です。

設定を完了するには、既存のFirewallのファイアウォールポリシーを編集します —

まだNetwork Firewallを立ち上げていない場合は、こちらのリンクを参照し、下図のように「Step 4」のドロップダウンから「associate an existing firewall policy」を選択します —

これで、Network Firewall経由でポート443(スコープ)宛てに送られる「あらゆる」トラフィックがTLSインスペクションの対象となります。
**動作テスト**
それではセットアップをテストします。VPCのルーティングがまだ整っていない場合は、AWS公式ドキュメントのこちらに手順が掲載されています。
AWS Network FirewallのSSLエンジンが復号後のHTTPトラフィックを実際に検査していることを確認するため、URIに「download-anti-malware-testfile」を含むリクエストをブロックするSTATEFULのSuricataルールを作成しました。
drop http $HOME_NET any -> $EXTERNAL_NET any (content:"download-anti-malware-testfile"; http_uri; msg:"Blocking bad domain"; flow:to_server, established; sid:2; rev:1;)
EC2インスタンスにログインし、以下のコマンドを実行してテスト用マルウェアファイルを取得します。
curl -I https://www.eicar.org/download-anti-malware-testfile/ -v
curlコマンドの出力はTLSアラートとなり、通信が中断されたことが分かります。
* using HTTP/1.x
> HEAD /download-anti-malware-testfile/ HTTP/1.1
> Host: www.eicar.org
> User-Agent: curl/8.5.0
> Accept: */*
>
TLS alert, close notify (256):
* Empty reply from server
* Closing connection
* TLS alert, close notify (256):
curl: (52) Empty reply from server
CloudWatch Logsを有効化していれば、復号済みのHTTPヘッダーとマッチしたルールを確認できます。ルールに合致したため、アクションは「blocked」になっています。
{
"firewall_name": "Firewall-outbound-inspection",
"availability_zone": "eu-west-1a",
"event_timestamp": "1708512471",
"event": {
"tx_id": 0,
"app_proto": "http",
"src_ip": "172.31.88.172",
"src_port": 41508,
"event_type": "alert",
"alert": {
"severity": 3,
"signature_id": 2,
"rev": 1,
"signature": "Blocking bad domain",
"action": "blocked",
"category": ""
},
"flow_id": 817400271818255,
"dest_ip": "89.238.73.97",
"proto": "TCP",
"http": {
"hostname": "www.eicar.org",
"url": "/download-anti-malware-testfile/",
"http_user_agent": "curl/8.5.0",
"http_method": "HEAD",
"protocol": "HTTP/1.1",
"length": 0
},
"dest_port": 443,
"timestamp": "2024-02-21T10:47:51.085575+0000"
}
}
**料金**
TLSインスペクション機能を利用すると、Advanced Inspectionに対して時間単位の追加料金が発生します。一部のリージョンでは、Advanced Inspectionのデータ処理に対する追加料金が発生する場合もあります。
たとえばアイルランドリージョンでは、Advanced Inspectionのトラフィック処理に追加料金は発生しません。

一方、メルボルンリージョンではトラフィック処理に対して$0.009/GBの料金が発生します。

料金の詳細はこちら。
**まとめ**
本記事では、Network Firewallを使って暗号化されたアウトバウンドトラフィックを検査する方法を解説し、SSL/TLS暗号化通信に潜む脅威を検知・防止できることを確認しました。これにより、マルウェアやデータの外部流出、C&C通信といった悪意ある活動に伴うリスクを軽減できます。
アウトバウンドSSLインスペクションは、現代の脅威環境においてセキュリティ防御を強化し、機密データを保護し、規制遵守を維持するうえで欠かせないセキュリティ対策と言えるでしょう。