SAA-037
特定のIPアドレスレンジから、あるサブネットに対する不正アクセス試行が継続しています。そのレンジからの通信だけを、サブネット内の全インスタンスに対してまとめて拒否したいです。最も適した設定はどれですか?
選択肢
解説と正解
解説と正解を読む(先に自分で回答してから開くのがおすすめです)
正解:C. サブネットに関連付けたネットワークACLに、当該レンジを拒否するインバウンドルールを、既存の許可ルールより小さいルール番号で追加する
解説
セキュリティグループには拒否ルールが存在しないため、特定の送信元だけをブロックするにはネットワークACLを使います。ネットワークACLはルール番号の小さい順に評価され最初に一致したルールが適用されるため、拒否ルールは既存の許可ルールより小さい番号を付ける必要があります。
選択肢ごとの解説
A. 各インスタンスのセキュリティグループに、当該レンジを拒否するインバウンドルールを追加する
セキュリティグループは許可ルールのみで構成され、拒否ルールを書くことはできません。「明示的に許可していないものは通らない」というホワイトリスト型の仕組みです。
B. セキュリティグループのアウトバウンドルールで、当該レンジ宛ての通信を拒否する
アウトバウンドを制限しても、外部から到達するインバウンドの試行そのものは止まりません。またセキュリティグループには拒否ルール自体がありません。
C. サブネットに関連付けたネットワークACLに、当該レンジを拒否するインバウンドルールを、既存の許可ルールより小さいルール番号で追加する
正解です。ネットワークACLはサブネット単位で適用されるため、サブネット内の全インスタンスへ一括で効きます。ルール番号の順序が判断の分かれ目です。
D. サブネットのルートテーブルに、当該レンジ宛てのブラックホールルートを追加する
ルートテーブルは宛先ネットワークごとの転送先を決めるもので、送信元アドレスによるフィルタリングはできません。またサブネット内の通信を到達前に遮断する仕組みでもありません。
実務での使いどころ
セキュリティグループとネットワーク ACL は、VPC における 2 層のトラフィック制御で、適用範囲と評価方式が根本的に異なる。セキュリティグループは ENI(インスタンス)単位で適用されるステートフルなファイアウォールで、許可ルールのみを持ち、すべてのルールを評価したうえで 1 つでも一致すれば通す。ステートフルなので、インバウンドで許可した通信の戻りはアウトバウンドルールに関係なく通る。一方、ネットワーク ACL はサブネット単位で適用されるステートレスなフィルタで、許可ルールと拒否ルールの両方を持ち、ルール番号の昇順に評価して最初に一致したルールで判定を確定する。 この差から実務上の使い分けが決まる。「特定の送信元だけをブロックしたい」という要件はセキュリティグループでは表現できないため、ネットワーク ACL の Deny ルールを使う。このとき、既定のネットワーク ACL には番号 100 で全許可ルールが入っているため、拒否ルールには 100 より小さい番号(例: 90)を付けないと評価順で負けて素通りしてしまう。また、ステートレスであるがゆえに、通信を許可したい場合はインバウンドとアウトバウンドの両方にルールが必要で、戻りトラフィック用のエフェメラルポート(1024-65535)の許可を忘れると通信が片道で止まる。なお、Web アプリケーションに対する攻撃を送信元 IP やリクエスト内容で細かく制御したい場合は、ネットワーク ACL より AWS WAF の IP セットやレートベースルールが適している。 SAA-C03 では「特定の IP レンジを拒否したい」「サブネット全体にまとめて適用したい」という文言が出たらネットワーク ACL、「特定のリソースへの通信を許可したい」「ALB からのアクセスだけ許可したい」という文言ならセキュリティグループが正解になる。ステートフル / ステートレスの違い、ルール番号による評価順、エフェメラルポートの扱いは、この領域で繰り返し問われる論点である。