AWS / SAP-C02

SAP-C02-063 · セクション 08 / タスク 2.3

Inbound / Outbound Network Flow設計

ルートテーブル / セキュリティグループ / ネットワークACL / インバウンド / アウトバウンド / ネットワーク境界

ゴール

ネットワーク要件を、実際の通信経路とネットワーク境界に沿ってルート/ セキュリティグループ / ネットワークACLへ変換し、必要なフローだけがエンドツーエンドで成立する設計を選べるようにします。

ネットワーク要件
        ↓
必要なフロー
送信元 / 宛先/ プロトコル / ポート
        ↓
実際のルート経路
        ↓
越えるネットワーク境界
        ↓
セキュリティグループ + ネットワークACL + ルート
        ↓
エンドツーエンドで成立する?

1. 最初に必要なフローを4要素で固定する

ルールを先に作るのではなく、必要な通信を送信元 / 宛先/ プロトコル / ポートで定義します。

要素確認すること例
送信元誰が通信を開始するかApplication Load Balancer
宛先どのリソースへ到達するかアプリケーション層
プロトコル必要なプロトコルTCP
ポート必要な宛先ポート8443

「プライベートサブネットだから安全」「同じVPCだから許可」といった位置情報ではなく、必要なフローそのものを起点にします。

2. 必要なフローと実際のルート経路を分けて考える

同じ送信元 / 宛先でも、実際のルート経路によって通過する制御や利用できるルール表現が変わります。

必要なフロー
アプリケーションA → アプリケーションB : TCP 443

候補経路 1
アプリケーションA ─────────────→ アプリケーションB

候補経路 2
アプリケーションA → 検査 → アプリケーションB

ルートテーブルは「通信を許可するセキュリティポリシー」ではなく、パケットがどこを通るかを決めます。したがってセキュリティルールは、選択された実際のルート経路と整合している必要があります。

3. インバウンド / アウトバウンドは制御から見た方向で決める

1つの通信でも、送信元側ではアウトバウンド、宛先側ではインバウンドになります。

送信元リソース
      │
      │ アウトバウンド
      ▼
   ネットワーク
      │
      │ インバウンド
      ▼
宛先リソース

アプリケーション全体から見た「外向き / 内向き」ではなく、ルールを配置するリソースやサブネットから見た方向へ変換します。

4. セキュリティグループは送信元 / 宛先リソースへフローを割り当てる

例えばALBからアプリケーションへTCP 8443だけを許可する要件なら、1本のフローを両端へ分解します。

ALB → アプリケーション: TCP 8443

ALB セキュリティグループ
→ アウトバウンド TCP 8443
→ 宛先= アプリケーションSG

アプリケーションセキュリティグループ
→ インバウンド TCP 8443
→ 送信元= ALB SG

送信元セキュリティグループ参照を使えるトポロジーなら、IPアドレスを固定せずリソースグループの関係として表現できます。

5. セキュリティグループの戻りトラフィックを二重に設計しない

セキュリティグループのステートフル性により、許可された接続への応答を新しい逆方向フローとして重複定義する必要はありません。

アプリケーション → DB : TCP 5432

必要な開始方向アプリケーションSG アウトバウンド 5432
DB SG  インバウンド  5432

確立済み接続の戻り通信
→ 逆向きSG ルールを追加する理由にはしない

ただし、DBからアプリへ別接続を新規開始する要件があるなら、それは独立した必要なフローとして評価します。

6. ミドルボックスを経由するとセキュリティグループ参照の成立条件を再確認する

異なるサブネット間を検査アプライアンスなどのミドルボックス経由でルーティングする場合、エンドポイント同士のセキュリティグループ参照だけでは通信を許可できない構成があります。

直接経路インスタンス A ─────────────→ インスタンス B
SG-A                      SG-B

トポロジーが対応
→ SG-B 送信元= SG-A を候補化ミドルボックス経路インスタンス A → ミドルボックス → インスタンス B

エンドポイント間セキュリティグループ参照だけでは不可
→ 相手プライベートIP / サブネットCIDR等を評価

ミドルボックスを通るから送信元IPが必ずミドルボックスへ変わるという意味ではありません。実際のルート経路に対して、セキュリティグループ参照というルール表現が成立するかを確認します。

7. ネットワークACLはサブネット境界を越える箇所へ割り当てる

ネットワークACLはリソースではなくサブネット境界で考えます。異なるサブネット間のリクエストでは、送信元サブネットから出る方向と宛先サブネットへ入る方向を確認します。

サブネットA                         サブネットB

インスタンス A ───────────────────→ インスタンス B
     │                               ▲
     │ NACL-A アウトバウンド               │ NACL-B インバウンド
     └───────────────────────────────┘

まず実際にどのサブネット境界を越えるかを決め、その境界に関連付くNACL ルールへ変換します。

8. 同一サブネット内の通信へNACL インバウンド / アウトバウンドを機械的に当てない

ネットワークACLはトラフィックがサブネットに出入りするときに評価され、同一サブネット内でルーティングされるトラフィックには評価されません。

同一サブネットインスタンス A ─────────→ インスタンス B

サブネット境界を越えない
→ NACL アウトバウンド → NACL インバウンドという変換を行わない

「送信元側アウトバウンド + 宛先側インバウンド」という考え方は、セキュリティグループとネットワークACLで評価単位が異なります。

9. ネットワークACLはリクエストと戻りの両方を境界へ配置する

NACLはステートレスなので、異なるサブネットをまたぐ通信ではリクエストだけでなく戻りトラフィックも明示的に成立させます。

リクエストクライアントサブネットNACL アウトバウンド
        ↓
サーバーサブネットNACL インバウンド : TCP 443

戻りサーバーサブネットNACL アウトバウンド
        ↓
クライアントサブネットNACL インバウンド : クライアントのエフェメラルポート

エフェメラルポートの範囲はクライアント OSや通信方式に合わせて決めます。重要なのは、戻りフローを「セキュリティグループがステートフルだからNACLも不要」と混同しないことです。

10. ルート/ SG / NACLを別々に満たして終わらない

必要フローは、経路と各制御が同時に成立して初めてエンドツーエンドで成立します。

確認軸判断
ルートテーブル送信元から宛先まで実際のルート経路が存在するか
セキュリティグループリソース基準で開始方向のアウトバウンド / インバウンドが許可されるか
ネットワークACL実際に越えるサブネット境界でリクエスト / 戻りが許可されるか
ネットワーク境界どの制御がどこで評価されるかを正しく特定したか

「SGは許可済み」「NACLは許可済み」という個別確認ではなく、同じ実際のルート経路上で整合しているかを確認します。

11. 3層フローを通信単位に分解する

インターネット公開アプリケーションでも、1本の大きなルールでまとめず、層間の必要フローへ分解します。

インターネット
   ↓ HTTPS 443
ALB
   ↓ TCP 8443
アプリケーション
   ↓ TCP 5432
データベース
フロー送信元側宛先側
インターネット → ALB : 443インターネット側ルート/ 境界ALB SG インバウンド 443
ALB → アプリケーション : 8443ALB SG アウトバウンド 8443アプリケーションSG インバウンド 8443 送信元 ALB SG
アプリケーション → DB : 5432アプリケーションSG アウトバウンド 5432DB SG インバウンド 5432 送信元アプリケーションSG

NACLを厳格化する場合は、各フローが実際に越えるサブネット境界ごとにリクエスト / 戻りを追加で確認します。

12. 外部宛先はSG ルールで表現できるかを先に確認する

承認済み外部サービスだけへアウトバウンドを限定したい場合、要件をそのまま「FQDNをセキュリティグループの宛先へ設定」と変換してはいけません。

承認済み外部サービス
        ↓
SG ルールで宛先を表現可能?
├─ CIDR / プレフィックスリスト / セキュリティグループ等
│   → SGアウトバウンド候補
│
└─ ドメインベースの制御が必要
    → 別の送信制御を評価

セキュリティグループルールは任意のFQDNを直接送信元 / 宛先として指定する制御ではありません。

13. デュアルスタックはIPv4 / IPv6のフローを別々に確認する

同じアプリケーション要件でも、IPv4とIPv6はルートとルールが別に評価されます。

必要なサービスフロー
        ↓
IPv4 経路 / ルール成立?
        +
IPv6 経路 / ルール成立?

IPv4側だけを制限してIPv6側が広く残る、またはIPv6 ルートだけ不足するといった片側だけの設計を避けます。

14. 候補比較は「最も少ないルール」ではなく要件適合で行う

候補評価
広いCIDRを許可しルール数を減らす運用は単純でも不要フローまで許可するなら不適合
セキュリティグループ参照で層関係を表現するトポロジーとルート経路が対応するなら有力
ミドルボックス経由でもエンドポイントセキュリティグループ参照だけを使う実際のルート経路に対する成立条件を満たさない場合がある
ドメイン単位の送信要件をCIDRへ無理に固定する宛先変動や要件表現の適合性を確認する

15. エンドツーエンド設計例

要件が「ALBだけがアプリへ8443で接続し、アプリだけがDBへ5432で接続する。アプリから承認済み外部サービスへの通信も必要」である場合、次の順序で判断します。

1. フローを分離
   ALB → アプリケーション : 8443
   アプリケーション → DB  : 5432
   アプリケーション → 外部サービス: 必要ポート

2. 各フローの実際のルート経路を確認

3. リソース側SGへ送信元アウトバウンド + 宛先インバウンド

4. サブネット境界を越えるフローだけ
   NACL リクエスト + 戻りを確認

5. 外部宛先を
   SG ルールで表現できるか確認

6. IPv4 / IPv6を利用するなら双方のルート/ ルールを確認

16. 判断フロー

ネットワーク要件
        ↓
必要なフローを定義送信元 / 宛先/ プロトコル / ポート
        ↓
実際のルート経路を確認
        ↓
ネットワーク境界を特定
        ↓
セキュリティグループリソース基準でアウトバウンド / インバウンドへ変換
        ↓
ミドルボックスを経由する?
└─ はい → セキュリティグループ参照成立条件を再評価
        ↓
ネットワークACLを使う?
└─ はい → 境界ごとにリクエスト / 戻りを確認
        ↓
外部宛先をSGで表現可能?
└─ いいえ → 要件に合う別送信制御を評価
        ↓
IPv4 / IPv6双方を確認
        ↓
エンドツーエンドで必要フローだけ成立

17. 混同ポイント

混同正しい判断
インバウンド / アウトバウンドはアプリケーション全体の向きルールを置くリソース/ サブネットから見た方向
ルートがあれば通信できるルートとセキュリティ権限は両方必要
SGがステートフルなのでNACLの戻りルールも不要NACLはステートレス。境界を越える戻りも確認
同一サブネット通信もNACL アウトバウンド → インバウンドを通る同一サブネット内ルーティングではNACL ルールは評価されない
ミドルボックスを通ると送信元IPは必ずミドルボックスになるNATの有無とセキュリティグループ参照成立条件を分離して評価
セキュリティグループの宛先へ任意FQDNを指定できるCIDR / プレフィックスリスト / SG等で表現できるか確認
IPv4 ルールがあればIPv6も同じ扱いIPv4 / IPv6のルート・ルールを別々に確認

まとめ

  • ネットワークルールより先に送信元 / 宛先/ プロトコル / ポートで必要なフローを定義する。
  • 必要なフローと実際のルート経路を分け、通過するネットワーク境界を特定する。
  • セキュリティグループはリソース基準で送信元アウトバウンドと宛先インバウンドへ変換する。
  • ミドルボックス経由ではエンドポイント間セキュリティグループ参照の成立条件を再評価する。
  • ネットワークACLはサブネット境界基準でリクエスト / 戻り双方を確認する。
  • 同一サブネット内トラフィックへNACL インバウンド / アウトバウンドを機械的に適用しない。
  • 外部宛先はSG ルールで表現可能かを確認し、任意FQDNを直接指定できると考えない。
  • デュアルスタックではIPv4 / IPv6双方のルートとセキュリティルールを確認する。
  • ルート/ SG / NACLが同じ実際のルート経路上で整合して初めてエンドツーエンドフローが成立する。

18. 主要AWS公式資料

理解確認

このページの内容を12問で確認します。

理解確認12問へ →