【入門編】 セキュリティグループのステートフル挙動における戻りパケットの自動許可メカニズム – クラウドインフラと仮想化ネットワーク実践ガイド

AWSのセキュリティグループが持つ「魔法」の正体:ステートフルな挙動を理解しよう

こんにちは!クラウドインフラの世界へようこそ。SREとして日々現場を駆け回っていると、ネットワークの「なぜ?」に直面する瞬間が必ず訪れます。

特にAWSを触り始めたエンジニアが最初につまずくのが、セキュリティグループ(Security Group)の不思議な挙動です。「インバウンドで許可しただけなのに、なぜ通信が成立するの?」という疑問。実はこれ、AWSネットワークの心臓部にある「ステートフル(Stateful)」という非常に強力な機能のおかげなんです。

今日は、この仕組みをパケットの「郵便配達」に例えて、深く、そして優しく紐解いていきましょう!

—

1. セキュリティグループは「賢い玄関番」

セキュリティグループをイメージしてみてください。それは、あなたのサーバー(EC2インスタンス)の玄関前に立つ、非常に優秀な「玄関番(ドアマン)」です。

ステートレス(Stateless)なNACLとの違い

AWSには、サブネット単位で制御する Network ACL という仕組みもありますが、こちらは「記憶力のない門番」です。インバウンドで許可しても、戻りのパケットをわざわざアウトバウンドでも許可しないと、通信が遮断されてしまいます。

一方、セキュリティグループは「記憶力抜群の門番」です。

—

2. ステートフル(Stateful)の真髄:戻りのパケットを「自動追跡」

「ステートフル」という言葉、少し難しそうですよね。でも、実はとてもシンプルなんです。

郵便配達の例え話

あなたが遠くに住む友達に手紙(リクエスト)を送ったと想像してください。
1. あなたが手紙を出すとき、門番は「お、これは外出だな」と記録します。
2. 門番はメモ帳に「〇〇さんに手紙を出したから、数日後に返事が来るはずだ」と書き留めます。
3. 数日後、友達からの返事(レスポンス)が届きました。
4. 門番はメモ帳を確認し、「ああ、これは先ほどの返事だな。許可済みだ!」といちいちルールを確認することなく、門をスッと開けてくれます。

これが「ステートフル(状態保持)」の仕組みです。「往きの通信を許可すれば、戻りの通信は自動的に許可される」。このおかげで、私たちはインバウンドのルールを書くだけで、複雑なネットワークを安全に構築できるのです。

—

3. 実践:インフラ構築で意識すべき「通信の許可」

実際にAWS CLIでセキュリティグループのルールを追加する様子を見てみましょう。例えば、Webサーバー(ポート 80)を公開する場合、設定はこれだけでOKです。

# Webサーバーへのアクセスを許可するルールを追加
aws ec2 authorize-security-group-ingress \
    --group-id sg-0123456789abcdef0 \
    --protocol tcp \
    --port 80 \
    --cidr 0.0.0.0/0 # 全世界からのアクセスを許可

このコマンドを打つと、セキュリティグループは自動的に「80 番ポートへの通信を待ち受け、その戻りパケットはすべて許可する」というルールを裏側で実行してくれます。

ここで注意!「アウトバウンド」はどうなるの?

デフォルトのセキュリティグループ設定では、「アウトバウンド(外への通信)」はすべて許可(全開放)されています。

もし、「厳格なセキュリティ」を求めてアウトバウンドを絞る場合でも、ステートフルのおかげで「返信用のルール」を個別に書く必要はありません。単純に「サーバーから外へアクセスする(例:yum や apt でのアップデート)」ための許可ルールだけを書けばいいのです。

# サーバーからインターネットへのHTTPS通信だけを許可したい場合
aws ec2 authorize-security-group-egress \
    --group-id sg-0123456789abcdef0 \
    --protocol tcp \
    --port 443 \
    --cidr 0.0.0.0/0 # これで外部への通信と、その戻りが許可されます

—

4. トラブルシューティングの現場から:コネクションスラッシング

現場でよくあるのが、「セキュリティグループの設定は正しいのに、なぜか通信が切れる」というケースです。

実は、この「ステートフル」な記憶には「寿命(タイムアウト)」があります。長時間通信がない状態が続くと、門番は「もう返事は来ないだろう」とメモを捨ててしまいます。これをコネクションスラッシング(Connection Thrashing)や単にタイムアウトと呼びます。

  • 解決のヒント: もしデータベースとの通信が途中で切れるなら、接続を維持する Keep-Alive 設定をアプリケーション側で有効にしたり、ネットワークのタイムアウト値を見直す必要があります。

—

まとめ:一歩ずつ理解を深めよう

今回お伝えしたかったのは、以下の2点です。

1. ステートフルとは「記憶力」のこと。 一度許可した通信に対する戻りのパケットは、門番が気を使って自動的に通してくれる。
2. インバウンドルールだけでWebサービスは成立する。 戻りパケットの制御を意識しなくて済むのが、クラウドのエンジニアにとって大きなメリット。

ネットワークの裏側で何が起きているかを知ると、トラブルが起きたときも「門番がメモを捨ててしまったのかも?」と落ち着いて対処できるようになります。

インフラの世界は一見複雑ですが、こうして身近な仕組みに例えていくと、パケットの動きが目に見えてくるはずです。焦らず、一歩ずつ、一緒に学んでいきましょうね!

それでは、また次回の記事でお会いしましょう!

コメント

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