セキュリティグループは、Elastic Compute Service (ECS) インスタンスのインバウンドおよびアウトバウンドのトラフィックを制御します。このトピックでは、セキュリティグループを計画するための原則について説明し、Web サービス、リモートアクセス、データベースアクセス、内部ネットワーク通信などの一般的なユースケースにおけるルール設定例を紹介します。
セキュリティグループのガイドライン
1. セキュリティグループの計画
セキュリティグループを設定する前に、どのサービスをパブリックインターネットに公開し、どのサービスを内部アクセスに限定するかなど、サービスの境界とセキュリティ要件を特定します。
公開サービスと内部サービスで異なるセキュリティグループを使用
公開サービスの場合は、必要なポートのみを開放し、他のすべてのポートとプロトコルを閉じて攻撃対象領域を減らします。
データベースやキャッシュなどの内部サービスは、パブリックインターネットアクセスを持たない ECS インスタンスにデプロイします。その後、別のセキュリティグループからのアクセスを許可することで、内部アクセスが可能になります。
アプリケーションごとに異なるセキュリティグループを使用
アプリケーションが異なれば、通常は必要となるポートも異なります。ルールが互いに干渉しないように、別々のセキュリティグループに配置します。
たとえば、Linux インスタンスは SSH アクセス用に TCP ポート 22 を必要とし、Windows インスタンスはリモートデスクトップアクセス用に TCP ポート 3389 を必要とする場合があります。
インスタンスが同じイメージタイプを使用していても、提供するサービスが異なり、内部ネットワーク経由で互いに通信する必要がない場合は、異なるセキュリティグループに割り当てます。この方法により、分離と将来の変更が容易になります。
アプリケーションを計画する際には、ネットワークセグメントとセキュリティグループを組み合わせてサービスの境界を定義できます。
本番環境とテスト環境でセキュリティグループを分離
テスト用のルールが本番サービスに影響を与えないように、本番環境、テスト環境、開発環境で異なるセキュリティグループを使用します。
複数のテスト環境に異なるセキュリティグループを割り当てることで、それらの間の干渉を減らすこともできます。
パブリックアクセスを必要としないリソースにパブリック IP アドレスを割り当てない
公開される範囲を最小限に抑えるため、Workbench、セッションマネージャー、またはジャンプサーバーを使用して ECS インスタンスに接続することを推奨します。インスタンスにパブリック IP アドレスがない場合は、ポートフォワーディング機能を使用してそのサービスにアクセスできます。詳細については、「インスタンスにパブリック IP アドレスがない場合にセッションマネージャークライアントのポートフォワーディング機能を使用してアクセスする」をご参照ください。
分散アプリケーションでは、公開サービスを提供しない ECS インスタンスにはパブリック IP アドレスを割り当てないでください。複数のサーバーが公開サービスを提供する場合は、 を使用してトラフィックを分散させ、単一障害点を回避することを推奨します。
ECS インスタンスがインターネットへのアウトバウンドアクセスのみを必要とする場合は、NAT ゲートウェイを使用して SNAT ルールを設定します。このアプローチにより、パブリック IP アドレスまたは Elastic IP アドレスを割り当てた際に発生しうるサービスの公開を防ぐことができます。詳細については、「SNAT エントリの作成と管理」をご参照ください。
セキュリティグループをホワイトリストとして使用
セキュリティグループはホワイトリストとして扱います。これは、デフォルトですべてのアクセスを拒否し、必要なポートと許可されたソースに対してのみ許可ルールを追加することを意味します。本番環境の問題をトラブルシューティングする際に、一時的にパブリック IP アドレスを割り当てたり、Elastic IP アドレスを関連付けたりしないでください。これにより攻撃対象領域が拡大する可能性があります。
2. セキュリティグループルールの設定
セキュリティグループルールを設定する際には、ビジネスで必要なポートのみを開放し、ソース IP アドレスの範囲を可能な限り制限してください。
VPC では、1 つのセキュリティグループルールでパブリックネットワークと内部ネットワークの両方のアクセスを制御できます。
基本セキュリティグループと高度セキュリティグループでデフォルトポリシーが異なる
基本セキュリティグループと高度セキュリティグループはどちらも、デフォルトですべてのインバウンドトラフィックを拒否します。ただし、デフォルトのアウトバウンドポリシーは異なり、基本セキュリティグループはすべてのアウトバウンドトラフィックを許可しますが、高度セキュリティグループはそれを拒否します。
セキュリティグループおよびセキュリティグループタイプによって内部接続性が異なる
異なるセキュリティグループ内の ECS インスタンスは、同じアカウントに属していても、内部ネットワーク経由で互いに通信することはできません。デフォルトでは、インスタンスは同じ基本セキュリティグループ内では通信できますが、同じ高度セキュリティグループ内では通信できません。
最小権限の原則に基づいてセキュリティグループルールを追加
たとえば、リモートログインのために Linux インスタンスのポート 22 を開放する場合、特定の IP アドレスからのアクセスのみを許可します。
警告0.0.0.0/0 または ::/0 を許可すると、すべての IP アドレスからのアクセスが許可され、リスクの高い設定となります。これは公開が必要なサービスにのみ使用し、必要なポートのみを開放してください。
可能な限り最も制限的な範囲でルールを設定してください。セキュリティグループがサポートする許可対象のタイプに関する詳細については、「セキュリティグループルール」をご参照ください。
最小権限の原則を使用してグループ内分離を設定
基本セキュリティグループ内の ECS インスタンスが互いに通信する必要がない場合は、グループの内部アクセスポリシーを変更してインスタンス間を分離します。
単一のセキュリティグループ内のルールの目的を一貫させる
ルールをその目的に基づいて複数のセキュリティグループに整理し、インスタンスを関連するセキュリティグループに関連付けます。ルールが多すぎる単一のセキュリティグループでは、管理が複雑になります。
許可対象を慎重に選択
セキュリティグループルールの許可対象は、IP アドレス、別のセキュリティグループ、または CIDR ブロックにすることができます。
異なるセキュリティグループのインスタンスが内部ネットワーク経由で通信する必要がある場合は、セキュリティグループ ID を参照してアクセスを許可します。この方法は、個々の IP アドレスや CIDR ブロックを管理するよりも効率的です。たとえば、Web 層で
sg-webという名前のセキュリティグループを使用し、データベース層でsg-databaseを使用する場合、sg-databaseにルールを追加して、sg-webから MySQL ポート (3306) へのアクセスを許可できます。内部ネットワークアクセスには、CIDR ブロックの代わりに、ソースセキュリティグループを指定してアクセスを許可することを推奨します。
一般的なアプリケーションポート
多くのアプリケーションは、標準のサービスポートを使用して通信します。詳細については、「共通ポート」をご参照ください。
3. ルールのレビューと最適化
ビジネスの進化に伴い、既存のセキュリティグループルールが古くなることがあります。定期的にレビューし、調整してください。本番環境でルールを変更する前に、セキュリティグループを複製し、テスト環境で変更を検証します。トラフィックが正しく流れることを確認した後、サービスの停止を避けるために、本番環境に変更を適用します。
ユースケース
ECS インスタンスへのインバウンドトラフィックの制御
インバウンドトラフィックとは、外部リソースから ECS インスタンスへのトラフィックです。デフォルトでは、セキュリティグループはすべてのインバウンドトラフィックを拒否するため、アクセスを許可するルールを追加するだけで済みます。次のユースケースをご参照ください。
ECS インスタンスからのアウトバウンドトラフィックの制御
アウトバウンドトラフィックとは、ECS インスタンスから外部リソースへのトラフィックです。デフォルトでは、基本セキュリティグループのアウトバウンドルールはすべてのアクセスを許可します。拒否ルールを追加して、インスタンスから指定された外部リソースへのアクセスを制限できます。次のユースケースをご参照ください。
ケース 1:Web サービスへのパブリックアクセスの許可
ECS インスタンスでホストされている公開 Web サイトの場合、インバウンドの TCP ポート 80 (HTTP) と 443 (HTTPS) のみを開放します。他のサービスポートは閉じたままにしてください。
次の表に、このセキュリティグループルールの設定例を示します。
ルールの方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 許可対象 |
インバウンド | 許可 | 1 | カスタム TCP | サービスポート:
| ソース: 0.0.0.0/0 |
セキュリティグループルールを追加しても Web サイトにアクセスできない場合は、サービスポートが正しく機能しているか確認してください。詳細については、「ECS インスタンスからアクセスできないサービスのトラブルシューティング」をご参照ください。
ケース 2:特定ユーザーのリモートアクセスの許可
ECS インスタンスにリモートで接続する必要がある場合は、攻撃のリスクを減らすために、TCP ポート 22 (SSH) やカスタム SSH ポートなどのリモートログインポートは、管理者または特定のサーバーの IP アドレスからのみアクセスできるように開放します。
次の表に、このセキュリティグループルールの設定例を示します。
ルールの方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 許可対象 |
インバウンド | 許可 | 1 | カスタム TCP |
| ソース: 192.168.XX.XX 説明 接続方法に応じて、特定のユーザーまたはサーバーのパブリック IP アドレスまたはプライベート IP アドレスを入力します。 whatismyip.com などの Web サイトを使用して、ローカルのパブリック IP アドレスを確認できます。 |
Alibaba Cloud Workbench を使用してインスタンスにリモート接続する場合は、特定の許可対象からのアクセスのみを許可します。次の表に、[インバウンド]セキュリティグループルールの例を示します。
アクション | 優先度 | プロトコルタイプ | ポート範囲 | 許可対象 |
[許可] | 1 | [カスタム TCP] |
|
|
ケース 3:データベースのセキュリティポリシーの設定
データベースサービスの場合、特定の IP アドレスまたはアプリケーションサーバーを含むセキュリティグループからのみ、特定のポートへのアクセスを許可します。データベースをパブリックインターネットに直接公開することは避けてください。
インバウンドルールに 0.0.0.0/0 からのアクセスを許可するルールが含まれている場合は、パブリックアクセスが必要かどうかを確認します。不要な場合は、拒否ルールを追加します。たとえば、デフォルトの MySQL ポート 3306 はパブリックインターネットに公開すべきではないため、それに対する拒否ルールを追加し、その優先度を 100 に設定できます。
次の表に、デフォルトポートを使用する一般的なデータベースのセキュリティグループルールの例を示します。
データベースタイプ | ルールの方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 許可対象 |
MySQL | インバウンド | 許可 | 1 | カスタム TCP | 宛先: 3306/3306 | ソース: 172.16.XX.XX |
Oracle | インバウンド | 許可 | 1 | カスタム TCP | 宛先: 1521/1521 | ソース: 192.168.XX.XX |
MS SQL | インバウンド | 許可 | 1 | カスタム TCP | 宛先: 1433/1433 | ソース: 192.168.XX.XX/16 |
PostgreSQL | インバウンド | 許可 | 1 | カスタム TCP | 宛先: 5432/5432 | ソース: sg-bp1hv6wvmegs036**** |
Redis | インバウンド | 許可 | 1 | カスタム TCP | 宛先: 6379/6379 | ソース: 160998252992****/sg-bp174yoe2ib1sqj5**** |
例の IP アドレス、CIDR ブロック、Alibaba Cloud アカウント ID、セキュリティグループ ID は、実際の値に置き換えてください。
ケース 4:特定のプロトコルのみのアクセス許可
ネットワーク接続をテストするには、ICMP トラフィックを許可する必要があります。たとえば、クライアントから ping コマンドを実行する前に、ICMP トラフィックを許可する必要があります。次の表に、このセキュリティグループルールの設定例を示します。
ルールの方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 許可対象 |
インバウンド | 許可 | 1 |
| 宛先: -1/-1 | クライアント IP アドレス 説明 ネットワーク環境に基づいて IPv4 または IPv6 アドレスを入力します。 |
ケース 5:セキュリティグループ間の内部通信の有効化
同じ VPC 内の異なるセキュリティグループに属するインスタンス間で通信が必要な場合は、送信元のセキュリティグループを指定して、アクセスを許可します。たとえば、セキュリティグループ A のインスタンスが FTP を介してセキュリティグループ B のインスタンス上のファイルにアクセスできるようにするには、セキュリティグループ B にルールを追加して、FTP ポートでセキュリティグループ A からのトラフィックを許可します。この方法により、個々のインスタンスの IP アドレスを管理する必要がなくなります。
セキュリティグループだけでは、異なる VPC にあるインスタンス間の内部通信を有効にすることはできません。
サービスを同じ VPC にデプロイできる場合は、ECS インスタンスの VPC を変更することで VPC 内の内部通信を有効にできます。
ECS インスタンスを異なる VPC に配置する必要がある場合は、VPC ピアリング接続、PrivateLink、Cloud Enterprise Network などのソリューションを使用できます。詳細については、「VPC 接続」をご参照ください。
シナリオ 1:同じアカウント内のセキュリティグループ
セキュリティグループ A とセキュリティグループ B が同じアカウントに属している場合、許可対象をソースセキュリティグループの ID に設定します。次の表に、このルール設定の例を示します。
ルールの方向
アクション
優先度
プロトコルタイプ
ポート範囲
許可対象
インバウンド
許可
1
カスタム TCP
宛先: 21/21
ソース: sg-bp1hv6wvmegs036****
説明例のセキュリティグループ ID は、実際の値に置き換えてください。
シナリオ 2:異なるアカウント内のセキュリティグループ
セキュリティグループ A とセキュリティグループ B が異なるアカウントに属している場合、許可対象をソースの Alibaba Cloud アカウント ID とセキュリティグループ ID に設定します。
ルールの方向
アクション
優先度
プロトコルタイプ
ポート範囲
許可対象
インバウンド
許可
1
カスタム TCP
宛先: 21/21
ソース: 160998252992****/sg-bp174yoe2ib1sqj5****
説明例の Alibaba Cloud アカウント ID とセキュリティグループ ID は、実際の値に置き換えてください。
ケース 6:外部 Web サイトへのアクセスの制限
インスタンスが特定の Web サイトにのみアクセスできるようにするには、アウトバウンドルールをホワイトリストとして設定します。まず、すべてのアウトバウンドトラフィックを拒否し、次に指定された Web サイトの IP アドレスへのアクセスのみを許可するルールを追加します。
これらのセキュリティグループルールを設定する際には、次の点にご注意ください。
リクエストが複数のルールに一致した場合、ルールの優先度とアクションによって適用されるルールが決まります。適用されるルールが許可ルールである場合にのみ、セッションが確立されます。
優先度の値が小さいほど、優先度が高くなります。ルールが同じ優先度を持つ場合、拒否ルールが優先されます。したがって、すべてのアウトバウンドトラフィックを拒否するルールは、許可ルールよりも低い優先度 (より大きい数値) を持つ必要があります。これにより、特定の Web サイトに対する許可ルールが確実に有効になります。
次の表に、このセキュリティグループルールの設定例を示します。
ルールの方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 許可対象 |
アウトバウンド | 拒否 | 2 | すべて | 宛先: -1/-1 | 宛先: 0.0.0.0/0 |
アウトバウンド | 許可 | 1 | カスタム TCP | 宛先: 80/80 | 宛先: 47.96.XX.XX |
アウトバウンド | 許可 | 1 | カスタム TCP | 宛先: 443/443 | 宛先: 121.199.XX.XX |
これらのルールにより、セキュリティグループ内のインスタンスは、47.96.XX.XX のポート 80 と 121.199.XX.XX のポート 443 にのみアクセスできます。他のすべてのアウトバウンドアクセスは拒否されます。