【入門編】 セキュリティグループ(SG)のステートフル処理とコネクション追跡(Connection Tracking) – クラウド&コンテナネットワーク実践ガイド

門番は「記憶力」がいい? セキュリティグループのステートフルな秘密を解き明かす

こんにちは!クラウドの海を日々泳ぎ回っているSREです。

AWSやGCPでインフラを触り始めると、必ずと言っていいほど直面するのが「セキュリティグループ(SG)」という存在です。初心者の方からよく聞くのが「インバウンド(入ってくる通信)だけ許可すればいいの? アウトバウンド(出ていく通信)も許可しなきゃいけないの?」という素朴な疑問。

実は、セキュリティグループは「一度通した相手のことは、帰り道までしっかり覚えている」という、非常に気の利く門番なんです。今日は、この「ステートフル(Stateful)」という賢い仕組みを、身近な例えで紐解いていきましょう。

—

郵便配達で例える「ステートフル」の仕組み

皆さんの自宅に、海外から大切な荷物が届くと想像してみてください。

皆さんが「この荷物を受け取る」と決めて、玄関のドアを開けますよね。このとき、家の門番(セキュリティグループ)はこう考えます。

> 「おっ、主人がこの荷物を受け入れると言ったな。じゃあ、配達員さんが帰る時のドアも開けておいてあげよう」

これがステートフル(状態保持型)の考え方です。

インバウンドの通信(荷物の受け取り)を許可すると、クラウドのネットワーク層は「この通信は信頼された相手からのものだ」と記憶します。だから、その応答として出ていくアウトバウンドの通信(配達員さんが帰る)については、わざわざ「出ていく許可」を個別に設定しなくても、自動的に許可してくれるんです。

もしこれが「ステートレス(状態を覚えない)」な仕組みだったらどうでしょう? 荷物を受け取った後、配達員さんが門の外に出ようとするたびに、毎回「出ていってもいいですか?」と許可を求めなければなりません。これでは業務が回りませんよね。

—

なぜ「記憶」できるのか?:コネクション追跡の正体

では、この門番はどうやって通信の「状態」を記憶しているのでしょうか。技術的にはコネクション追跡(Connection Tracking / conntrack)という仕組みを使っています。

サーバーのNIC(ネットワークカード)にパケットが飛び込んでくると、門番はノートにメモを取ります。

  • 送信元IP: 1.2.3.4(相手)
  • 送信先IP: 10.0.0.5(自分)
  • プロトコル: TCP
  • 状態: 通信開始(SYN)→ 確立(ESTABLISHED)

このノートがあるおかげで、サーバーから外へパケットを返すとき、「お、これはさっきの通信の返事だな」と即座に判断して、パケットをスルーさせてくれるわけです。

—

実践! セキュリティグループの設定を見てみよう

実際にAWSのセキュリティグループを定義する際、どのように書くか見てみましょう。Terraformなどのコードで管理するのが一般的ですが、考え方は同じです。

# インバウンドルール:Webサーバーへのアクセスを許可
resource "aws_security_group_rule" "allow_http_inbound" {
  type              = "ingress"
  from_port         = 80
  to_port           = 80
  protocol          = "tcp"
  cidr_blocks       = ["0.0.0.0/0"] # 全世界からのアクセスを許可
  security_group_id = aws_security_group.web_sg.id
  description       = "外部からのHTTPアクセスを許可"
}

# アウトバウンドルール:デフォルト設定(実はこれだけでOK)
# AWSのセキュリティグループはデフォルトで「すべてのアウトバウンドを許可」していることが多いですが、
# 厳密に絞る場合でも「インバウンドの応答」は自動で通るため心配無用です。

ここでのポイントは、ingress(インバウンド)の設定だけで、その応答であるegress(アウトバウンド)も暗黙的に許可されるという点です。

—

SREからのアドバイス:これだけは注意して!

ここまで聞くと「じゃあ何も気にしなくていいの?」と思われそうですが、現場でよくあるトラブルを一つだけ。

「ネットワークACL(NACL)」と混同しないこと!

AWSにはセキュリティグループとは別に「ネットワークACL」というサブネット単位の防御壁があります。こちらは「ステートレス」です。つまり、インバウンドを許可しても、その帰り道(アウトバウンド)の許可設定を忘れると、通信は途中で遮断されてしまいます。

  • セキュリティグループ(NICレベル): ステートフル。賢い門番。
  • ネットワークACL(サブネットレベル): ステートレス。言われた通りにしか動かない厳格な門番。

初心者のうちは、まずは「セキュリティグループは通信の帰り道を自分で把握してくれる賢い子」と覚えておけば大丈夫です!

—

まとめ:ネットワークは「流れ」を意識しよう

ネットワークのトラブルシューティングで一番大切なのは、「パケットが今、どこを通っていて、どこで止まっているのか?」を想像する力です。

「通信が繋がらない!」と焦ったときは、ぜひこの門番の顔を思い出してみてください。
「このパケットは、帰り道の許可をもらえているかな?」と考えるだけで、問題解決の糸口がぐっと近づいてきますよ。

これからも一緒に、クラウドという広大なネットワークの世界を楽しく学んでいきましょう!それでは、また次回の記事でお会いしましょう。

コメント

タイトルとURLをコピーしました