Agent Grow Tech Notes
🙄

VPCのセキュリティ対策:セキュリティグループとネットワークACL

に公開

1.はじめに

最近、AWSソリューションアーキテクトの資格を取ろうと思い、
実機を触りながら勉強を実施しています。

その中で、何の分野においても必ず存在する
「似ているけど違うもの」を見つけて困惑したので
備忘の意味も込めて、記事にまとめました。

2.セキュリティグループとネットワークACL

AWSのVPC(Virtual Private Cloud)では、ネットワークのセキュリティ対策として
以下の2つの仕組みが用意されています。

・セキュリティグループ
・ネットワークACL(アクセスコントロールリスト)

この2つは似ていますが、役割や使い方、適用範囲に明確な違いがあることが分かりました。

3.セキュリティグループ

セキュリティグループは、主にEC2インスタンスなどリソース単位に
適用する仮想ファイアウォールです。

セキュリティグループの特徴は以下になります。

  1. ステートフル
  2. 許可のみを設定可能(拒否ルールは定義不可)
  3. インスタンスごとに、複数のセキュリティグループをアタッチ可能

3-1.ステートフル

ステートフルとは、一方向を許可すれば、対応する逆方向の通信も自動的に許可されるということ。
図で表すと、こんなイメージです。

ステートフルの場合、インバウンド通信を許可することで、アウトバウンド通信も許可されます。

3-2.許可のみを設定可能

セキュリティグループのデフォルト設定は、以下の通りです。

・インバウンド(受信) :全て拒否
・アウトバウンド(送信):全て許可

そのため、インバウンドルールで許可設定を追加してあげることで
通信が可能となります。

3-3.複数のセキュリティグループをアタッチ可能

複数のセキュリティグループをアタッチできるため、
目的毎にセキュリティグループを作成して、必要に応じてアタッチすることができます。

例えば、以下の2つのセキュリティグループを作成したとします。
SG001:HTTPアクセス(TCP:80)を許可する
SG002:SSHアクセス(TCP:22)を許可する
  

そして、あるEC2インスタンス(EC2_01)にはHTTPアクセスとSSHアクセスの両方が必要で、
別のEC2インスタンス(EC2_02)にはSSHのみアクセスが必要な場合、
以下のようにセキュリティグループをアタッチしてあげることで実現が可能です。

4.ネットワークACL

ネットワークACLは、VPCのサブネット単位で適用されるアクセス制御リストです。

ネットワークACLの特徴は以下になります。

  1. ステートレス
  2. サブネットに関連付けられ、複数のインスタンスに影響
  3. ルールは番号順に評価

4-1.ステートレス

ステートレスとは、先ほどのセキュリティグループ(ステートフル)とは逆で
インバウンドで許可しても、アウトバウンドは別途許可が必要ということ。

図で表すと、こんなイメージです。

ステートレスでは、インバウンド通信を許可しても、アウトバウンド通信が許可されていません。
以下の図のように、アウトバウンド通信を許可して初めて、アウトバウンド通信が可能になります。

4-2.サブネットに関連付けられ、複数のインスタンスに影響

インスタンス毎に設定していたセキュリティグループと違い、
ネットワークACLでは、VPCのサブネット単位でルールを適用します。

そのため、サブネット上に複数のインスタンスが存在した場合、
すべてのインスタンスがネットワークACLの影響を受けることになります。
 

4-3.ルールは番号順に評価

ネットワークACLのルール一つずつに番号を割り当て、
通信の際に若い番号から評価します。
 
一致したルールを見つけた時点で、そのアクション(ALLOW / DENY)が適用され、
残りのルールは無視されます。

例えば、192.168.1.0/24からのHTTP通信だけを許可したい場合は
以下のようにルールを作成します。

192.168.1.0/24からのHTTP通信が来た際、
ルール番号100で、ルールが一致するため、通信が許可されます。
そしてルール番号110移行は、無視されます。

もし、ルール番号100と110が逆になると、以下のようなルールになります。
 

この場合で、192.168.1.0/24からのHTTP通信が来た場合
ルール番号100で、ルールが一致してしまうため、通信が拒否されます。

5.セキュリティグループとネットワークACLのまとめ

セキュリティグループとネットワークACLの違いを以下の表にまとめました。

6.ユースケース

セキュリティグループとネットワークACL両方を使うパターンを自分なりに考えてみました。

EC2インスタンス(EC2_01)は、以下の接続要件。
・SSH接続(TCP:22)は社内からのアクセスのみを許可
・HTTP接続(TCP:80)は誰でもアクセス許可

EC2インスタンス(EC2_02)は、以下の接続要件。
・SSH接続(TCP:22)は社内からのアクセスのみを許可
・HTTP接続(TCP:80)は許可しない

社内ネットワークを192.168.1.0/24とすると
セキュリティグループとネットワークACLの設定は以下のようになります。

・セキュリティグループ

・ネットワークACL

それらを設定した場合の通信経路の図が以下になります。

7.まとめ

セキュリティグループとネットワークACLの違いや使い分けを整理することで、
VPC設計の理解が深まったと思います。
特に、ステートフル/ステートレスの違いや、評価順の考え方は実機で触れると腑に落ちました。
また、知識の整理にもなり、今後の設計・試験対策の土台として活かしていきたいです。

最後まで読んでいただきありがとうございます!

Agent Grow Tech Notes
Agent Grow Tech Notes

Discussion