AWS SAA 学習ノート:Security Groups

セキュリティグループ学習ノート

はじめに

AWSでEC2を使い始めると、必ず出てくるのがSecurity Group!「なんかよくわからないけど、とりあえず設定してる」という方も多いのでは?今日はこの重要な仕組みをしっかり理解しちゃいましょう!

そもそもSecurity Groupって何?

簡単に言うと...

Security Groupは、EC2インスタンスの周りに設置する仮想のファイアウォールです!家の玄関にセキュリティシステムを設置するようなイメージですね。

A virtual firewall that controls inbound and outbound traffic for EC2 instances.
EC2インスタンスのインバウンドおよびアウトバウンドトラフィックを制御する仮想ファイアウォール。

どこに存在するの?

Security Groupは、**EC2インスタンスの「外側」**に存在します。つまり、悪いトラフィックはEC2インスタンスに到達する前にブロックされるんです!

Internet → [Security Group] → EC2 Instance
             ↑ここで制御!

Security Groupの特徴を理解しよう!

🔗 複数インスタンスに接続可能

これ、めちゃくちゃ便利なんです!

Can be attached to multiple instances - 複数のインスタンスに接続可能
One security group can protect multiple EC2 instances - 1つのセキュリティグループで複数のEC2インスタンスを保護可能

例:Webサーバー用SG

Web-SG → EC2-Web-1
      → EC2-Web-2  
      → EC2-Web-3

🌍 リージョン/VPC限定

Locked down to a region/VPC combination - 特定のリージョン/VPCの組み合わせに限定
Cannot be used across different regions or VPCs - 異なるリージョンやVPCをまたいで使用不可

東京リージョンで作ったSGは、大阪リージョンでは使えないってことですね。

🛡️ 第一の防御線

Lives "outside" the EC2 instance - EC2インスタンスの「外側」に存在
Blocked traffic never reaches the EC2 instance - ブロックされたトラフィックはEC2インスタンスに到達しない
Acts as a first line of defense - 第一の防御線として機能

システム負荷にもならない優れた仕組みです!

トラフィックルールの基本

📥 インバウンド(入ってくる通信)

デフォルト設定:全部ブロック! Default: All inbound traffic is blocked - デフォルト:すべてのインバウンドトラフィックがブロック
Behavior: Deny by default - デフォルトで拒否
Action Required: Explicitly allow required traffic - 必要なトラフィックを明示的に許可する必要あり

よくある設定例:

Port 22 (SSH)     → 管理者アクセス用
Port 80 (HTTP)    → Webサイト用
Port 443 (HTTPS)  → セキュアWebサイト用
Port 3306 (MySQL) → データベース用

📤 アウトバウンド(出ていく通信)

デフォルト設定:全部許可! Default: All outbound traffic is authorized - デフォルト:すべてのアウトバウンドトラフィックが許可
Behavior: Allow by default - デフォルトで許可
Modification: Can be restricted if needed - 必要に応じて制限可能

EC2からインターネットへの通信は基本OKです。

ステートフルな仕組み

これ、超重要!

Security groups are stateful - セキュリティグループはステートフル

つまり:

  • インバウンドルールで許可すれば、リターントラフィックは自動許可
  • レスポンスを追跡してくれる
  • 設定がシンプルになる!

例:

1. ユーザーがHTTP request (Port 80) → 許可
2. EC2がHTTP response → 自動的に許可(設定不要)

SSH専用SGのススメ

なぜ分けるの?

Maintain one separate security group for SSH access - SSH アクセス用に専用のセキュリティグループを維持
Improves security and management - セキュリティと管理を向上

構成例:

SSH-SG (Port 22のみ)  → 管理者用
Web-SG (Port 80,443) → 一般ユーザー用
DB-SG (Port 3306)    → アプリケーション用

よくあるトラブルと対処法

😵 接続できない!タイムアウト!

症状: アプリケーションにアクセスできない(timeout)

原因: 99%がSecurity Groupの設定ミス

チェックポイント:

  • インバウンドルールは正しい?
  • ポート番号は合ってる?
  • ソースIPは適切?

😤 "Connection Refused"エラー

症状: "接続拒否"のエラーメッセージ

原因: アプリケーション側の問題

チェックポイント:

  • アプリケーションは起動してる?
  • 正しいポートでリッスンしてる?
  • アプリケーションの設定は正しい?

🔍 判別方法

Timeout → Security Group問題
Connection Refused → Application問題

実際のアーキテクチャ例

基本的なWeb構成

よくある問題:ALBからEC2への通信エラー

シナリオ: ユーザーはALBにアクセスできるが、ALBからEC2に接続できない

解決方法: EC2のSecurity GroupでALBからの通信を許可する

Inbound Rule:
Type: HTTP
Port: 80
Source: ALB Security Group (sg-xxxxxx)

Security Group設定のベストプラクティス

🎯 原則:最小権限の法則

  • 必要最小限のみ許可
  • 可能な限り具体的なソースを指定
  • 定期的な見直しとクリーンアップ

📝 命名規則

わかりやすい名前をつけよう!

例:
- web-servers-sg
- database-sg  
- admin-ssh-sg
- alb-public-sg

🔄 管理のコツ

  • 役割ベースでグループ化
  • 環境別に分離
  • ドキュメント化

重要なポイント

Act as virtual firewalls at instance level - インスタンスレベルで仮想ファイアウォールとして機能
Default deny for inbound, default allow for outbound - インバウンドはデフォルト拒否、アウトバウンドはデフォルト許可
Region/VPC specific - リージョン/VPC固有
Essential for troubleshooting connectivity issues - 接続性問題のトラブルシューティングに不可欠

まとめ

Security Groupは、AWSセキュリティのです!

覚えておきたいポイント

  1. インスタンスレベルの仮想ファイアウォール
  2. ステートフルな接続追跡
  3. インバウンドはデフォルト拒否、アウトバウンドは許可
  4. リージョン/VPC固有
  5. グループ当たり複数インスタンス可能

トラブル時のチェックリスト

  • タイムアウト → Security Group確認
  • Connection Refused → アプリケーション確認
  • インバウンドルールは適切?
  • ソースの指定は正しい?
  • ポート番号は合ってる?