« ^ »

AWS VPCのネットワークACLに許可(Allow)と拒否(Deny)のルールが共存する理由

所要時間: 約 1分

AWSのVPCには、 Network ACL という機能があり、通過する通信に対して、許可または拒否を設定できる。見ると以下のように全ての通信に対して、許可(Allow)と拒否(Deny)の両方を設定している事がある。特に珍しいものでもなく、良く見る設定だろう。これはどういう意味になるのか確認する事にした。

インバウンド

Rule numberTypeProtocolPortrange送信元Allow/Deny
1AlltrafficAllAll0.0.0.0/0Allow
*AlltrafficAllAll0.0.0.0/0Deny

アウトバウンド

Rule numberTypeProtocolPortrange宛先Allow/Deny
2AlltrafficAllAll0.0.0.0/0Allow
*AlltrafficAllAll0.0.0.0/0Deny

一見許可と拒否が矛盾しているようにも見えるが、これは最初のルールによって通信が許可(Allow)される。拒否(Deny)されるルール番号は * となっている。これは、他のルールが適応されなかった場合に適応される。 * 拒否ルールは「フォールバック」として機能し、明示的に許可されたトラフィック以外はすべて拒否される挙動となる。正しく設定する事で必要な通信のみを許可し、未知の脆弱な通信を防ぐ事ができる。