| この記事の要点 |
|
概要
セキュリティグループ(Security Group)とは、クラウド上の仮想マシン(インスタンス)やコンテナ、データベースなどに直接付与する、インスタンス単位の仮想ファイアウォールです。どの送信元から、どのポートへの通信を許可するかをルールとして定義し、許可していない通信はすべて遮断します(デフォルト拒否)。
従来のオンプレミスでは、ファイアウォールはネットワークの境界(ルータやアプライアンス)に置くのが一般的でした。これに対しセキュリティグループは、個々のサーバそのものに「持ち運べる防壁」を貼り付けるイメージです。サーバが別のサブネットへ移動しても、同じセキュリティグループを付けていれば同じ通信制御が適用されます。クラウドでは、この粒度の細かいアクセス制御が安全性の要になります。
仕組み
セキュリティグループはインバウンドルール(そのインスタンスへ入ってくる通信)とアウトバウンドルール(そのインスタンスから出ていく通信)の 2 種類を持ちます。各ルールは「プロトコル・ポート範囲・送信元(または宛先)」で構成されます。
Web サーバ用セキュリティグループ (インバウンド)
┌──────────┬─────────┬──────────────────┐
│ プロトコル │ ポート │ 送信元 │
├──────────┼─────────┼──────────────────┤
│ TCP │ 443 │ 0.0.0.0/0 (全世界) │ ← HTTPS 公開
│ TCP │ 80 │ 0.0.0.0/0 │ ← HTTP 公開
│ TCP │ 22 │ 203.0.113.10/32 │ ← SSH は自社IPのみ
└──────────┴─────────┴──────────────────┘
※ 上記以外の着信はすべて拒否
セキュリティグループの最大の特徴はステートフルであることです。あるインバウンド通信を許可すると、その通信に対する戻りのパケットは、アウトバウンドルールに関係なく自動的に通過します。たとえば「443 番への着信」を許可すれば、その応答(サーバ → クライアント)は明示的に許可しなくても返せます。「行きを許可すれば帰りも通る」ため、ルールがシンプルになります。
もう 1 つの強力な機能が、ルールの送信元に別のセキュリティグループを指定できる点です。たとえば DB サーバのセキュリティグループで「送信元 = アプリサーバのセキュリティグループ」とすれば、アプリサーバが増減しても IP を書き換える必要がなく、構成変更に強い設計になります。
構成・実用例
3 層構成でセキュリティグループ同士を参照させ、階層ごとにアクセスを絞る例です。
[インターネット]
│ 443/80
┌───▼──────────── ALB-SG ───────────────┐
│ in : 443,80 from 0.0.0.0/0 │
└───┬───────────────────────────────────┘
│ 8080 (送信元 = ALB-SG)
┌───▼──────────── APP-SG ───────────────┐
│ in : 8080 from ALB-SG │
└───┬───────────────────────────────────┘
│ 3306 (送信元 = APP-SG)
┌───▼──────────── DB-SG ────────────────┐
│ in : 3306 from APP-SG │ ← アプリ層からのみ
└───────────────────────────────────────┘
AWS CLI でセキュリティグループを作り、SSH を特定 IP に限定する例です。送信元を 0.0.0.0/0 にしないことが重要です。
# セキュリティグループ作成
aws ec2 create-security-group --group-name web-sg \
--description "web" --vpc-id vpc-xxxx
# SSH(22) を自社グローバルIPのみ許可
aws ec2 authorize-security-group-ingress --group-id sg-xxxx \
--protocol tcp --port 22 --cidr 203.0.113.10/32
このようにセキュリティグループ参照で階層を組むと、「DB は誰からアクセス可能か」がルールを見るだけで明確になり、監査やトラブルシュートが容易になります。
主な用途
- 公開ポートの限定 — Web サーバなら 443/80 のみ公開し、それ以外は閉じます。
- 管理ポートの保護 — SSH(22)・RDP(3389)を自社 IP や踏み台サーバからのみ許可します。
- 階層間アクセス制御 — セキュリティグループ参照で「DB はアプリ層からのみ」のような関係を表現します。
- マイクロサービス間の通信制御 — サービスごとにグループを分け、必要な経路だけを開けます。
関連技術との比較
| 項目 | セキュリティグループ | ネットワーク ACL(NACL) |
|---|---|---|
| 適用単位 | インスタンス(ENI)単位 | サブネット単位 |
| 状態管理 | ステートフル(戻りは自動許可) | ステートレス(戻りも明示許可) |
| ルールの種類 | 許可ルールのみ | 許可・拒否ルール両方 |
| 評価順序 | 全ルールを総合判定 | 番号順に最初に一致したもの |
| 送信元の指定 | IP/CIDR + 他のセキュリティグループ | IP/CIDR のみ |
| 主な役割 | サーバ単位の細かい制御 | サブネット境界の粗い制御 |
注意点・落とし穴
- 0.0.0.0/0 で SSH/RDP を開けない — 管理ポートを全世界に開放するのは典型的な事故原因です。送信元 IP を必ず絞ります。
- セキュリティグループは「許可」しか書けない — 特定の IP だけ拒否したい(ブロックリスト)用途には向きません。それは NACL の役割です。
- NACL とは別物 — ステートフル/ステートレスの違いを混同すると、NACL 側で戻り通信を許可し忘れて「行きは通るのに帰りが落ちる」不具合が起きます。
- ルールの上限 — 1 グループあたりのルール数や、1 インスタンスに付けられるグループ数には上限があります。むやみに増やさず整理します。
- 最小権限を徹底する — 「とりあえず全許可」で動かすと、後から絞るのは難しくなります。最初から必要な通信だけを開けます。
関連リンク
子ページはありません
- VPC
- サブネット(クラウド)
- セキュリティグループ
- クラウドロードバランサ
- VPNゲートウェイ・専用線接続
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09