AWS

【図解/AWS】ネットワークACLとセキュリティグループの違いと優先度、復路の制御について〜

ネットワーク ACL とセキュリティグループの違い

ネットワーク ACLセキュリティグループはどちらも NW レベル (IP, TCP/UDP レベル) で通信を許可 or 拒否する仕組みです。

この記事ではこの 2 つの違いや優先度を解説していきます。

ネットワーク ACL はサブネットに適用され、セキュリティグループは EC2 等のインスタンスにセットされます。以下の図ではその様子を表しています。ネットワーク ACL で制御されるタイミングを青丸、セキュリティグループで制御されるタイミングを赤丸で示しています。

図にある通り、ネットワーク ACL は通信の往復の両方に適用されますが、セキュリティグループは往路のみに適用されます。復路については動的に許可 (開放) されます。

往路と復路の識別は、TCP の場合は TCP コネクションの方向で識別し、UDP の場合は擬似コネクションという形で、UDP の宛先ポート/送信元ポートの組み合わせで識別します。このような復路を動的に許可する仕組みを「ステートフル・インスペクション」と呼びます。ステートフルとステートレスは使うレイヤーによって具体的な意味合いが異なります。詳細については以下を参照下さい。

【初心者向け】ステートフル(Stateful)とステートレス(Stateless)の違い,IPv6やAWSでの考え方
ステートフルとステートレスの違いは気が利く奴か否か ステートフルとは、状況によっ...

ネットワーク 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 という仕組みを使う場合は往復します)。

コメント

  1. yama より:

    はじめまして。いつもこちらのサイトで勉強しています。
    気になった箇所があるのでコメントさせて頂きます。

    一枚目の写真「ネットワーク ACL とセキュリティグループ」ですが、
    セキュリティグループ#2からセキュリティグループ#1への通信は
    「http応答」ではないでしょうか。ご確認お願いします。

    • nesuke より:

      yamaさん
      コメントありがとうございます。仰る通り、こちら誤植でしたので修正させて頂きました。ご指摘ありがとうございます。
      今後もぜひ本サイトを宜しくお願い致します。

タイトルとURLをコピーしました