セキュリティグループとは

セキュリティグループ(Security Group)とは、Amazon EC2インスタンスやRDSデータベースなどのAWSリソースに対して、仮想的な「ファイアウォール」として機能し、入ってくる通信(インバウンド)と出ていく通信(アウトバウンド)を制御するセキュリティ機能です。不要な通信を遮断し、許可された通信のみを通すことで、外部からのサイバー攻撃や不正アクセスからサーバーを保護します。ネットワークレベルのセキュリティ対策として基本中の基本であり、AWSで仮想ネットワーク(VPC)内にサーバーを立ち上げる際には、必ずこのセキュリティグループを設定して、どのポートを誰に対して開くかを定義する必要があります。デフォルトでは、すべてのインバウンド(外部からサーバーへの)通信は「拒否」されるように安全な設定になっています。
具体例
セキュリティグループを現実世界に例えると、マンションの「各部屋のドアの前に立っている専属の警備員」のようなものです。
この警備員は、あらかじめ渡された「許可リスト(ルール)」に従って、訪問者を通すかどうかを判断します。例えば、Webサーバー(会社のホームページを置いているサーバー)を立ち上げる場合、警備員には「インターネット上の誰からでも(送信元:0.0.0.0/0)、Webの通信(ポート番号:80や443)だけは通してよい」というルールを指示します。しかし、「管理用の通信(SSHのポート22番)」については、「会社のオフィスのIPアドレスから来た人だけ通してよい。それ以外の見知らぬ人はすべて追い返せ」と厳格に指示します。これにより、一般の訪問者はWebサイトを閲覧できますが、悪意のあるハッカーがサーバーを乗っ取ろうとして管理用ポートに接続してきても、警備員(セキュリティグループ)がドアの手前で通信を弾き返してくれます。
もう少し詳しく
セキュリティグループには技術的に重要な「ステートフル(Stateful)」という特性があります。ステートフルとは、通信の「状態(State)」を記憶しているということです。例えば、サーバー側から外部のインターネットへ何らかのデータのリクエスト(アウトバウンド通信)を送った場合、セキュリティグループはその通信を記憶しています。そのため、そのリクエストに対する外部からの「戻りの通信(レスポンス)」については、インバウンドルールで明示的に許可していなくても、自動的に通してくれます。これにより、設定が非常にシンプルになります。(逆に、後述するネットワークACLは「ステートレス」であり、行きと戻りの両方のルールを個別に設定する必要があります)。
セキュリティグループのルールは、「許可(Allow)」のみを設定でき、「拒否(Deny)」のルールを作成することはできません。リストに書かれていない通信は、すべて暗黙的に拒否(Deny all)される仕様です。また、セキュリティグループはサブネット(ネットワークの区画)全体にかけるものではなく、EC2インスタンスの「ネットワークインターフェース(ENI)」単位、つまり個別のサーバー単位で割り当てられます。1つのインスタンスに複数のセキュリティグループを割り当てることも可能で、その場合はそれぞれのグループの許可ルールが合算されて適用されます。
試験でのポイント
AWS認定クラウドプラクティショナー(CLF-C02)試験において、セキュリティグループはネットワークセキュリティの要として非常に高い頻度で出題されます。以下の特徴を確実に暗記してください。
1. 「インスタンスレベル(個別のサーバー単位)」のファイアウォールである。(サブネットレベルで動作するのは「ネットワークACL」です)。
2. 「ステートフル」である。(行きの通信が許可されれば、戻りの通信も自動的に許可される)。
3. 「許可(Allow)ルールのみ」設定可能。(明示的な拒否ルールは作成できない)。
試験では、セキュリティグループとネットワークACLの特徴を混同させる問題がよく出ます。「EC2インスタンスを保護するステートフルなファイアウォールはどれか?」と問われたら、迷わずセキュリティグループを選択してください。また、SSH(ポート22)やRDP(ポート3389)へのアクセスを 0.0.0.0/0(世界中の誰からでも)で許可するのはセキュリティのアンチパターン(危険な設定)であるという知識も重要です。
関連する用語
関連用語として、セキュリティグループと対比されるサブネットレベルのステートレスファイアウォール「ネットワークACL」、サーバーを配置する仮想ネットワーク空間「Amazon VPC」、保護対象となる仮想サーバー「Amazon EC2」があります。