Linux インスタンスの Amazon EC2 セキュリティグループ - Amazon Elastic Compute Cloud

Linux インスタンスの Amazon EC2 セキュリティグループ

セキュリティグループは、EC2 インスタンスの仮想ファイアウォールとして機能し、受信トラフィックと送信トラフィックを制御します。インバウンドルールはインスタンスへの受信トラフィックを制御し、アウトバウンドルールはインスタンスからの送信トラフィックをコントロールします。インスタンスの起動時に 1 つ以上のセキュリティグループを指定できます。セキュリティグループを指定しない場合、Amazon EC2 はデフォルトのセキュリティグループを使用します。各セキュリティグループに対してルールを追加し、関連付けられたインスタンスに対するトラフィックを許可できます。セキュリティグループのルールはいつでも変更することができます。新規または変更したルールは、セキュリティグループに関連付けられたすべてのインスタンスに自動的に適用されます。トラフィックがインスタンスに到達することを許可するかどうかを Amazon EC2 が判断するとき、インスタンスに関連付けられているすべてのセキュリティグループのすべてのルールを評価します。

VPC でインスタンスを起動する場合は、その VPC 用に作成されたセキュリティグループを指定する必要があります。インスタンスを起動した後、そのセキュリティグループを変更することができます。セキュリティグループはネットワークインターフェイスに関連付けられます。インスタンスのセキュリティグループの変更は、プライマリネットワークインターフェイス (eth0) に関連付けられるセキュリティグループを変更することになります。詳細については、『Amazon VPC ユーザーガイド』の「インスタンスのセキュリティグループを変更する」を参照してください。あらゆるネットワークインターフェイスに関連付けられているセキュリティグループも変更できます。詳細については、「セキュリティグループを変更する」を参照してください。

セキュリティは、AWS とお客様の間の共有責任です。詳細については、「Amazon EC2におけるセキュリティ」を参照してください。AWS は、インスタンスをセキュリティで保護するためのツールの 1 つとしてセキュリティグループを提供しています。このセキュリティグループをセキュリティニーズに合わせて設定する必要があります。セキュリティグループでは十分に満たせない要件がある場合は、セキュリティグループの使用に加えて、どのインスタンスでも独自のファイアウォールを使用できます。

Windows インスタンスへのトラフィックを許可するには、Amazon EC2の「Windows インスタンスの Windows インスタンスの Amazon EC2 ユーザーガイド セキュリティグループ」を参照してください。

セキュリティグループのルール

セキュリティグループルールは、セキュリティグループに関連付けられたインスタンスに到達することを許可するインバウンドトラフィックを制御します。また、このルールによって、インスタンスから送信されるアウトバウンドトラフィックも制御されます。

セキュリティグループのルールの特徴を次に示します。

  • デフォルトで、セキュリティグループはすべてのアウトバウンドトラフィックを許可します。

  • セキュリティグループのルールは常にパーミッシブです。アクセスを拒否するルールを作成することはできません。

  • セキュリティグループルールを使用すると、プロトコルとポート番号に基づいてトラフィックをフィルタリングできます。

  • セキュリティグループはステートフルです。インスタンスからリクエストを送信すると、そのリクエストに対するレスポンストラフィックは、セキュリティグループのインバウンドルールにかかわらず、流入できます。つまり、VPC セキュリティグループの場合、アウトバウンドルールにかかわらず、許可されたインバウンドトラフィックは流れることができます。詳細については、「接続追跡」を参照してください。

  • ルールの追加と削除は随時行うことができます。変更は、セキュリティグループに関連付けられたインスタンスに自動的に適用されます。

    一部のルール変更の影響は、トラフィックの追跡方法によって異なる場合があります。詳細については、「接続追跡」を参照してください。

  • 複数のセキュリティグループを 1 つのインスタンスに関連付けると、各セキュリティグループのルールが効果的に集約され、1 つのルールセットが作成されます。 Amazon EC2 は、このルールセットを使用して、アクセスを許可するかどうかを決定します。

    セキュリティグループは、1 つのインスタンスに複数割り当てることができます。そのため、1 つのインスタンスに数百のルールが適用される場合があります。結果として、インスタンスにアクセスするときに問題が発生する可能性があります。そのため、ルールは可能な限り要約することをお勧めします。

ルールごとに、以下の点について指定します。

  • [Name (名前)]: セキュリティグループの名前 (my-security-group など)。

    名前の最大長は 255 文字です。使用できる文字は、a ~ z、A ~ Z、0 ~ 9、スペース、._-:/()#,@[]+=;{}!$* です。名前の末尾にスペースが含まれている場合、名前の保存時にスペースが削除されます。たとえば、名前に「Test Security Group 」と入力すると、「Test Security Group」として保存されます。

  • プロトコル: 許可するプロトコル。最も一般的なプロトコルは、6 (TCP)、17 (UDP)、1 (ICMP) です。

  • ポートの範囲: TCP、UDP、カスタムプロトコルの場合、許可するポートの範囲。1 つのポート番号 (22 など)、または一定範囲のポート番号 (7000-8000 など) を指定できます。

  • ICMP タイプおよびコード: ICMP の場合、ICMP タイプおよびコードです。

  • 送信元または送信先: トラフィックの送信元 (インバウンドルール) または送信先 (アウトバウンドルール)。これらのオプションの 1 つを指定します。

    • 個別の IPv4 アドレス。長さ /32 のプレフィックスを使用する必要があります (例: 203.0.113.1/32)。

    • 個別の IPv6 アドレス。長さ /128 のプレフィックスを使用する必要があります (例: 2001:db8:1234:1a00::123/128)。

    • CIDR ブロック表記での IPv4 アドレスの範囲 (例: 203.0.113.0/24)。

    • CIDR ブロック表記での IPv6 アドレスの範囲 (例: 2001:db8:1234:1a00::/64)。

    • プレフィックスリスト ID (例: pl-1234abc1234abc123)。詳細については、Amazon VPC ユーザーガイドの「プレフィックスリスト」を参照してください。

    • 別のセキュリティグループ。これにより、指定したセキュリティグループに関連付けられたインスタンスからこのセキュリティグループに関連付けられたインスタンスへのアクセスが許可されます。このオプションを選択しても、送信元のセキュリティグループからこのセキュリティグループにルールが追加されることはありません。以下のセキュリティグループの 1 つを指定できます:

      • 現在のセキュリティグループ。

      • 同じ VPC の異なるセキュリティグループ

      • VPC ピア接続のピア VPC の別のセキュリティグループ。

  • (オプション) 説明: 後で分かりやすいように、このルールの説明を追加できます。説明の長さは最大 255 文字とすることができます。使用できる文字は、a ~ z、A ~ Z、0 ~ 9、スペース、._-:/()#,@[]+=;{}!$* です。

ルールに送信元または送信先としてセキュリティグループを指定する場合、ルールはセキュリティグループに関連付けられているすべてのインスタンスに影響します。着信トラフィックは、ソースセキュリティグループに関連付けられたインスタンスのプライベート IP アドレスに基づいて許可されます (パブリック IP アドレスまたは Elastic IP アドレスは考慮されません)。IP アドレスについては、Amazon EC2 インスタンスの IP アドレス指定 を参照してください。セキュリティグループルールでピア VPC のセキュリティグループを参照していて、参照先のセキュリティグループまたは VPC ピア接続を削除すると、ルールは古いとマークされます。詳細については、『Amazon VPC Peering Guide』の「古いセキュリティグループルールの操作」を参照してください。

特定のポートに複数のルールがある場合、Amazon EC2 が最も許容度の大きいルールを適用します。たとえば、IP アドレス 203.0.113.1 からの TCP ポート 22 (SSH) に対するアクセスを許可するルールがあり、全員からの TCP ポート 22 に対するアクセスを許可する別のルールがある場合、全員が TCP ポート 22 にアクセスできます。

接続追跡

セキュリティグループは、接続追跡を使用してインスタンスを出入りするトラフィックに関する情報を追跡します。ルールはトラフィックの接続の状態に基づいて適用され、トラフィックを許可するか拒否するかが判断されます。このアプローチにより、セキュリティグループをステートフルにすることができます。これは、セキュリティグループのアウトバウンドルールにかかわらず、インバウンドトラフィックに対するレスポンスがインスタンスから送信されることを許可することを意味します。逆も同じです。たとえば、自宅のコンピュータからインスタンスへの ICMP ping コマンドを開始した場合、セキュリティグループのインバウンドルールが ICMP トラフィックを許可している場合は接続に関する情報 (ポート情報など) が追跡されます。ping コマンドに対するインスタンスからのレスポンストラフィックは、新しいリクエストではなく確立済みの接続として追跡され、セキュリティグループのアウトバウンドルールがアウトバウンド ICMP トラフィックを制限している場合でも、インスタンスから外に流れることが許されます。

すべてのトラフィックフローが追跡されるわけではありません。セキュリティグループのルールが、すべてのトラフィック (0.0.0.0/0 または ::/0) について TCP または UDP フローを許可していて、他の方向ですべてのポート (0~65535) のすべての応答トラフィック (0.0.0.0/0 または ::/0) を許可するルールがある場合、そのトラフィックフローは追跡されません。そのため、応答トラフィックは追跡情報に基づくのではなく、応答トラフィックを許可するインバウンドまたはアウトバウンドのルールに基づいて流れることができます。

次の例では、セキュリティグループに TCP および ICMP トラフィック別のインバウンドルールと、すべてのアウトバウンド IPv4 および IPv6 トラフィックを許可するアウントバウンドルールがあります。

インバウンドルール
プロトコルのタイプ ポート番号 送信元 IP
TCP 22 (SSH) 203.0.113.1/32
TCP 80 (HTTP) 0.0.0.0/0
TCP 80 (HTTP) ::/0
ICMP すべて 0.0.0.0/0
アウトバウンドルール
プロトコルのタイプ ポート番号 送信先 IP
すべて すべて 0.0.0.0/0
すべて すべて ::/0

インバウンドルールでは 203.0.113.1/32 からのトラフィックのみ許可されるため、インスタンスに出入りするポート 22 の TCP トラフィック (SSH) は追跡されますが、必ずしもすべての IP アドレス (0.0.0.0/0) が追跡されるとは限りません。インバウンドルールとアウトバウンドルールの両方ですべてのトラフィック (0.0.0.0/0 または ::/0) が許可されるため、インスタンスに出入りするポート 80 の TCP トラフィック (HTTP) は追跡されません。ICMP トラフィックは、ルールにかかわらず、常に追跡されます。セキュリティグループからアウトバウンドルールを削除すると、インスタンスで送受信されるすべてのトラフィック (ポート 80 (HTTP) のトラフィックを含む) が追跡されます。

追跡されていないトラフィックフローは、そのフローを有効にするルールが削除または変更されるとすぐに中断されます。たとえば、オープン (0.0.0.0/0) のアウトバウンドルールがあり、インスタンスへのすべて(0.0.0.0/0) のインバウンドの SSH (TCP ポート 22) トラフィックを許可するルールを削除した場合 (または接続を許可しないように変更した場合)、インスタンスへの既存の SSH 接続はすぐに中断されます。接続はそれまで追跡されていないため、この変更によって接続が切断されます。一方、最初に細かく SSH 接続を許可する (つまり、接続を追跡する) インバウンドルールがあり、現在の SSH クライアントのアドレスからの新しい接続を許可しないようにルールを変更する場合は、ルールを変更しても既存の接続は切断されません。

TCP、UDP、または ICMP 以外のプロトコルの場合は、IP アドレスとプロトコル番号のみが追跡されます。インスタンスが別のホスト (ホスト B) にトラフィックを送信し、ホスト B が元のリクエストまたはレスポンスから 600 秒以内に別のリクエストで同じタイプのトラフィックをインスタンスに対して開始する場合、インスタンスはセキュリティグループのインバウンドルールにかかわらず、そのトラフィックを受け入れます。これは、レスポンスのトラフィックとみなされるためです。

セキュリティグループルールを削除するとトラフィックがすぐに中断されるようにするか、すべてのインバウンドトラフィックをファイアウォールルールの対象にするには、サブネットにネットワーク ACL を使用できます。ネットワーク ACL はステートレスであるため、レスポンスのトラフィックを自動的には許可しません。詳細については、Amazon VPC ユーザーガイドの「ネットワーク ACL」を参照してください。

デフォルトのセキュリティグループ

AWS アカウントには、各リージョンのデフォルト VPC のデフォルトセキュリティグループが自動的に設定されます。インスタンスを起動するときにセキュリティグループを指定しないと、そのインスタンスは VPC のデフォルトのセキュリティグループに自動的に関連付けられます。

デフォルトのセキュリティグループには default と名前が付けられ、AWS によって ID が割り当てられます。デフォルトのセキュリティグループごとのデフォルトルールを次に示します。

  • デフォルトのセキュリティグループと関連付けられている他のインスタンスからのインバウンドトラフィックのみが許可されます。デフォルトのセキュリティグループは、それ自体をインバウンドルールの送信元のセキュリティグループとして指定します。

  • インスタンスからのすべてのアウトバウンドトラフィックが許可されます。

デフォルトのセキュリティグループのインバウンドおよびアウトバウンドルールは追加または削除できます。

デフォルトのセキュリティグループを削除することはできません。デフォルトセキュリティグループを削除しようとした場合、Client.CannotDelete: the specified group: "sg-51530134" name: "default" cannot be deleted by a user のエラーが発生します。

Custom security groups

インスタンスでデフォルトのセキュリティグループを使用することを望まない場合、独自のセキュリティグループを作成して、インスタンスの起動時にそれらを指定することができます。複数のセキュリティグループを作成して、インスタンスが果たすさまざまな役割 (たとえば、Web サーバーまたはデータベースサーバー) を反映させることができます。

セキュリティグループを作成する場合、名前と説明を指定する必要があります。セキュリティグループには、255 文字以下の名前と説明を指定できます。また、次の特徴の制限があります。

a-z、A-Z、0-9、スペース、および._-:/()#,@[]+=&;{}!$*

セキュリティグループ名は、sg- で開始できません。セキュリティグループ名は VPC で一意である必要があります。

作成するセキュリティグループのデフォルトルールを次に示します。

  • インバウンドトラフィックを許可しません

  • すべてのアウトバウンドトラフィックを許可します

セキュリティグループを作成したら、関連するインスタンスに到達できる着信トラフィックのタイプを反映するように着信ルールを変更できます。アウトバウンドルールも変更できます。

セキュリティグループに追加できるルールのタイプの詳細については、「セキュリティグループのルールのリファレンス」を参照してください。