前の記事では、 NAT Gatewayを利用して プライベートサブネットからインターネットへ通信する仕組みを学びました。
ここまでで、 VPC・サブネット・ルートテーブル・IGW・NAT Gatewayを使った 「通信経路」がかなり見えるようになってきました。
しかし、通信経路が存在しているからといって、 すべての通信を自由に通してよいわけではありません。
「どの通信を拒否するのか?」
AWSでは、このようなネットワークアクセス制御に Security Group(セキュリティグループ)と Network ACL(NACL) という2つの仕組みを利用できます。
Security GroupとNACLの違いを理解し、 「どこで通信を制御するのか」と 「Stateful / Statelessの違い」 を説明できるようになることを目指します。
まずはSecurity GroupとNACLの違いを整理しよう
Security GroupとNACLは、 どちらもVPC内の通信を制御する仕組みです。
最初に大きな違いを整理すると、 次のようになります。
EC2などに関連付けて
通信を制御
サブネットへの出入りを
まとめて制御
Security Groupとは?
Security Groupは、 EC2などのAWSリソースに関連付けて 通信を制御する仕組みです。
たとえばWebサーバーとしてEC2を利用している場合、 HTTPS通信だけを許可したいのであれば、 次のようなインバウンドルールを設定できます。
これによって、 インターネットからEC2への HTTPS通信を許可できます。
InboundとOutbound
Security Groupには、 Inbound Ruleと Outbound Rule があります。
EC2などへ入ってくる 通信を制御
EC2などから出ていく 通信を制御
Outbound = 出ていく通信
Security GroupはAllowルールのみ
Security Groupを理解するときに重要なのが、 許可(Allow)ルールのみ設定できる という特徴です。
つまりSecurity Groupに、
のような明示的な拒否ルールを作成することはできません。
必要な通信だけをAllowする という考え方でアクセスを制御します。
Security Groupはステートフル
Security Groupの非常に重要な特徴が、 Stateful(ステートフル) であることです。
ステートフルとは、 通信の状態を記憶する と考えると分かりやすいでしょう。
ユーザーからEC2へのHTTPS通信が Security Groupによって許可された場合、 その通信に対する戻り通信は自動的に許可されます。
Network ACL(NACL)とは?
Network ACL(NACL)は、 サブネットへ出入りする通信を制御する仕組みです。
Security Groupがリソースレベルで動作するのに対し、 NACLはサブネットレベルで動作します。
NACLが関連付けられているサブネットでは、 サブネットへ入る通信と、 サブネットから出ていく通信が NACLのルールによって評価されます。
Security GroupとNACLは二重の防御になる
Security GroupとNACLは、 どちらか一方しか使えないわけではありません。
異なるレベルで通信を制御することで、 複数の防御レイヤーを構成できます。
サブネット全体に対して 大きく通信を制御
個々のリソースに必要な 通信を細かく許可
NACLはAllowとDenyの両方を設定できる
NACLではSecurity Groupと異なり、 AllowとDenyの両方 を設定できます。
たとえば、 特定のIPアドレスからの通信を サブネットレベルで明示的に拒否したい場合、
というNACLルールを設定できます。
NACLはルール番号の小さい順に評価される
NACLには、 それぞれのルールに ルール番号があります。
そして、 番号の小さいルールから順番に評価 され、最初に一致したルールが適用されます。
203.0.113.10から通信が来た場合、 最初にルール100へ一致します。
そのため、 後ろにルール200のALLOWが存在していても、 ルール100のDENYが適用されます。
NACLはステートレス
Security Groupとの最大の違いの1つが、 NACLは Stateless(ステートレス) であることです。
ステートレスでは、 通信の状態を記憶しません。
行きの通信を許可したとしても、 その戻り通信が自動的に許可されるわけではありません。
InboundとOutboundをそれぞれ独立した通信として評価 します。
ステートフルとステートレスの違い
ここはSecurity GroupとNACLを理解するうえで、 もっとも重要なポイントです。
Security GroupとNACLの違いを一覧で比較
理解度チェック:どちらを使う?
次の要件では、 Security GroupとNACLのどちらが適しているでしょうか。
203.0.113.10/32からの通信を明示的に拒否したい
適用範囲とAllow / Denyの違いを思い出してみましょう。
通信がEC2へ届くまでを追ってみよう
インターネットからEC2へHTTPS通信が届く場合を考えてみます。
HTTPS通信を送信
Subnet境界で確認
Resource側で確認
通信が到達
この通信が成立するには、 通信経路だけでなく、 NACLやSecurity Groupでも 必要な通信が許可されている必要があります。
基本はSecurity Groupを中心に考える
Security GroupとNACLの両方があると、 「常に両方を細かく設定しなければならないのか?」 と思うかもしれません。
基本的には、 Security Groupを中心にアクセス制御を行い、 必要に応じてNACLを追加の防御レイヤーとして利用する と考えると分かりやすいでしょう。
リソースごとに 必要な通信だけを許可
必要に応じて サブネット単位で制御
次は「インターネットを経由しないAWSサービスへの接続」へ
ここまでで、 VPCのネットワーク構成と アクセス制御について学んできました。
では、VPC内のEC2から Amazon S3などのAWSサービスへアクセスするとき、 必ずインターネットやNAT Gatewayを経由する必要があるのでしょうか。
そこで登場するのが、 VPC Endpointです。
確認問題:Security GroupとNACL
Security Groupの特徴として正しいものはどれですか?
Security GroupはStatefulです。 許可された通信に対する戻り通信は 自動的に許可されます。
NACLの適用レベルとして正しいものはどれですか?
NACLはサブネットレベルで動作し、 サブネットへ出入りする通信を制御します。
NACLのルール評価として正しいものはどれですか?
NACLはルール番号の小さい順に評価し、 最初に一致したルールを適用します。
3問に挑戦してみましょう。
まとめ
Security Groupは リソースレベルで通信を制御する
NACLは サブネットレベルで通信を制御する
Security Groupは Statefulで戻り通信を自動的に許可する
NACLは Statelessで戻り通信もルールによる許可が必要
Security Groupは Allowルールのみ
NACLは Allow / Denyの両方を設定できる
NACLは ルール番号の小さい順に評価する
VPC EndpointのGateway型とInterface型を理解する
ここまでで、 VPC内の通信経路と Security Group・NACLによるアクセス制御を学びました。
次は、 インターネットを経由せずにAWSサービスへ接続する仕組み について学びます。
VPC Endpointの Gateway型とInterface型の違い を整理していきましょう。
VPC EndpointのGateway型とInterface型を理解する →
