
AWS環境のネットワーク保護に欠かせない「セキュリティグループ」。仮想ファイアウォールとしてEC2インスタンス等の通信を制御する重要な機能ですが、NACLとの違いや適切な設定方法に悩む方も多いのではないでしょうか。
この記事で分かること
- セキュリティグループの基本的な役割と仕組み
- NACL(ネットワークACL)との違いと使い分け
- インバウンド・アウトバウンドルールの設定手順
- 安全な運用のためのベストプラクティス
結論として、セキュリティグループは「ステートフル」な通信制御を行い、最小権限の原則に基づいて必要なポートのみを開放することが重要です。本記事を読めば、AWSのネットワークセキュリティを迷わず適切に設計・運用できるようになります。
AWSのセキュリティグループとは
AWSのセキュリティグループは、Amazon Web Services(AWS)環境における仮想的なファイアウォールとして機能する重要なセキュリティ機能です。主にAmazon EC2インスタンスやRDSデータベースなど、VPC(Virtual Private Cloud)内に配置された各リソースに対するネットワークトラフィックを制御するために利用されます。
オンプレミス環境におけるファイアウォールと同様に、不正なアクセスを防ぎ、安全な通信のみを許可するための第一の防壁となります。AWS上のシステムを安全に運用するためには、このセキュリティグループの仕組みを正しく理解し、適切に設計することが不可欠です。
セキュリティグループの基本的な役割
セキュリティグループの最も基本的な役割は、AWSリソースに出入りする通信(トラフィック)をIPアドレスやポート番号、プロトコルに基づいて制御することです。あらかじめ設定した条件に一致する通信のみを許可する「ホワイトリスト方式」を採用しています。
具体的には、以下のような制御を行うことができます。
- 特定のIPアドレスからのSSH接続やRDP接続のみを許可する
- インターネット全体からWebサーバーへのHTTPおよびHTTPS通信を許可する
- アプリケーションサーバーからデータベースサーバーへの特定のポートを通じた通信のみを許可する
また、セキュリティグループはリソース単位(正確にはインスタンスのネットワークインターフェイス単位)で適用されるため、同じサブネット内に配置されたリソースであっても、それぞれ異なるセキュリティルールを割り当てることが可能です。詳細な仕様や最新の機能については、Amazon VPC ユーザーガイドのセキュリティグループに関するドキュメントで確認することができます。
ステートフルな通信制御の仕組み
セキュリティグループの大きな特徴として、「ステートフル」な通信制御を行っている点が挙げられます。ステートフルとは、通信の状態(ステート)をシステム側で記憶し、追跡する仕組みのことです。
リクエストとして許可された通信に対する戻りのトラフィックは、明示的な許可ルールがなくても自動的に許可されるという特性を持っています。例えば、インターネットからWebサーバーへのインバウンド通信(ポート80や443)を許可した場合、Webサーバーからクライアントへ応答を返すためのアウトバウンド通信は、アウトバウンドルールで許可されていなくても自動的に通ります。
このステートフルな特性により、行きと戻りの通信をそれぞれ個別に設定する手間が省け、ルールの管理がシンプルになるというメリットがあります。
インバウンドルールとアウトバウンドルール
セキュリティグループのルールは、通信の方向に応じて「インバウンドルール」と「アウトバウンドルール」の2つに分けて設定します。それぞれのルールの役割と、セキュリティグループを新規作成した際のデフォルトの挙動は以下の通りです。
| ルールの種類 | 通信の方向 | デフォルトの設定 | 設定のポイント |
|---|---|---|---|
| インバウンドルール | 外部からAWSリソースへ入ってくる通信 | すべての通信を拒否 | 必要なIPアドレスやポート番号からの通信のみを明示的に許可する |
| アウトバウンドルール | AWSリソースから外部へ出ていく通信 | すべての通信を許可 | セキュリティ要件が厳しい場合は、必要な外部通信のみに絞り込む |
デフォルトでは、外部からの予期せぬアクセスを防ぐためにインバウンド通信はすべて遮断されています。そのため、システムを稼働させるには、要件に合わせて適切なインバウンドルールを追加する必要があります。一方で、アウトバウンド通信は初期状態で制限がないため、より厳格なセキュリティが求められる環境では、アウトバウンドルールの見直しも重要となります。
AWSのセキュリティグループとNACLの違い
AWS上で安全なネットワーク環境を構築するためには、セキュリティグループとNACL(ネットワークアクセスコントロールリスト)の違いを正確に理解し、適切に使い分けることが不可欠です。どちらも仮想ファイアウォールとして機能しますが、適用される範囲やトラフィックの制御方法に明確な違いがあります。
両者の主な違いを以下の表にまとめました。
| 比較項目 | セキュリティグループ | NACL(ネットワークACL) |
|---|---|---|
| 適用範囲 | インスタンス(ENI)レベル | サブネットレベル |
| 状態の保持 | ステートフル | ステートレス |
| ルールの種類 | 許可ルールのみ | 許可ルールと拒否ルールの両方 |
| 評価順序 | すべてのルールを評価 | ルール番号の小さい順に評価 |
NACL(ネットワークACL)とは
NACLは、Amazon VPCにおけるサブネットレベルのトラフィックを制御するオプションのセキュリティレイヤーです。セキュリティグループが個々のインスタンスを保護するのに対し、NACLはサブネットに出入りするトラフィック全体に対する関所のような役割を果たします。
AWS公式ドキュメントのネットワーク ACLでも説明されている通り、デフォルトのNACLはすべてのインバウンドおよびアウトバウンドトラフィックを許可しますが、カスタムNACLを作成して特定のIPアドレスからの通信をブロックするなど、より厳格なアクセス制御を行うことが可能です。
ステートフルとステートレスの違い
両者の最も決定的な違いの一つが、トラフィックの状態(ステート)を記憶するかどうかという点です。セキュリティグループはステートフルであり、リクエストに対する戻りの通信が自動的に許可されます。たとえば、インバウンドで特定のポートを許可していれば、その通信に対するアウトバウンドの応答はルールに関わらず許可される仕組みです。
一方で、NACLはステートレスな仕組みを採用しています。インバウンドとアウトバウンドのトラフィックはそれぞれ独立して評価されるため、戻りの通信を許可するためには、アウトバウンドルールでも明示的にエフェメラルポートなどの許可設定を行う必要があります。
適用範囲と評価順序の違い
セキュリティグループとNACLでは、適用される範囲とルールの評価順序も異なります。これらの特性を組み合わせることで、多層防御(Defense in Depth)を実現できます。
適用範囲の違い
適用対象となるリソースについて、以下のような明確な違いがあります。
- セキュリティグループ:EC2インスタンスやRDSなどのネットワークインターフェイス(ENI)に直接アタッチされます。同一サブネット内であっても、インスタンスごとに異なるルールを適用できます。
- NACL:サブネット全体に適用されます。サブネット内のすべてのインスタンスは、自動的にそのNACLのルールの影響を受けます。
評価順序と許可・拒否の設定
セキュリティグループは「許可」のルールのみを設定でき、トラフィックを評価する際はすべてのルールが総合的に判断されます。明示的に許可されていない通信は、デフォルトで暗黙的に拒否されます。
対照的に、NACLは「許可」だけでなく「拒否」のルールも設定可能です。NACLのルールには番号が割り当てられており、番号の小さいものから順番に評価されます。トラフィックが特定のルールに一致した時点でその後のルールは評価されず、許可または拒否が即座に決定されるという特徴を持っています。
AWSのセキュリティグループの基本設定手順
AWS環境で安全なネットワークを構築するためには、セキュリティグループの正しい設定が欠かせません。ここでは、AWSマネジメントコンソールを使用した具体的な設定手順を、新規作成からEC2インスタンスへのアタッチまで順番に解説します。
セキュリティグループの新規作成方法
まずは、VPC(Virtual Private Cloud)内に新しいセキュリティグループを作成します。作成手順は以下の通りです。
- AWSマネジメントコンソールにログインし、EC2ダッシュボードを開きます。
- 左側のナビゲーションペインから「ネットワーク&セキュリティ」の下にある「セキュリティグループ」を選択します。
- 画面右上の「セキュリティグループを作成」ボタンをクリックします。
- 「基本的な詳細」セクションで、セキュリティグループ名、説明、および作成対象のVPCを指定します。
セキュリティグループ名と説明は後から変更できないため、用途が明確に伝わる名前をつけることが重要です。例えば、「web-server-sg」や「db-server-sg」のように命名すると管理が容易になります。
インバウンドルールの追加と編集
セキュリティグループを作成する際、または作成後にインバウンドルール(外部からインスタンスへの通信許可)を設定します。デフォルトではすべてのインバウンドトラフィックが拒否されているため、必要な通信のみを明示的に許可する必要があります。
| 設定項目 | 説明 | 設定例(Webサーバーの場合) |
|---|---|---|
| タイプ | 許可する通信のプロトコルや用途を選択します。 | HTTP / HTTPS / SSH |
| プロトコル | TCP、UDP、ICMPなどが自動または手動で設定されます。 | TCP |
| ポート範囲 | 通信を許可するポート番号を指定します。 | 80 / 443 / 22 |
| ソース | 通信を許可する送信元のIPアドレスやセキュリティグループを指定します。 | 0.0.0.0/0(HTTP/HTTPS) / マイIP(SSH) |
特に注意すべき点は、SSH(ポート22)やRDP(ポート3389)などの管理用ポートの設定です。これらのポートを「任意の場所(0.0.0.0/0)」に公開すると、サイバー攻撃のリスクが著しく高まります。必ず「マイIP」や特定の社内IPアドレスのみに制限するようにしてください。詳細なルールの設定方法については、Amazon VPC ユーザーガイドのセキュリティグループのルールも参考にしてください。
アウトバウンドルールの設定ポイント
アウトバウンドルールは、インスタンスから外部への通信を制御します。セキュリティグループを新規作成した直後のデフォルト設定では、すべてのアウトバウンドトラフィックが許可(0.0.0.0/0)されています。
一般的なWebサーバーなどであればデフォルトのままでも問題なく動作しますが、より厳格なセキュリティが求められるシステムでは、アウトバウンド通信も制限することが推奨されます。例えば、データベースサーバーのセキュリティグループでは、アウトバウンドの宛先を特定のWebサーバーのセキュリティグループのみに限定することで、万が一データベースサーバーが侵害された場合でも、外部への不正なデータ持ち出しやマルウェアのダウンロードを防ぐことができます。
EC2インスタンスへのアタッチ方法
作成してルールを設定したセキュリティグループは、対象となるEC2インスタンスに関連付け(アタッチ)することで初めて機能します。アタッチはインスタンスの起動時だけでなく、稼働中のインスタンスに対しても無停止で行うことが可能です。
- EC2ダッシュボードから「インスタンス」を選択し、対象のインスタンスにチェックを入れます。
- 画面右上の「アクション」メニューから「セキュリティ」を選択し、「セキュリティグループを変更」をクリックします。
- 関連付けたいセキュリティグループを検索して追加し、不要なものを削除してから「保存」をクリックします。
1つのEC2インスタンスには複数のセキュリティグループをアタッチすることができます。複数のセキュリティグループがアタッチされた場合、それぞれの許可ルールは統合(OR条件で評価)されて適用されます。
AWSのセキュリティグループ運用ベストプラクティス
AWS環境を安全かつ効率的に運用するためには、セキュリティグループの適切な設計と管理が欠かせません。ここでは、セキュリティリスクを最小限に抑えつつ、運用負荷を軽減するためのベストプラクティスを解説します。
最小権限の原則に基づくルール設定
セキュリティグループを設計する上で最も重要なのが、最小権限の原則(Principle of Least Privilege)を徹底することです。必要な通信のみを許可し、それ以外はすべて拒否する状態を維持する必要があります。
- 接続元のIPアドレスを社内ネットワークや特定の拠点に限定する
- システム稼働に必要なポート番号(プロトコル)のみを開放する
- IPアドレスではなく、他のセキュリティグループIDを送信元として指定する
特に、すべてのIPアドレスからの通信を許可する「0.0.0.0/0」の指定は、WebサーバーのHTTP/HTTPS通信など外部公開が必要不可欠な場合を除き避けるべきです。データベースなどのバックエンドシステムへのアクセスは、フロントエンドにアタッチされたセキュリティグループIDをインバウンドルールの送信元として指定することで、より安全で柔軟な構成を実現できます。設定の詳細はAmazon VPC ユーザーガイドなどの公式ドキュメントも参考にしてください。
不要なポートの開放を防ぐ管理方法
運用が長期化すると、テスト目的で一時的に追加したルールがそのまま放置されるなど、不要なポートが開放されたままになるリスクが高まります。これを防ぐためには、定期的な監査とAWSのマネージドサービスの活用が不可欠です。
- AWS Trusted Advisorを利用して過剰な権限を持つルールを検知する
- AWS Configを有効化し、セキュリティグループの変更履歴を記録・監視する
- 不要になったルールや、どのアセットにもアタッチされていないセキュリティグループを定期的に削除する
AWS Trusted Advisorのセキュリティチェック機能を活用すれば、特定のポートに対する無制限のアクセスを自動的に検知してダッシュボードで警告してくれます。定期的な棚卸しを運用フローに組み込むことで、意図しないアクセス経路を塞ぎ、セキュアな状態を維持できます。
セキュリティグループの命名規則
複数のシステムや環境が混在するAWSアカウントでは、セキュリティグループの用途や適用範囲を明確にするための命名規則を定めることが重要です。グループ名やNameタグを見るだけで、どのリソースに適用されるものかが判別できるように設計しましょう。
以下の表は、推奨される命名規則の構成要素とその具体例です。
| 構成要素 | 説明 | 具体例 |
|---|---|---|
| システム名 | 対象となるプロジェクトやサービス名 | myapp, ec, crm |
| 環境名 | 本番(prd)、開発(dev)、検証(stg)などの稼働環境 | prd, dev, stg |
| 役割(コンポーネント) | Webサーバー、DBサーバー、ロードバランサーなどの役割 | web, db, alb |
この規則に従ってハイフンで繋ぐと「myapp-prd-web-sg」のような名前になり、本番環境のWebサーバー用であることが一目でわかります。また、各ルールの説明(Description)フィールドにも、通信を許可した理由や申請のチケット番号などを記載しておくことで、後任の担当者がルールの要否を判断しやすくなります。
AWSのセキュリティグループに関するよくある質問
ここでは、AWSのセキュリティグループに関してよく寄せられる疑問とその回答をまとめました。運用時や設計時の参考にしてください。
AWSのセキュリティグループとは何ですか
AWSのセキュリティグループとは、EC2インスタンスやRDSなどのAWSリソースに対して、許可する通信(インバウンドおよびアウトバウンド)を制御するための仮想ファイアウォールです。VPC(Virtual Private Cloud)内でネットワークトラフィックを安全に管理するうえで、最も基本的かつ重要なセキュリティ機能の1つとして位置づけられています。
セキュリティグループの料金はいくらですか
セキュリティグループの利用自体に追加の料金は発生しません。AWSアカウントを作成し、VPCやEC2インスタンスなどのリソースを利用する際に、標準機能として無料で提供されています。ただし、セキュリティグループを適用しているEC2インスタンスやNATゲートウェイなどのAWSリソースそのものや、発生するデータ転送量に対しては通常のAWS料金がかかります。
セキュリティグループのルール数に上限はありますか
はい、セキュリティグループにはAWSによって定められたクォータ(上限)が存在します。デフォルトの設定では以下のようになっていますが、必要に応じてAWS公式ドキュメントに記載されている手順に従い、AWS Service Quotasから上限引き上げのリクエストが可能です。
| 項目 | デフォルトの上限 |
|---|---|
| 1つのVPCあたりのセキュリティグループ数 | 2,500 |
| 1つのネットワークインターフェース(ENI)にアタッチできるセキュリティグループ数 | 5 |
| 1つのセキュリティグループあたりのインバウンドルールの数 | 60 |
| 1つのセキュリティグループあたりのアウトバウンドルールの数 | 60 |
ルール数を計算する際、IPv4とIPv6のルールはそれぞれ個別にカウントされる点に注意してください。
セキュリティグループとNACLのどちらを使うべきですか
結論から言うと、どちらか一方を選ぶのではなく、両方を組み合わせて多層防御を構築することが推奨されています。
セキュリティグループはインスタンス単位でステートフルな通信制御を行うのに対し、NACL(ネットワークアクセスコントロールリスト)はサブネット単位でステートレスな通信制御を行います。基本的には柔軟な設定が可能なセキュリティグループをメインのアクセス制御として利用し、特定のIPアドレスからの悪意ある通信をサブネット境界で一括して明示的にブロック(Deny)したい場合などにNACLを補助的に活用するのが一般的な設計です。
セキュリティグループの変更はいつ反映されますか
セキュリティグループのルールの追加、変更、削除を行った場合、その変更は即座に反映されます。反映を待つ時間や、適用されているEC2インスタンスの再起動などは一切不要です。ただし、ステートフルな性質を持つため、すでに確立されているセッションの通信フローによっては、変更後も一時的に通信が継続されるケースがある点には留意してください。
まとめ
この記事では、AWSのセキュリティグループの基本からNACLとの違い、設定手順や運用のベストプラクティスまでを解説しました。重要なポイントは以下の通りです。
- セキュリティグループはインスタンス単位で通信を制御する仮想ファイアウォールです。
- ステートフルな通信制御を行うため、許可されたリクエストに対する戻りのトラフィックは自動的に許可されます。
- サブネット単位でステートレスな制御を行うNACLと組み合わせることで、多層的な防御が可能になります。
- 運用時は最小権限の原則を守り、不要なポートの開放を防ぐことが重要です。
セキュリティグループの適切な設定は、AWS環境を安全に保つための第一歩です。まずはテスト用のEC2インスタンスを立ち上げ、実際の画面でルールの追加や変更を実践してみましょう。










