説明
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 に制限します。実際に必要な宛先か確認し、他のルールの許可範囲も確認してください。