AWS CLF(Cloud Practitioner)対策

SGとネットワークACL

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

このレッスンを終えると、AWS にある2つのファイアウォールを、適用対象と挙動の違いから区別できるようになります。CLF で最も出題されやすい比較のひとつです。

ufw を設定したときのことを思い出す

Linux サーバーを1台建てたとき、ufw や firewalld でこんな設定を書いたはずです。22番と80番と443番だけ許可して、あとは全部落とす。ここで一度も書かなかったものがあります。戻りの通信の許可です。80番への着信を許可しただけで、そのリクエストに対する応答は何も書かずに返っていきました。これは ufw が接続の状態を覚えていて、行きを許した通信の帰りを自動で通すからです。この性質をステートフルと言います。

一方、昔ながらのルーターの ACL は状態を覚えません。行きの許可と帰りの許可を、2行に分けて自分で書く必要がありました。これがステートレスです。

AWS にはこの両方があります。セキュリティグループがステートフル、ネットワーク ACL がステートレスです。

2つの違い

観点セキュリティグループネットワーク ACL
適用される場所インスタンス (ENI) 単位サブネット単位
状態を覚えるかステートフル。戻りは自動で通るステートレス。戻りも明示的に許可する
ルールの種類許可のみ書ける許可と拒否の両方が書ける
評価のしかたすべてのルールをまとめて見る番号の小さい順に見て、最初に一致したもので決まる
既定の状態インバウンドは全拒否、アウトバウンドは全許可既定のものは全許可

覚え方としては、セキュリティグループはサーバー1台に付ける門番、ネットワーク ACL は区画の入口に立つ検問所という対比が使えます。門番はインスタンスに付くので、同じサブネットに置いた2台に別々のルールを当てられます。検問所はサブネットに付くので、そのサブネットに出入りするすべての通信が対象になります。

もうひとつ重要なのが、拒否を書けるのはネットワーク ACL だけという点です。セキュリティグループには許可のルールしか書けません。特定の IP アドレスからのアクセスをブロックしたいという要件は、セキュリティグループでは表現できないので、ネットワーク ACL の出番になります。

通信が届くまでの順番

インターネットからプライベートなアプリサーバーへ通信が届くまでを並べると、次の順に検査されます。

  1. ルートテーブル — そもそもその宛先への経路があるか
  2. ネットワーク ACL — サブネットの入口で許可されているか
  3. セキュリティグループ — インスタンスの手前で許可されているか

通信が届かないときは、この3つのどこで止まっているかを順に見ます。

試験ではこう出る

言い換えのパターンは次のとおりです。

  • ステートフルなファイアウォール」「戻りのトラフィックを自動的に許可する」 — セキュリティグループ
  • ステートレス」「インバウンドとアウトバウンドを個別に設定する必要がある」 — ネットワーク ACL
  • 「特定の IP アドレスをブロックしたい」「拒否ルールを書きたい」 — ネットワーク ACL
  • サブネットレベルで制御したい」 — ネットワーク ACL
  • インスタンスレベルで制御したい」「EC2 ごとに違うルールを当てたい」 — セキュリティグループ

引っ掛けとして頻出なのが、「セキュリティグループで特定の IP を拒否する」という選択肢です。もっともらしく見えますが、セキュリティグループに拒否ルールという概念が無いので誤りです。逆に「ネットワーク ACL をインスタンスに関連付ける」も、適用単位がサブネットなので誤りになります。

まとめ

  • セキュリティグループはインスタンス単位でステートフル、許可ルールだけを書く
  • ネットワーク ACL はサブネット単位でステートレス、許可と拒否の両方を番号順に評価する
  • 拒否を書きたい要件はネットワーク ACL しか満たせない
  • 両方を通過して初めて通信が届くので、2つは置き換えではなく重ね掛けの関係になる
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

特定のグローバル IP アドレスからのアクセスを、サブネット全体に対してブロックしたいです。最も適切なものはどれですか。