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サービスは成立する。 戻りパケットの制御を意識しなくて済むのが、クラウドのエンジニアにとって大きなメリット。
ネットワークの裏側で何が起きているかを知ると、トラブルが起きたときも「門番がメモを捨ててしまったのかも?」と落ち着いて対処できるようになります。
インフラの世界は一見複雑ですが、こうして身近な仕組みに例えていくと、パケットの動きが目に見えてくるはずです。焦らず、一歩ずつ、一緒に学んでいきましょうね!
それでは、また次回の記事でお会いしましょう!
コメント