VPCのセキュリティ対策:セキュリティグループとネットワークACL
1.はじめに
最近、AWSソリューションアーキテクトの資格を取ろうと思い、
実機を触りながら勉強を実施しています。
その中で、何の分野においても必ず存在する
「似ているけど違うもの」を見つけて困惑したので
備忘の意味も込めて、記事にまとめました。
2.セキュリティグループとネットワークACL
AWSのVPC(Virtual Private Cloud)では、ネットワークのセキュリティ対策として
以下の2つの仕組みが用意されています。
・セキュリティグループ
・ネットワークACL(アクセスコントロールリスト)
この2つは似ていますが、役割や使い方、適用範囲に明確な違いがあることが分かりました。
3.セキュリティグループ
セキュリティグループは、主にEC2インスタンスなどリソース単位に
適用する仮想ファイアウォールです。
セキュリティグループの特徴は以下になります。
- ステートフル
- 許可のみを設定可能(拒否ルールは定義不可)
- インスタンスごとに、複数のセキュリティグループをアタッチ可能
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の特徴は以下になります。
- ステートレス
- サブネットに関連付けられ、複数のインスタンスに影響
- ルールは番号順に評価
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設計の理解が深まったと思います。
特に、ステートフル/ステートレスの違いや、評価順の考え方は実機で触れると腑に落ちました。
また、知識の整理にもなり、今後の設計・試験対策の土台として活かしていきたいです。
最後まで読んでいただきありがとうございます!
Discussion