Network ACL のプロトコル許可範囲を確認

Network ACL では、実際に必要なプロトコルと通信範囲だけを許可してください。

説明

Network ACL の許可ルールで Protocol: -1 を指定すると、対象の方向と CIDR にすべてのプロトコルを許可し、PortRange でポートを制限できません。特定のサービスだけを許可する場合は、必要なプロトコルとポートを指定してください。

TCP、UDP、ICMP 以外の標準プロトコルにも正当な用途があります。番号だけで危険と判断せず、許可・拒否の動作、方向、CIDR、適用順序を確認してください。すべてのプロトコルを対象とする拒否ルールは、全面的な許可とは異なります。

想定される影響

  • 広い受信許可は、他のネットワーク条件も満たす場合に、不要なサービスへのアクセスを許す可能性があります。
  • 広い送信許可は、侵害されたリソースが外部と通信したり、データを送信したりする機会を増やすおそれがあります。

対処方法

  • 必要なプロトコル番号を指定し、TCP・UDP のポート、または ICMP のタイプ・コードを用途に合わせて制限してください。
  • 送信元・宛先 CIDR と適用順序を確認し、必要な場合にだけ全プロトコルの許可を残してください。
  • NACL はステートレスなので、応答通信も別途許可する必要があります。実際の接続を試験しながら変更してください。

例

MyNacl と応答通信のルールは省略しています。以下は送信ルールの比較です。

変更前

yaml
Resources:
  OutboundRule:
    Type: AWS::EC2::NetworkAclEntry
    Properties:
      NetworkAclId: !Ref MyNacl
      RuleNumber: 100
      Protocol: -1
      Egress: true
      RuleAction: allow
      CidrBlock: 0.0.0.0/0

すべての IPv4 宛先に全プロトコルを許可する送信ルールです。実際の通信にはルーティングなどの条件も必要です。

変更後

yaml
Resources:
  OutboundRule:
    Type: AWS::EC2::NetworkAclEntry
    Properties:
      NetworkAclId: !Ref MyNacl
      RuleNumber: 100
      Protocol: 6
      Egress: true
      RuleAction: allow
      CidrBlock: 172.16.0.0/24
      PortRange:
        From: 443
        To: 443

このルールの許可を 172.16.0.0/24 宛ての TCP 443 に制限します。実際に必要な宛先か確認し、他のルールの許可範囲も確認してください。

参考資料