AWSのVPCには、 Network ACL
という機能があり、通過する通信に対して、許可または拒否を設定できる。見ると以下のように全ての通信に対して、許可(Allow)と拒否(Deny)の両方を設定している事がある。特に珍しいものでもなく、良く見る設定だろう。これはどういう意味になるのか確認する事にした。
インバウンド
Rule number | Type | Protocol | Port | range | 送信元 | Allow/Deny |
---|---|---|---|---|---|---|
1 | All | traffic | All | All | 0.0.0.0/0 | Allow |
* | All | traffic | All | All | 0.0.0.0/0 | Deny |
アウトバウンド
Rule number | Type | Protocol | Port | range | 宛先 | Allow/Deny |
---|---|---|---|---|---|---|
2 | All | traffic | All | All | 0.0.0.0/0 | Allow |
* | All | traffic | All | All | 0.0.0.0/0 | Deny |
一見許可と拒否が矛盾しているようにも見えるが、これは最初のルールによって通信が許可(Allow)される。拒否(Deny)されるルール番号は *
となっている。これは、他のルールが適応されなかった場合に適応される。 *
拒否ルールは「フォールバック」として機能し、明示的に許可されたトラフィック以外はすべて拒否される挙動となる。正しく設定する事で必要な通信のみを許可し、未知の脆弱な通信を防ぐ事ができる。