【AWS】Security GroupとNACLの違いとは?ステートフル・ステートレスを初心者向けに解説

  • URLをコピーしました!

前の記事では、 NAT Gatewayを利用して プライベートサブネットからインターネットへ通信する仕組みを学びました。

ここまでで、 VPC・サブネット・ルートテーブル・IGW・NAT Gatewayを使った 「通信経路」がかなり見えるようになってきました。

PRIVATE EC2 EC2
NAT NAT Gateway
GATEWAY IGW
DESTINATION Internet

しかし、通信経路が存在しているからといって、 すべての通信を自由に通してよいわけではありません。

「どの通信を許可するのか?」
「どの通信を拒否するのか?」

AWSでは、このようなネットワークアクセス制御に Security Group(セキュリティグループ)Network ACL(NACL) という2つの仕組みを利用できます。

☁ AWS INTERMEDIATE

この記事はAWS中級講座のレッスン6です。 Security GroupとNACLによる VPCのアクセス制御を学びます。

AWS中級講座を見る →
LESSON GOAL この記事のゴール

Security GroupとNACLの違いを理解し、 「どこで通信を制御するのか」「Stateful / Statelessの違い」 を説明できるようになることを目指します。

目次

まずはSecurity GroupとNACLの違いを整理しよう

Security GroupとNACLは、 どちらもVPC内の通信を制御する仕組みです。

最初に大きな違いを整理すると、 次のようになります。

SECURITY GROUP リソースレベル

EC2などに関連付けて
通信を制御

VS
NETWORK ACL サブネットレベル

サブネットへの出入りを
まとめて制御

SECURITY GROUP リソースを守る
NETWORK ACL サブネットを守る

Security Groupとは?

Security Groupは、 EC2などのAWSリソースに関連付けて 通信を制御する仕組みです。

SOURCE Internet
SECURITY GROUP TCP / 443 ALLOW
RESOURCE EC2

たとえばWebサーバーとしてEC2を利用している場合、 HTTPS通信だけを許可したいのであれば、 次のようなインバウンドルールを設定できます。

Protocol Port Source
TCP 443 0.0.0.0/0

これによって、 インターネットからEC2への HTTPS通信を許可できます。

InboundとOutbound

Security Groupには、 Inbound RuleOutbound Rule があります。

INBOUND 外 → リソース

EC2などへ入ってくる 通信を制御

OUTBOUND リソース → 外

EC2などから出ていく 通信を制御

Inbound = 入ってくる通信
Outbound = 出ていく通信

Security GroupはAllowルールのみ

Security Groupを理解するときに重要なのが、 許可(Allow)ルールのみ設定できる という特徴です。

ALLOW TCP / 443
× DENY 203.0.113.10

つまりSecurity Groupに、

203.0.113.10/32 → DENY

のような明示的な拒否ルールを作成することはできません。

必要な通信だけをAllowする という考え方でアクセスを制御します。

Security Groupはステートフル

Security Groupの非常に重要な特徴が、 Stateful(ステートフル) であることです。

ステートフルとは、 通信の状態を記憶する と考えると分かりやすいでしょう。

CLIENT User
HTTPS : 443 → ← Response
SERVER EC2

ユーザーからEC2へのHTTPS通信が Security Groupによって許可された場合、 その通信に対する戻り通信は自動的に許可されます。

STATEFUL 行きの通信を覚えているため、 その通信に対する戻りは自動的に許可

Network ACL(NACL)とは?

Network ACL(NACL)は、 サブネットへ出入りする通信を制御する仕組みです。

Security Groupがリソースレベルで動作するのに対し、 NACLはサブネットレベルで動作します。

VPC
NETWORK ACL
SUBNET
EC2
EC2

NACLが関連付けられているサブネットでは、 サブネットへ入る通信と、 サブネットから出ていく通信が NACLのルールによって評価されます。

Security GroupとNACLは二重の防御になる

Security GroupとNACLは、 どちらか一方しか使えないわけではありません。

異なるレベルで通信を制御することで、 複数の防御レイヤーを構成できます。

SOURCE Internet
SUBNET LEVEL Network ACL
RESOURCE LEVEL Security Group
RESOURCE EC2
NETWORK ACL サブネット境界

サブネット全体に対して 大きく通信を制御

SECURITY GROUP リソース境界

個々のリソースに必要な 通信を細かく許可

NACLはAllowとDenyの両方を設定できる

NACLではSecurity Groupと異なり、 AllowとDenyの両方 を設定できます。

ALLOW 許可
× DENY 拒否

たとえば、 特定のIPアドレスからの通信を サブネットレベルで明示的に拒否したい場合、

203.0.113.10/32 → DENY

というNACLルールを設定できます。

NACLはルール番号の小さい順に評価される

NACLには、 それぞれのルールに ルール番号があります。

そして、 番号の小さいルールから順番に評価 され、最初に一致したルールが適用されます。

Rule Source Action
100 203.0.113.10/32 DENY
200 0.0.0.0/0 ALLOW

203.0.113.10から通信が来た場合、 最初にルール100へ一致します。

そのため、 後ろにルール200のALLOWが存在していても、 ルール100のDENYが適用されます。

IMPORTANT NACLはルール番号の小さい順に確認する

NACLはステートレス

Security Groupとの最大の違いの1つが、 NACLは Stateless(ステートレス) であることです。

ステートレスでは、 通信の状態を記憶しません。

CLIENT User
Request → CHECK ← Response CHECK
SERVER EC2

行きの通信を許可したとしても、 その戻り通信が自動的に許可されるわけではありません。

InboundとOutboundをそれぞれ独立した通信として評価 します。

STATELESS 行きの通信を覚えていないため、 戻り通信もルールによる許可が必要

ステートフルとステートレスの違い

ここはSecurity GroupとNACLを理解するうえで、 もっとも重要なポイントです。

Security Group NACL
状態 Stateful Stateless
通信状態 記憶する 記憶しない
戻り通信 自動的に許可 ルールで許可が必要
MUST REMEMBER Security Group = Stateful Network ACL = Stateless

Security GroupとNACLの違いを一覧で比較

項目 Security Group NACL
適用レベル リソース サブネット
状態 Stateful Stateless
ルール Allowのみ Allow / Deny
戻り通信 自動許可 明示的な許可が必要
ルール評価 すべてのルールを評価 番号の小さい順

理解度チェック:どちらを使う?

次の要件では、 Security GroupとNACLのどちらが適しているでしょうか。

REQUIREMENT サブネット全体に対して、
203.0.113.10/32からの通信を明示的に拒否したい
どちらか選択してください

適用範囲とAllow / Denyの違いを思い出してみましょう。

通信がEC2へ届くまでを追ってみよう

インターネットからEC2へHTTPS通信が届く場合を考えてみます。

01 Internet

HTTPS通信を送信

02 NACL

Subnet境界で確認

03 Security Group

Resource側で確認

04 EC2

通信が到達

PACKET TCP 203.0.113.20:50001 → 10.0.1.10:443

この通信が成立するには、 通信経路だけでなく、 NACLやSecurity Groupでも 必要な通信が許可されている必要があります。

基本はSecurity Groupを中心に考える

Security GroupとNACLの両方があると、 「常に両方を細かく設定しなければならないのか?」 と思うかもしれません。

基本的には、 Security Groupを中心にアクセス制御を行い、 必要に応じてNACLを追加の防御レイヤーとして利用する と考えると分かりやすいでしょう。

PRIMARY Security Group

リソースごとに 必要な通信だけを許可

ADDITIONAL LAYER Network ACL

必要に応じて サブネット単位で制御

次は「インターネットを経由しないAWSサービスへの接続」へ

ここまでで、 VPCのネットワーク構成と アクセス制御について学んできました。

01 Subnet
02 Route
03 IGW / NAT
04 SG / NACL

では、VPC内のEC2から Amazon S3などのAWSサービスへアクセスするとき、 必ずインターネットやNAT Gatewayを経由する必要があるのでしょうか。

そこで登場するのが、 VPC Endpointです。

NEXT CONCEPT VPC Endpoint

次の記事では、 Gateway型とInterface型の違いと、 AWSサービスへプライベートに接続する仕組みを学びます。

確認問題:Security GroupとNACL

QUESTION 01

Security Groupの特徴として正しいものはどれですか?

正解:A

Security GroupはStatefulです。 許可された通信に対する戻り通信は 自動的に許可されます。

QUESTION 02

NACLの適用レベルとして正しいものはどれですか?

正解:B

NACLはサブネットレベルで動作し、 サブネットへ出入りする通信を制御します。

QUESTION 03

NACLのルール評価として正しいものはどれですか?

正解:C

NACLはルール番号の小さい順に評価し、 最初に一致したルールを適用します。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

Security Groupは リソースレベルで通信を制御する

02

NACLは サブネットレベルで通信を制御する

03

Security Groupは Statefulで戻り通信を自動的に許可する

04

NACLは Statelessで戻り通信もルールによる許可が必要

05

Security Groupは Allowルールのみ

06

NACLは Allow / Denyの両方を設定できる

07

NACLは ルール番号の小さい順に評価する

NEXT LESSON AWS INTERMEDIATE 07

VPC EndpointのGateway型とInterface型を理解する

ここまでで、 VPC内の通信経路と Security Group・NACLによるアクセス制御を学びました。

次は、 インターネットを経由せずにAWSサービスへ接続する仕組み について学びます。

VPC Endpointの Gateway型とInterface型の違い を整理していきましょう。

VPC EndpointのGateway型とInterface型を理解する
AWS INTERMEDIATE

AWS中級講座へ戻る

AWS中級講座の記事一覧から、 学習したいレッスンを確認できます。

← AWS中級講座へ戻る
目次