読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

おっさんになっても、プログラマでありつづけたい

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

aws ec2

 前回、ブラックリスト型ファイヤーウォールとしてネットワークACL(NetworkACL)を紹介しました。セキュリティグループとの役割の違いが解り難いところがあるので、改めて整理してみたいと思います。

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



 まずセキュリティグループとネットワーク ACLの違いは何でしょうか?これは、公式のドキュメントに表形式でまとめられていて非常に解りやすいので、是非一度見て頂ければと思います。表を転載すると以下の通りです。

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


 大事なポイントは、2点です。セキュリティグループがインスタンスレベルで動作するのに対して、ネットワークACLはサブネットレベルで動作します。そして、セキュリティグループはルールの許可のみ(ホワイトリスト式)サポートされているのに対して、ネットワークACLは拒否(ブラックリスト式)にも対応しています。動作レベルの所は、クラスメソッドさんのブログが解りやすいです。リスペクトして、自分なりの理解を図式化してみました。

ネットワークACLの注意点



 ネットワークACLの注意点としては、エフェメラルポートの扱いです。アウトバンド(AWSからインターネット)の通信に対して、クライアントからの通信の帰りに対してランダムで割り当てられるポートを開放する必要があります。OSごとに利用されるポートが違うので現実的には1024 - 65535を開放する必要があります。ちなみにEphemeralの意味を正確には知らなかったので、alcで調べてみました。物の哀れということですね。

1.つかの間の、一時的な、刹那の、はかない
・Does love last forever or is it ephemeral? : 愛は永遠に続くのか、それともはかないのだろうか。
2.〔動植物が〕1日しか生きられない、1日の命の

 また、ブラックリスト型Firewallとして利用する場合は、ネットワークACLの登録上限に注意が必要のようです。具体的な上限数については、公式の資料で見つけられていないのでサポートに聞いてみようと思っています。(公開情報だった場合は、記載します)

まとめ



 ネットワークACLとセキュリティグループは、用途によって使い分けすると非常に有効だと思います。AllowをセキュリティグループでDenyをネットワークACLにするといった方法や、外部からの通信は全てネットワークACLで制御するなど色々方法はあります。特性を理解の上で、どう使うのか考えてみましょう。


参照:
AWSでブラックリスト型のFirewallを実装する。〜BlackList Firewallパターン〜


See Also:
VPC のセキュリティ - Amazon Virtual Private Cloud
Amazon VPCのネットワークACLについて | Developers.IO