こんにちは、よしぽ(@yspo107)です。
今回は、AWSのNetwork Firewallを使って「Windows Update専用の通信を許可するファイアウォール」を、CloudFormationで構築する方法をわかりやすく解説します。
「VPC内のサーバからインターネットにWindows Updateだけ許可したい」って場合に使えます。
プロキシサーバを立てるのもアリですが、運用やセキュリティを考えるとちょっと大変…。そんな時に便利なのが、AWS Network Firewallです。
今回は、以下のCFnテンプレートをベースに解説していきます。
全体構成イメージ
このテンプレートでは、以下3つのリソースを作成します。
リソース名 | 種類 | 役割 |
---|---|---|
StatefulRuleGroup | AWS::NetworkFirewall::RuleGroup | 通信許可ルールの定義(Windows Updateのみ許可) |
FirewallPolicy | AWS::NetworkFirewall::FirewallPolicy | ルール適用方針の定義 |
NetworkFirewall | AWS::NetworkFirewall::Firewall | 実際のファイアウォール本体 |
StatefulRuleGroup:許可する通信ルールを定義
まずは「どの通信を許可するか」を決める部分です。
AWSTemplateFormatVersion: '2010-09-09'
Description: Network Firewall for Windows Update
Resources:
StatefulRuleGroup:
Type: AWS::NetworkFirewall::RuleGroup
Properties:
RuleGroupName: "nfw-rule-01"
Type: STATEFUL
Capacity: 100
RuleGroup:
RulesSource:
RulesSourceList:
Targets:
- ".windowsupdate.microsoft.com"
- ".update.microsoft.com"
- ".windowsupdate.com"
- "download.microsoft.com"
- ".download.windowsupdate.com"
- "wustat.windows.com"
- "ntservicepack.microsoft.com"
- "go.microsoft.com"
- ".delivery.mp.microsoft.com"
TargetTypes:
- TLS_SNI
- HTTP_HOST
GeneratedRulesType: ALLOWLIST
StatefulRuleOptions:
RuleOrder: STRICT_ORDER
Description: "StatefulRuleGroup"
Tags:
- Key: Name
Value: "nfw-rule-01"
ポイント解説
- Type: STATEFUL
ステートフル型のルールを作成します。通信の状態を確認しながら制御するイメージです。 - Targets
許可するドメインをリスト化。ここではWindows Update関連ドメインのみ。 - TargetTypes
通信の識別方法を指定。TLS_SNI
とHTTP_HOST
を使ってドメインベースでフィルタリングします。 - GeneratedRulesType: ALLOWLIST
記載したドメイン「のみ」通信を許可する設定です。
FirewallPolicy:ルールの適用方針を定義
次は、このルールをどう適用するかを決めるポリシー部分。
FirewallPolicy:
Type: AWS::NetworkFirewall::FirewallPolicy
Properties:
FirewallPolicyName: "nfw-policy"
FirewallPolicy:
StatelessDefaultActions:
- aws:forward_to_sfe
StatelessFragmentDefaultActions:
- aws:forward_to_sfe
StatefulEngineOptions:
RuleOrder: STRICT_ORDER
StreamExceptionPolicy: DROP
StatefulDefaultActions:
- aws:drop_established
StatefulRuleGroupReferences:
- ResourceArn: !Ref StatefulRuleGroup
Priority: 1
Description: "Firewall policy"
Tags:
- Key: Name
Value: "nfw-policy"
ポイント解説
- StatelessDefaultActions
ステートレス通信はすべて内部エンジン(SFE)に転送。今回は主にステートフルを使います。 - StatefulRuleGroupReferences
先ほど作ったStatefulRuleGroupをここで参照して適用。 - Priority: 1
複数ルールがある場合の優先順位ですが、今回は1つだけなのでシンプルです。
NetworkFirewall:ファイアウォール本体の配置
最後に、VPC上にファイアウォールを設置します。
NetworkFirewall:
Type: AWS::NetworkFirewall::Firewall
Properties:
FirewallName: "nfw"
FirewallPolicyArn: !Ref FirewallPolicy
VpcId: "vpc-05063dce35f3c5299"
SubnetMappings:
- SubnetId: "subnet-05087026f7e8d56cf"
DeleteProtection: false
SubnetChangeProtection: false
FirewallPolicyChangeProtection: false
Description: "Network Firewall"
Tags:
- Key: Name
Value: "nfw"
ポイント解説
- VpcId / SubnetMappings
ファイアウォールをどのVPC・サブネットに配置するかを指定します。
通常は「専用のサブネット」を用意して配置するのがベストプラクティスかと思われます。 - FirewallPolicyArn
先ほど作成したポリシーを紐づけます。 - 各種Protection設定
今回は全てfalse
にして、削除や変更を許可しています。
注意点と補足
- ドメインフィルタリングの限界
NFWはL7レベルでのフィルタリングが可能ですが、IP直指定の通信は許可される可能性があります。Windows Updateは頻繁にIPが変わるので、ドメインベースが有効ですが、完璧ではありません。 - ルーティング設定が必要
NFWを有効に機能させるには、ルートテーブルでトラフィックをファイアウォール経由にする設定が別途必要です。
まとめ
このテンプレートを使えば、Windows Update専用の通信許可ファイアウォールが簡単に作成できます。
「最小限の通信だけ許可したい」というセキュリティ要件に対応可能です。
プロキシサーバの構築・運用が不要になるので、AWS Network Firewallの活用も検討してみてください。以上!
おまけ:構築結果
StatefulRuleGroup

FirewallPolicy

NetworkFirewall

コメント