【AWS Network Firewall】CloudFormationでWindows Updateのドメインのみを許可するファイアウォールを構築してみた

こんにちは、よしぽ(@yspo107)です。

今回は、AWSのNetwork Firewallを使って「Windows Update専用の通信を許可するファイアウォール」を、CloudFormationで構築する方法をわかりやすく解説します。

「VPC内のサーバからインターネットにWindows Updateだけ許可したい」って場合に使えます。

プロキシサーバを立てるのもアリですが、運用やセキュリティを考えるとちょっと大変…。そんな時に便利なのが、AWS Network Firewallです。

今回は、以下のCFnテンプレートをベースに解説していきます。


全体構成イメージ

このテンプレートでは、以下3つのリソースを作成します。

リソース名種類役割
StatefulRuleGroupAWS::NetworkFirewall::RuleGroup通信許可ルールの定義(Windows Updateのみ許可)
FirewallPolicyAWS::NetworkFirewall::FirewallPolicyルール適用方針の定義
NetworkFirewallAWS::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_SNIHTTP_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

コメント

タイトルとURLをコピーしました