ネットワーク ACL とセキュリティグループの違い
ネットワーク ACL とセキュリティグループはどちらも NW レベル (IP, TCP/UDP レベル) で通信を許可 or 拒否する仕組みです。
この記事ではこの 2 つの違いや優先度を解説していきます。
ネットワーク ACL はサブネットに適用され、セキュリティグループは EC2 等のインスタンスにセットされます。以下の図ではその様子を表しています。ネットワーク ACL で制御されるタイミングを青丸、セキュリティグループで制御されるタイミングを赤丸で示しています。
図にある通り、ネットワーク ACL は通信の往復の両方に適用されますが、セキュリティグループは往路のみに適用されます。復路については動的に許可 (開放) されます。
往路と復路の識別は、TCP の場合は TCP コネクションの方向で識別し、UDP の場合は擬似コネクションという形で、UDP の宛先ポート/送信元ポートの組み合わせで識別します。このような復路を動的に許可する仕組みを「ステートフル・インスペクション」と呼びます。ステートフルとステートレスは使うレイヤーによって具体的な意味合いが異なります。詳細については以下を参照下さい。
ネットワーク ACL とセキュリティグループの機能比較を以下に示します。
ネットワークACL | セキュリティグループ | |
主な機能 | サブネット間を跨ぐ通信のアクセス制御 | サーバ(EC2等)との通信のアクセス制御 |
State | ステートレス(通信の復路も検査) | ステートフル(通信の復路は動的に許可) |
ルール | 許可・拒否のどちらかを指定可能 | 許可ルールのみを指定可能 |
方向 | in と out で個別にルール設定可 | in と out で個別にルール設定可 |
優先度について
先ほどの図から分かる通り、ネットワーク ACL とセキュリティグループでどちらのルールが優先というのは無いです。2 つとも設定されている場合は、両方で許可されていないと通信できません。
評価の順番について
AWS 公式ページの比較表ではネットワーク ACL のルールの評価の順序性については、
トラフィックを許可するかどうかを決めるときに、順番にルールを処理します
とあり、セキュリティグループのルールの評価については、
トラフィックを許可するかどうかを決める前に、すべてのルールを評価します
と記載されていますが、セキュリティグループは許可ルールのみを指定し、最後は暗黙の Deny なので、(ネットワーク ACLと同じように) 上から順番にルールを評価した場合と同じ結果になります。(なぜこのような書き方をしたのかは不明)
ネットワーク ACL の復路の許可ルールの必要性について
「セキュリティグループについては復路の許可設定が不要」であることを先ほど説明しましたが、ネットワーク ACL は基本的には復路の通信を考慮し、その許可設定をする必要があります。
ただし、一部のプロトコルはそもそも復路の通信が無いので、その場合は考慮不要です。具体的なプロトコルでいえば、syslog (UDP), SNMP trap, netflow/sflow 等です。
syslog は TCP を使えるものも多いので、TCP の場合は (TCP ack を返すので) 戻りの許可が必要ですが、UDP の場合は一方的に送るだけなので考慮不要です。
また、SNMP の MIB のポーリング (UDP:161) については往復しますが、Trap については一方通行です (inform という仕組みを使う場合は往復します)。
コメント
はじめまして。いつもこちらのサイトで勉強しています。
気になった箇所があるのでコメントさせて頂きます。
一枚目の写真「ネットワーク ACL とセキュリティグループ」ですが、
セキュリティグループ#2からセキュリティグループ#1への通信は
「http応答」ではないでしょうか。ご確認お願いします。
yamaさん
コメントありがとうございます。仰る通り、こちら誤植でしたので修正させて頂きました。ご指摘ありがとうございます。
今後もぜひ本サイトを宜しくお願い致します。