こんにちは!AWSを学び始めると、VPCやEC2とセットで必ず出てくる「セキュリティグループ」。なんとなく「ファイアウォールみたいなもの?」と理解している方も多いかもしれません。
その理解で合っています! 👏
セキュリティグループは、AWSのネットワークセキュリティの基本かつ最重要な機能の一つです。EC2インスタンスなどのリソースを守る「仮想ファイアウォール」や「門番」だと考えてください。
この記事では、AWS公式マニュアルの情報をベースに、セキュリティグループの仕組みと使い方を初心者でもわかるように、かみ砕いて解説していきます。
セキュリティグループのキホン 🖐️
まず、セキュリティグループの重要な「性質」を3つ覚えましょう。
1. 役割:インスタンスの「門番」
セキュリティグループは、EC2インスタンスなどのリソースに「アタッチ(関連付け)」して使います。アタッチされると、そのリソースの**インバウンド(入ってくる通信)とアウトバウンド(出ていく通信)**を制御する「門番」として機能します。
どの通信(例:Webサイトの閲覧、SSHでの接続)を許可し、どれを許可しないかを、すべてこの門番が判断します。
2. 性質:ステートフル (Stateful)
これが超重要なポイントです。
「ステートフル」とは、「一度外に出ることを許可された通信の『戻り』は、自動的に許可する」という意味です。
例えば、あなたのEC2インスタンスが外部のWebサイトを見にいく(アウトバウンド)とします。このリクエスト(行き)が許可されれば、そのWebサイトからのレスポンス(帰り)は、インバウンドルールに許可がなくても自動的に通してくれます。
いちいち「帰りの通信」用のルールを書かなくて良いので、非常に便利です。
3. ルール:許可(Allow)のみ!
セキュリティグループのルールは、「何(プロトコル)のどのポートへ、どこから(送信元)の通信を許可するか」を定義します。
ここでの最重要ポイントは、「拒否(Deny)ルール」が存在しないことです。
ルールに書かれていない通信は、すべて自動的に拒否されます(デフォルト拒否)。「このIPアドレスだけ拒否したい」という設定は、セキュリティグループ単体ではできません。(※ 拒否したい場合は、ネットワークACLという別の機能を使います)
セキュリティグループのルールを理解する
ルールには「インバウンド」と「アウトバウンド」の2種類があります。
インバウンドルール (Inbound Rules)
「中に入ってくる通信」のルールです。
例えば、EC2でWebサーバーを公開する場合、以下のようなルールを追加します。
-
タイプ:
HTTP(ポート 80) -
ソース:
0.0.0.0/0(すべての人)- → 「すべての人(0.0.0.0/0)から、HTTP(ポート80)でのアクセスを許可します」という意味になります。
アウトバウンドルール (Outbound Rules)
「外に出ていく通信」のルールです。
例えば、EC2インスタンスが外部のアップデートサーバーにアクセスする(例:yum update)場合、以下のようなルールが必要です。
-
タイプ:
HTTPS(ポート 443) -
送信先:
0.0.0.0/0(すべての場所)- → 「すべての場所(0.0.0.0/0)へ、HTTPS(ポート443)でアクセスすることを許可します」という意味になります。
新規作成 vs デフォルトのセキュリティグループ
セキュリティグループには「自分で作るもの」と「最初からあるもの」の2種類があります。
1. 自分で新規作成した場合 (推奨✨)
VPCコンソールから新しいセキュリティグループを作成すると、初期状態は以下のようになっています。
-
インバウンド: ルールなし
- → つまり、外からの通信はすべて拒否! SSHもPingも通りません。
-
アウトバウンド: すべての通信を許可 (
0.0.0.0/0)- → 中から外への通信は、すべてOK。
ベストプラクティス:
基本的に、リソースの役割ごとに専用のセキュリティグループを作成し、必要なインバウンドルールだけを追加していくのが最も安全です。(例:「Webサーバー用SG」「DBサーバー用SG」など)
2. デフォルト・セキュリティグループ (注意⚠️)
VPCを作成すると、自動的に「default」という名前のセキュリティグループが作られます。
- 削除不可です。
- インスタンス起動時にSGを指定しないと、自動でこれがアタッチされます。
-
初期ルール:
- インバウンド: 「同じデフォルトSGを使っている仲間」からの通信をすべて許可。
- アウトバウンド: すべて許可。
この「仲間内は全部OK」という設定が、意図しないセキュリティホールになることがあります。基本的にデフォルトSGは使わず、自分で作ったSGを使うようにしましょう!
セキュリティグループの操作方法
1. 作成 (Create)
- VPCコンソールで「セキュリティグループの作成」を選びます。
- 「名前」「説明」「VPC(どのVPCで使うか)」を指定するだけで作成できます。ルールは後から追加できます。
2. ルールの設定 (Configure Rules)
- 作成したセキュリティグループを選び、「インバウンドルール」「アウトバウンドルール」のタブからルールを追加・編集・削除できます。
- 変更は即座に、関連するすべてのインスタンスに適用されます。
-
送信元/送信先の設定:
-
0.0.0.0/0(IPv4) /::/0(IPv6): 「すべての場所」。Web公開など以外では極力使わないでください。 -
マイIP: コンソールを操作しているあなたのIPアドレスを自動で設定してくれます。SSH接続の許可などに便利です。 -
sg-xxxxxxxx: 他のセキュリティグループIDを指定できます。例えば、「DBサーバー用のSG」のインバウンドルールに、「Webサーバー用のSGのID」を指定すれば、「WebサーバーからのDBアクセスだけを許可する」という設定が可能です。
-
3. インスタンスへの関連付け (Associate)
- EC2インスタンスの起動時にアタッチするSGを選択できます。
- 起動済みのインスタンスにも、後からSGを変更・追加できます。
- 1つのインスタンスに複数のセキュリティグループをアタッチ可能です。(例:「Webサーバー用SG」+「共通管理用SG」など)
4. 削除 (Delete)
以下の条件に当てはまる場合、セキュリティグループは削除できません。
- リソースにアタッチされている(EC2インスタンス、RDSなど)。
- 他のSGのルールから参照されている(「ソース」や「送信先」に指定されている)。
- VPCの**「デフォルト」SGである**。
削除したい場合は、まず上記の関連付けをすべて解除する必要があります。
まとめ
セキュリティグループをマスターする鍵は、以下の3点です!
- ステートフルであること。(「行き」が許可されれば「帰り」は自動OK)
- 許可(Allow)ルールのみで、拒否(Deny)ルールはないこと。
- デフォルトSGは使わず、最小権限の原則で必要な通信だけを許可すること。
0.0.0.0/0 (Anywhere) でのポート開放は、家の鍵を開けっ放しにするようなものです。本当に必要な場合を除き、必ず送信元IPを絞り込むクセをつけましょう! 🔒
この記事が、あなたのAWS学習の助けになれば幸いです!
参考資料
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-security-groups.html
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/security-group-rules.html
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/default-security-group.html
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/creating-security-groups.html
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/working-with-security-group-rules.html
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/deleting-security-groups.html
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/security-group-assoc.html