109. セキュリティグループは会話を覚えている門番である — ステートフルと『許可だけ』の設計
リソースに一番近い防壁が「一度通した会話」をどう扱うのかを、往路と復路の2本の矢印で図で追っていきます。
① 門番はどこに立つか — 関連付けたリソースだけを守る
- 公式: 「A security group controls the traffic that is allowed to reach and leave the resources that it is associated with.」
- インバウンドルール = 送信元・ポート範囲・プロトコル / アウトバウンドルール = 宛先・ポート範囲・プロトコル。
- SG vs NACL比較表: Level of operation = Instance level、Scope = Applies to all instances associated with the security group(効くのはインスタンスレベル・関連付けたリソースだけ)。
セキュリティグループは、関連付けたリソース(EC2インスタンスや、そのインスタンスに刺さったENI)に出入りするトラフィックだけを制御する仮想ファイアウォールである。守備範囲はサブネット全体ではなく「関連付けた相手」——一番リソースに近い、内側の門番。
② ステートフル — 門番は「この会話は自分が通した」と覚えている
- 公式: 「if you send a request from an instance, the response traffic for that request is allowed to reach the instance regardless of the inbound security group rules.」
- 公式: 「Responses to allowed inbound traffic are allowed to leave the instance, regardless of the outbound rules.」
- 比較表: Return traffic = Automatically allowed (stateful)。
ステートフルとは、門番が「往路で自分が通した会話」を覚えていて、戻りの便(復路)を再審査しないということ。だから応答を通すためのインバウンドルールを書く必要がない——往路を許可した時点で、復路は自動的に通る。
③ その記憶にはコストがかかる — 会話を1行ずつ持つ追跡テーブル(CS基礎)
- 公式: 「Your security groups use connection tracking to track information about traffic to and from the instance.」——ポート情報を含めて接続情報が追跡される(TCP/UDP/ICMP以外はIPアドレスとプロトコル番号のみ追跡)。「5タプル」は公式の用語ではなくCS基礎の整理。
- コストは実在する: 追跡できる接続数にはインスタンスごとの上限があり、超えるとパケットが落ちる。だからAWSは「両方向とも全開放(0.0.0.0/0・全ポート)のTCP/UDPフローは追跡しない」という最適化までしている(untracked connections)。
- これはOSのコネクション追跡と同じ発想。公式も、ルール変更の効き方は「how the traffic is tracked」に依存するとして Connection tracking を参照する(https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)。
「会話を覚える」には、送信元/宛先のIP・ポートとプロトコル(CS基礎でいうTCPの5タプル)を1行として持つ追跡テーブルが要る。これはOSのコネクション追跡とまったく同じ原理——状態を持つ分だけ賢く、持つ分だけコストがかかる。追跡数に上限があり、全開放のフローはあえて追跡しないという公式の最適化が、このコストの実在を物語る。この「覚える」設計は、次レッスンの「覚えない」設計(NACL)と対になる。
④ 「許可だけ」という潔さ — 書かれていないものは全部拒否
- 比較表: Rule type = Allow rules only。公式: 「You can specify allow rules, but not deny rules.」
- 公式: 「it has no inbound rules. Therefore, no inbound traffic is allowed until you add inbound rules」
- 公式: 「it has an outbound rule that allows all outbound traffic ... If your security group has no outbound rules, no outbound traffic is allowed.」
セキュリティグループには拒否ルールが存在しない。書けるのは許可だけで、書かれていないものは全部拒否される——これが安全側デフォルト(default deny)。これは認証・暗号編で見たIAMポリシー評価の「暗黙のDeny」とまったく同じ思想。ただしアウトバウンドだけは作成時に「全許可」ルールが1本入っている点が例外(消せば宛先も default deny になる)。
⑤ 順序がない — 全部見てから決めるので「順序バグ」が構造的に起きない
- 比較表: Rule evaluation = 「Evaluates all rules before deciding whether to allow traffic」(NACL側: Evaluates rules in ascending order until a match is found)。
- 公式: 「When you associate multiple security groups with a resource, the rules from each security group are aggregated to form a single set of rules」
- 番号の昇順に評価し最初のマッチで確定するNACL(順序依存)との対比は次レッスンで。
セキュリティグループはルールに順序を持たない。全ルールを評価してから通すか決めるので、「ルールの並び順で結果が変わる」タイプのバグが構造的に起きない。複数のSGを1つのリソースに重ねても、ルールは単純に集約されて1つの集合になる——足し算であって、順番の綱引きではない。
⑥ IPでなく「役割」で許可を書く — 別のSGを送信元にできる
- 公式: ルールの source/destination に「The ID of a security group」を指定できる。
- 比較ページが「create rules that reference other security groups」をSGの強みとして明記。複数SGを1つのリソースに重ねられる(「assign multiple security groups to a single resource」)。
- SG参照ルールが許可するのは、参照先SGに関連付いたインスタンスの「プライベートIPアドレス」での通信。
ルールの送信元・宛先には、IPアドレスの代わりに別のセキュリティグループを指定できる。「10.0.1.0/24から」ではなく「ロードバランサーという役割のグループから」と書けるので、メンバーのIPが増減してもルールを直さなくていい——公式が比較ページでSGの強みとして挙げる点(効くのはプライベートIPでの通信)。SGがENIに付くという事実は、コンテナ編で見たawsvpcモード(タスクごとにENI=タスクごとにSG)の土台でもある。
⑦ 門番が触らない道 — SGでは塞げないトラフィックがある
- 公式: 「Security groups do not filter traffic destined to and from the following: Amazon DNS / DHCP / EC2 instance metadata / ECS task metadata endpoints / License activation for Windows instances / Amazon Time Sync Service / Reserved IP addresses used by the default VPC router」(7項目)。
- 公式: 「Security groups cannot block DNS requests to or from the Route 53 Resolver」——Route 53 Resolver(VPC+2 / AmazonProvidedDNS)へのDNSリクエストもSGではブロック不可。フィルタしたければ Route 53 Resolver DNS Firewall。
門番にも触れない道がある。DNS・DHCP・EC2インスタンスメタデータ(IMDS)・ECSタスクメタデータなどへのトラフィックは、セキュリティグループではフィルタされない。コンテナ編で見た169.254.169.254(IMDS)への道は、SGでは塞げない——ここは別レイヤの守りの担当だと知っておくのが実務的な落とし穴回避になる。
⑧ まとめ — 「覚える門番」の対価と、次に会う「覚えない門番」
- 覚えるから復路を書かなくてよく、覚えるから状態(コネクション追跡テーブル)を持ち続けるコストがかかる。
セキュリティグループのステートフルさは、「接続という文脈を覚えるために状態(コネクション追跡テーブル)を持つ」という対価を払った設計である。この「覚える門番」は、次レッスンの「覚えない門番」(NACL=ステートレス、番号順評価、拒否ルールあり)と対にして初めて全体像が完成する。