はじめに
突然ですが、AWSのファイアウォール機能である「ネットワークACL」と「セキュリティグループ」の違いは分かりますか?
正直私はこの2つの使い分けがよく分かっていませんでした。
そこで今回は、「ネットワークACL」と「セキュリティグループ」の違いについて解説しようと思います。
「ネットワークACL」と「セキュリティグループ」の違いについて解説する前に、まずはそれぞれがどのような機能なのかを簡単に解説します。
ネットワークACLとは
ネットワークACLをざっくり解説すると
・サブネット単位で全インスタンスに適用するファイアウォール機能
・サブネットを出入りする通信を制御することのできるサービス
となります。
ネットワークACLのルールの設定について
ネットワークACLは許可拒否の両方設定ができることが特徴です。
許可と拒否の両方のルールを設定することで、より細かいカスタマイズが可能になります。
ネットワークACLの役割を少しイメージをしやすくするため、空港の入国審査に例えてみましょう!
ネットワークACLは、入国審査員のような役割をしていますね。
入ってくるトラフィック(通信)に対して、ルールを確認して、入って問題ない通信かを確認します!
上記は入国を例にしていますが、出国についても同様です。
通信先が通信ルールで拒否されていないかを確認して、拒否されていなかったらアウトバウンド通信を通す・拒否されていたらアウトバウンド通信を通さないというような感じです。
拒否ルールの場合をイラストで表すと、こんな感じです。
上記のイラストの例では、
・サブネットAは、TCPポート25へのアウトバウンド通信を拒否
・サブネットBは、TCPポート25へのインバウンド通信を拒否
というようなルール設定がされています。
これは会社のルールに例えると分かりやすいかもしれません。
会社には全体の社内ルールのようなものがありますよね。そのルールに従って、各部署で仕事をするかと思います。
・パソコンの持ち出しは禁止(拒否のルール)
・リモートワークは禁止(拒否のルール)
・夏のジャケット着用はしなくていい(許可のルール)
上記のようないくつかのルールが集まって、社内ルールになりますが、
ネットワークACLはまさにこの会社全体のルールにあたります。
ネットワークACLの評価の特徴
次に、ネットワークACLの評価に関する特徴を見ていきましょう。
特徴は以下の2点があります。
①ルールに序列があり優先度がある
②ステートレス・インスペクション型である
①から解説していきます。
①ルールに序列があり優先度がある
ネットワークACLは、ルールに序列があり優先度があります。
番号の低いルールから順番に評価され、マッチした時点でそのルールが適用されます。
ルールが適用された時点で、それ以降のルールは評価がされなくなります。
先ほど例えた入国審査のイメージに例えると以下のようなイメージです。
入国審査官は、入ってきた通信(トラフィック)がどのルールに適用するかを上から順番に評価していきます。マッチした時点で適用が完了します。
②ステートレス・インスペクション型である
続いて②の特徴についてです。
ネットワークACLは、ステートレス・インスペクション型と言われ、アウトバウンド通信とインバウンド通信のルールをそれぞれ設定する必要があります。
まずは、アウトバウンド通信とインバウンドの通信について解説します。
・アウトバウンド通信=コンピュータやシステムから外に向かって出ていく通信
・インバウンド通信=外部から、コンピュータやシステムに向かって入ってくる通信
私たちがなにかサイトを見たい時は、検索エンジンを使って検索をしますよね。
Web上にあるサーバーから結果が返ってきて、サイトが見れるようになります。
サーバー側から見ると、アウトバウンド通信で私たちのサイトページを送ってくれます。
一方で私たちは、その送られてきたサイトページを受け取ります。これがインバウンド通信です。
通信というのは、基本的に以下の「要求」と「レスポンス」の連続で成り立っています。
つまり、アウトバウンド通信とインバウンド通信の往復があることが一般的なのです。
話を戻すと、ネットワークACLは、このアウトバウンド通信とインバウンド通信の両方のルールを設定する必要があります。
少しカタカナが多くて難しいイメージですが、そういったルールの設定の仕方を「ステートレス・インスペクション型」というように覚えておきましょう!
ステートとは「状態」を意味します。
よってステートレスは「状態がない」という意味になります。
ステートレスなやり取りにおいては、「他の範囲の設定情報が保持されない」というように覚えておくと分かりやすいかもしれません。
セキュリティグループとは
セキュリティグループをざっくり解説すると、
・EC2単位で適用するファイアウォール機能
・EC2を出入りするトラフィックを制御することのできるサービス
となります。
セキュリティグループのルールの設定について
ネットワークACLは、許可のルール・拒否のルールの両方を設定できましたが、セキュリティグループは定義した通信のみを許可する「ホワイトリスト形式」となります。
つまり設定した通信のみ許可し、それ以外の通信は全て拒否します。
イメージとしては、SNSなどの友達リストをイメージしてもらえればいいでしょう。友達リストにある人とのみ連絡が取れるようなイメージです。
AWSのサービスを用いて、さらに具体的に解説します。
下記の図の左のEC2と真ん中のEC2には、「TCPポート22からのソースIPアドレスが10.0.0.1/32のインバウンド通信を許可する」というルールが設定されています。
そのため、インバウンド通信が許可されます。
一方、右のEC2については、「TCPポート22からのソースIPアドレスが10.0.0.1/32のインバウンド通信を許可する」というルールが設定されていませんので、インバウンド通信は許可されていません。
許可設定のイメージ▼
上記のように許可ルールに設定している範囲では、通信ができるようになります。
ではここで、より広い範囲でルールを設定してみた場合どうなるでしょうか?
仮に全てのセキュリティグループで、
「TCPポート22からのソースIPアドレスが0.0.0.0/0のインバウンドアクセスを許可する」
というルールを設定した場合、通信は以下のようになります。
先ほどまで、右のEC2については、TCPポート22からのソースIPアドレスが10.0.0.1/32のインバウンド通信は許可されていませんでしたが、より広い範囲の通信(0.0.0.0/0)を許可することで、狭い範囲の通信も許可することになります。
セキュリティグループは累積的に判断されるので、より広い範囲で通信の許可がされれば、狭い範囲も許可となります!
許可設定のイメージ▼
セキュリティグループの評価の特徴
セキュリティグループの役割についてざっくり理解ができかと思います。
では次に、セキュリティグループの評価に関する特徴を見ていきましょう。
特徴は以下の2点があります。
①セキュリティグループは全てのルールを評価
②セキュリティグループは、ステートフル・インスペクション型
①セキュリティグループは全てのルールを評価
①から解説していきます。
セキュリティグループは、全てのルールを評価します。
セキュリティグループは、定義した通信のみを許可する「ホワイトリスト形式」でしたね。
つまり、ルールとして定義されているものは全て適用し、定義がないものは全て拒否されてしまいます。
②セキュリティグループは、ステートフル・インスペクション型
続いて②について解説します。
セキュリティグループは、ステートフル・インスペクション型と言われ、アウトバウンドの通信の設定をすれば、インバウンド通信の設定は不要となります。
ネットワークACLは、アウトバウンドとインバウンドの両方のルール設定が必要なステートレス・インスペクション型でしたが、セキュリティグループは、アウトバウンドのルール設定のみで良いのです。
アウトバウンドで通信が許可された場合、戻りのインバウンドの通信は自動的に許可されます。
ネットワークACLとセキュリティグループの違い
ここからは2つの機能の違いについて見ていきましょう。分かりやすく表にまとめると以下のようになります。
項目の「範囲」から分かる通り、ネットワークACLはサブネット全体に対して設定するルールのため、影響範囲が大きく、セキュリティグループよりも先に判定されることになります。
つまり、インスタンス単位で動作するセキュリティグループで細かな設定をしていたとしても、
ネットワークACLで拒否しているトラフィックはそもそもインスタンスに到達することができないため注意が必要です。
以下の例は少し極端ですが、分かりやすくお伝えするための設定となります。
仮にセキュリティグループで「TCPポート80 からのトラフィックを許可」にしている場合でも、ネットワークACLで「全てのトラフィックを拒否」にした場合、セキュリティグループのルールは適用されず、より広い範囲のネットワークACLのルールが適用されます。
例えば、あるグループ会社にある子会社A・子会社B・子会社Cがとあるルールを適用して業務を行おうとしても、親会社が拒否のルールを出すことで、子会社もそのルールに従わなくてはいけないということです。
基本的な使い分けとしては、細かい単位で設定できるセキュリティグループで制御し、ネットワークACLは全開放とする場合が多いです。
AWSの見解としても、「セキュリティグループのみを使用してインスタンスを保護できます。ただし、ネットワーク ACL は追加の防御レイヤーとして追加できます。」とドキュメント内で明言しています。
セキュリティグループのみを使用してインスタンスを保護できます。ただし、ネットワーク ACL は追加の防御レイヤーとして追加できます。
出典元:ユーザーガイド | AWS
厳しいトラフィック要件が存在する場合や、サブネット単位で特定のIPアドレスを拒否したい場合はブラックリスト方式で拒否できるネットワークACLの利用が効果的な場合もあります。
ただし運用面の負荷が上がり、両方の設定をより深く理解する必要があるため、導入の必要があるのかよく検討することがおすすめです。
まとめ
ここまで、ネットワークACLとセキュリティグループの主要機能・違いについて解説しました。
ネットワークACLは、サブネット単位で全インスタンスに適用するファイアウォール機能。
セキュリティグループは、EC2単位で適用するファイアウォール機能でした。
要件にあわせて、上手に活用していきましょう。