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

AWSインスタンス作成時にセキュリティグループ、ネットワークACL(Access Control List)について知る機会があったのでまとめておきます。

公式サイトを引用すると以下の違いがあるようです。

セキュリティグループ ネットワークACL
インスタンスレベルで動作する サブネットレベルで動作する
許可ルールのみをサポートする 許可ルールと拒否ルールをサポートする
ステートフル: ルールに関係なく、返されたトラフィックが自動的に許可される ステートレス: 返されたトラフィックがルールによって明示的に許可される
トラフィックを許可するかどうかを決める前に、すべてのルールが評価される トラフィックを許可するかどうかを決めるときに、順番にルールが処理される
だれかがインスタンスの起動時にセキュリティグループを指定した場合、または後でセキュリティグループをインスタンスに関連付けた場合にのみ、インスタンスに適用される 関連付けられたサブネット内のすべてのインスタンスに自動的に適用される (したがって、セキュリティグループを指定するユーザーに依存する必要はありません)

セキュリティ - Amazon Virtual Private Cloud

割り当て上限

セキュリティグループ

・1つのEC2インスタンスにつき、セキュリティグループは5つまで。
・1つのセキュリティグループにはインバウンドルール60個、アウトバウンドルール60個(合計120個のルール)まで。
・上記2つの乗算が300まで。
VPCあたりのセキュリティグループが500個まで。
・リージョンでのVPCの数と、VPCあたりのセキュリティグループの乗算が10000まで。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-security-groups

ネットワークACL

・1つのVPCあたり200個まで。 ・ネットワークACLのルールは、インバウンドトラフィック(Ingress)ルールで20個まで、アウトバウンドトラフィック(Engress)ルールで20個まで。

フィルタ処理しないアドレス

セキュリティグループ、ネットワークACLともに、リンクローカルアドレス(169.254.0.0/16)やAWS予約アドレスは割り当てることができません。 CIDRブロックが10.0.0.0/24を持つサブネットの場合、以下5つは使用不可になるようです。

IPアドレス 説明
10.0.0.0 ネットワークアドレス
10.0.0.1 VPCルータ用
10.0.0.2 DNSサーバー用
10.0.0.3 将来の利用のため
10.0.0.255 ネットワークブロードキャスト用