はじめに
AWSのリソースにトラフィック制御を設定する場合、セキュリティグループとネットワークACLを検討することになります。
ここでは、この2つのサービスと違いと使い分けについて簡単にまとめたいと思います。
セキュリティグループ(SG)
AWSの公式ドキュメントでは、セキュリティグループは以下のような説明がされています。
セキュリティグループは、関連付けられたリソースに到達できるトラフィックおよびリソースから発信できるトラフィックを制御します。例えば、セキュリティグループを EC2 インスタンスに関連付けると、インスタンスのインバウンドトラフィックとアウトバウンドトラフィックが制御されます。
引用:セキュリティグループを使用して AWS リソースへのトラフィックを制御する(https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-security-groups.html)
上記にある通り、セキュリティグループはインスタンス単位で設定します。
インスタンス単位で設定するというのが細かく制御したい場合にはメリットである一方で少し面倒に思えるかも知れません。
一般的に機能層(WebサーバやDBサーバ)ごとでインバウンドルールは同じになるケースが多いので、機能層ごとにセキュリティグループを作成します。
また、後述するネットワークACLとは異なり、ステートフル(行きの通信を許可したら戻りの通信は自動で許可される)であり許可ルールのみしか設定できない点が特徴と言えます。
これらを踏まえて、セキュリティグループの特徴は以下になります。
セキュリティグループの
- インスタンス単位で適用
- ステートフル(戻り通信は自動許可)
- 許可ルールのみ(拒否は書けない)
ネットワークアクセスコントールリスト(NACL)
AWSの公式ドキュメントでは、ネットワークACLは以下のような説明がされています。
ネットワークアクセスコントロールリスト (ACL) は、サブネットレベルで特定のインバウンドまたはアウトバウンドのトラフィックを許可または拒否します。VPC のデフォルトのネットワーク ACL を使用するか、セキュリティグループと同様のルールを使用して VPC のカスタムネットワーク ACL を作成し、セキュリティの追加レイヤーを VPC に追加できます。
引用:ネットワークアクセスコントロールリストを使用して、サブネットのトラフィックを制御する(https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-network-acls.html)
ネットワークACLはセキュリティグループと異なり、サブネット単位で設定します。
また、ステートレス(行きと戻りの両方に許可設定が必要)であり、許可と拒否を設定できることが特徴と言えます。
また、順序設定ができるため優先度の高い設定値から順にルールを当てることが可能です。
これらを踏まえて、ネットワークACLの特徴は以下になります。
- サブネット単位で適用
- ステートレス(戻り通信も明示許可が必要)
- 許可・拒否 両方書ける
- 評価順序あり(番号)
使い分け
最後に両者の簡単な使い分けをまとめます。
セキュリティグループ
向いている用途
- Web / API / DB のアクセス制御
- 「このサーバはどのリソースからアクセスできるか」を決める
具体例
- Webサーバ:
- Inbound:80/443 を 0.0.0.0/0 から許可
- DBサーバ:
- Inbound:3306 を WebサーバのSGからのみ許可
ネットワークACL
向いている用途
- 明確に 通信を遮断したいIP帯がある
- セキュリティ境界として リソース単位での制御の前に落としたい
具体例
- ある国のIPレンジを 全面拒否
- 不正アクセス元IPを サブネットレベルで遮断
まとめ
今回、セキュリティグループとネットワークACLの違いについて簡単にまとめました。
多重防御の観点から両者を使うことが推奨されています。この時、セキュリティグループをメインとし特別な要件はネットワークACLを使用するというのが基本的な使い方になると思います。
AWSのリソースにおけるトラフィック制御の基本になるので、しっかり理解して適切に活用しましょう。