このトピックでは、Web サービスの提供やリモートアクセスの制御など、一般的なシナリオにおけるネットワークトラフィックを管理するためのセキュリティグループルールの設定方法について説明します。これらのガイドラインは、ご利用のクラウドリソースのセキュリティと信頼性を確保するのに役立ちます。
セキュリティグループのガイドライン
1. ニーズの特定とセキュリティグループの計画
ビジネスニーズと特定のセキュリティ要件を定義します。たとえば、どのサービスをパブリックにアクセス可能にする必要があり、どのサービスを内部アクセスに制限する必要があるかを決定します。
パブリックサービス用と内部サービス用のサーバーを異なるセキュリティグループに分離する
不要なサービスポートを公開すると、セキュリティの脆弱性が生じる可能性があります。ご利用の Elastic Compute Service (ECS) インスタンスのセキュリティグループには、最も厳格なルールを適用してください。デフォルトですべてのポートとプロトコルを閉じ、サービスで必要な特定のポートのみを開放する、デフォルト拒否ポリシーを採用してください。
公開サーバー向けのセキュリティグループは、明確でシンプルな目的を持つべきです。同じサーバーで MySQL や Redis などの他のサービスを実行することは避けてください。これらのバックエンドサービスは、パブリック IP アドレスを持たない ECS インスタンスにインストールすることを推奨します。その後、別のセキュリティグループからのアクセスを許可するセキュリティグループルールを作成して、アクセスを許可します。
アプリケーションごとに異なるセキュリティグループを使用する
本番環境では、オペレーティングシステムやアプリケーションが異なるサーバーは、通常、負荷分散のために同じグループに属しません。サービスが異なれば、開閉する必要のあるポートも異なります。ロールが異なるリソースは、異なるセキュリティグループに割り当ててください。
たとえば、Linux インスタンスでは SSH アクセス用に TCP ポート 22 が必要になる場合がありますが、Windows インスタンスではリモートデスクトップ接続用に TCP ポート 3389 が必要になる場合があります。
インスタンスが同じイメージタイプを使用していても、提供するサービスが異なり、内部ネットワーク経由での通信が不要な場合は、異なるセキュリティグループに割り当てるべきです。このアプローチにより、サービスが分離され、将来のルール変更が簡素化され、各セキュリティグループが単一の責任を持つことが保証されます。
新しいアプリケーションを計画・追加する際は、vSwitch でサブネットを計画するのと同じように、セキュリティグループを計画する必要があります。
CIDR ブロックとセキュリティグループの両方を使用して、サービスプロバイダーとコンシューマーの間に明確な境界を定義します。本番環境とテスト環境でセキュリティグループを分ける
システムをより良く分離するために、複数のテスト環境と 1 つの本番環境を構築することがあります。ネットワークを適切に分離するには、各環境に異なるセキュリティポリシーを設定します。これにより、テスト環境での変更が誤って本番環境の安定性に影響を与えるのを防ぎます。
異なるセキュリティグループを作成することで、アプリケーションのアクセスドメインを制限し、本番環境とテスト環境間の通信を防ぐことができます。また、複数のテスト環境に異なるセキュリティグループを割り当てることで、互いに干渉するのを防ぎ、開発効率を向上させることができます。
パブリックアクセスを必要としないリソースにはパブリック IP アドレスを割り当てない
パブリックな露出を最小限に抑えるため、ワークベンチ、
Session Manager、ジャンプサーバーなど、パブリック IP アドレスを必要としない方法で ECS インスタンスに接続します。プライベートネットワークにデプロイされたサービスに直接アクセスするには、ポートフォワーディング機能を使用できます。詳細については、「Session Manager CLI のポートフォワーディング機能を使用してパブリック IP アドレスを持たないインスタンスにアクセスする」をご参照ください。分散アプリケーションでは、リソースはしばしば異なる階層やグループに分離されます。パブリックサービスを提供しない ECS インスタンスには、
パブリック IP アドレスを割り当てないでください。パブリックアクセスを提供するサーバーが複数ある場合は、Server Load Balancer (SLB)を使用してパブリックトラフィックを分散させます。これにより、システムの可用性が向上し、単一障害点を防ぐことができます。詳細については、 をご参照ください。Virtual Private Cloud (VPC)内で、パブリック IP アドレスを持たない ECS インスタンスがインターネットにアクセスする必要がある場合は、NAT Gatewayを使用します。これはインターネットアクセスのプロキシとして機能します。特定のCIDR ブロックまたはサブネットに対して SNAT ルールを設定するだけで、パブリックアクセスを有効にできます。これにより、アウトバウンドのインターネットアクセスのみが必要な場合に、パブリック IP アドレス(またはElastic IP アドレス) を割り当ててサービスをインターネットに公開することを防ぎます。詳細については、「SNAT エントリの作成と管理」をご参照ください。セキュリティグループをホワイトリストとして使用する
セキュリティグループはホワイトリストとして機能させるべきです。デフォルトでは、すべてのアクセスを拒否します。許可ルールを追加して、特定のポート範囲で、許可されたソースからのトラフィックを許可できます。ポートの開放とパブリック IP アドレスの割り当ては、可能な限り少なくしてください。Elastic IP アドレスを関連付けることは、トラブルシューティングのために本番マシンにアクセスする便利な方法ですが、マシン全体をインターネットに公開することになります。
2. セキュリティグループルールの設定
セキュリティグループは、ECS インスタンスのインバウンドおよびアウトバウンドトラフィックを制御する仮想ファイアウォールとして機能します。必要な通信ポートのみを開放し、ソース IP アドレス範囲を可能な限り制限する必要があります。
VPC では、単一のセキュリティグループルールでパブリックネットワークとプライベートネットワークの両方のアクセスを制御できます。つまり、1 つのルールを設定して、インターネットと内部ネットワークの両方からのトラフィックを制限または許可できます。
デフォルトポリシーは基本セキュリティグループと高度セキュリティグループで異なる
デフォルトでは、
基本セキュリティグループと高度セキュリティグループの両方がすべてのインバウンドトラフィックを拒否します。ただし、アウトバウンドポリシーは異なります:基本セキュリティグループはすべてのアウトバウンドトラフィックを許可しますが、高度セキュリティグループはそれを拒否します。内部接続性はセキュリティグループおよびセキュリティグループタイプによって異なる
同じアカウントに属していても、異なるセキュリティグループ内の ECS インスタンスは、内部ネットワーク上で互いに分離されています。デフォルトでは、同じ
基本セキュリティグループ内のインスタンスは互いに通信できますが、同じ高度セキュリティグループ内のインスタンスは互いに分離されています。最小権限の原則に基づいてルールを追加する
たとえば、リモートログインのために Linux
インスタンスでポート 22 を開く場合、特定の IP アドレスからのアクセスのみを許可します。警告0.0.0.0/0からのアクセスを許可すると、すべての IP アドレスがインスタンスにアクセスできるようになり、すべてのポートが公開されます。これは非常に安全ではありません。正しいプラクティスは、デフォルトですべてのポートへのアクセスを拒否することです。たとえば、Web サービスを公開する必要がある場合は、80、8080、443 などの一般的な TCP ポートのみを開き、他のすべてのポートを閉じたままにする必要があります。ビジネスニーズと最小権限の原則に基づいて、
セキュリティグループルールを設定してください。セキュリティリスクを避けるため、すべてのポートを開放することは避けてください (::/0または0.0.0.0/0の使用には細心の注意を払ってください)。権限付与オブジェクトの種類についての詳細は、「セキュリティグループルール」をご参照ください。最小権限の原則に基づいてグループ内のインスタンスを分離する
基本セキュリティグループ内のインスタンスが互いに通信する必要がない場合は、セキュリティグループの内部アクセス ポリシーを設定してインスタンスを分離します。単一のセキュリティグループ内のルールの目的を一貫させる
ルールをその目的に基づいて複数のセキュリティグループに整理し、インスタンスを関連するグループに関連付けます。単一の
セキュリティグループにルールが多すぎると、管理が複雑になります。権限付与オブジェクトを慎重に選択する
セキュリティグループルールの権限付与オブジェクトは、IP アドレス、別のセキュリティグループ、またはCIDR ブロックにすることができます。異なるセキュリティグループのリソース間でネットワーク通信を有効にしたい場合は、セキュリティグループによるアクセスを許可する必要があります。たとえば、分散アプリケーションの場合、コンポーネントごとに異なるセキュリティグループを使用することがあります。これらのセキュリティグループが互いに通信できない場合、IP アドレスや CIDR ブロックでアクセスを許可するべきではありません。代わりに、他のセキュリティグループ内のすべてのリソースからのアクセスを直接許可する必要があります。たとえば、アプリケーションの Web コンポーネントとデータベースコンポーネント用に
sg-webとsg-databaseという別々のセキュリティグループを作成した場合、sg-databaseにルールを追加できます。このルールは、sg-webセキュリティグループ内のすべてのリソースが MySQL (3306) ポートにアクセスすることを許可します。内部ネットワークアクセスには、
CIDR ブロックではなく、ソースセキュリティグループを許可します。一般的なアプリケーションはデフォルトポートを使用する
アプリケーションは、外部サービスと通信するために特定のサーバーポートを使用します。詳細については、「一般的なポート」をご参照ください。
3. ルールの継続的なレビューと最適化
ビジネスの進化に伴い、既存のセキュリティグループとルールが古くなる可能性があります。定期的にアーキテクチャを見直し、最新のセキュリティ状況に基づいて調整を行ってください。本番環境でセキュリティグループを変更する前に、まずそれをクローンし、テスト環境でルールをテストしてトラフィックが正しく流れることを確認します。その後、変更を本番のセキュリティグループに適用します。この実践は、誤った変更によるサービスの中断を防ぐのに役立ちます。
ユースケース
ECS インスタンスへのインバウンドトラフィックの制御
インバウンドトラフィックとは、外部リソースからご利用の ECS インスタンスへのトラフィックです。インバウンド セキュリティグループルールを設定して、指定されたユーザーがご利用の ECS インスタンスにデプロイされたサービスにアクセスできるようにすることができます。デフォルトでは、すべてのインバウンドトラフィックは拒否されるため、許可したいトラフィックに対してのみ許可ルールを設定する必要があります。関連するユースケースは次のとおりです:
ECS インスタンスからのアウトバウンドトラフィックの制御
アウトバウンドトラフィックとは、ご利用の ECS インスタンスから外部リソースへのトラフィックです。アウトバウンド セキュリティグループルールを設定して、ご利用の ECS インスタンスから指定された外部リソースへのアクセスを拒否することができます。基本セキュリティグループの場合、デフォルトですべてのアウトバウンドトラフィックが許可されるため、ブロックしたいトラフィックに対してのみ拒否ルールを追加する必要があります。関連するユースケースは次のとおりです:
ケース 1: Web サービスの提供
Alibaba Cloud ECS インスタンスにデプロイされた Web サイトがインターネット上のどのユーザーからもアクセス可能である必要がある場合、TCP ポート 80 (HTTP) と 443 (HTTPS) でのみ、任意のソースからのインバウンドトラフィックを許可するセキュリティグループルールを設定します。この設定により、Web サイトへのアクセスが確保される一方で、サーバー上の他のサービスへの直接アクセスが制限されます。
次の表に、このセキュリティグループルール設定の例を示します。
ルール方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | 1 | カスタム TCP | サービスポート:
| 0.0.0.0/0 |
セキュリティグループルールを追加しても Web サイトにアクセスできない場合は、サービスポートが正しく機能しているか確認してください。詳細については、「ECS インスタンスからアクセスできないサービスのトラブルシューティング」をご参照ください。
ケース 2: リモートアクセスの許可
Alibaba Cloud ECS インスタンスにサービスをデプロイし、リモートで接続する必要がある場合は、セキュリティグループルールを設定します。通常、TCP ポート 22 (SSH) またはカスタム SSH ポートを開く必要があります。悪意のある攻撃のリスクを減らすために、アクセスを特定のユーザー (管理者など) または特定のサーバーの IP アドレスに制限します。
次の表に、このセキュリティグループルール設定の例を示します。
ルール方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | 1 | カスタム TCP |
| 192.168.XX.XX 説明 特定のユーザーまたはサーバーの IP アドレス。接続がパブリックかプライベートかに応じて、 WhatIsMyIP.com などのサービスを使用して、ローカルネットワークの |
Alibaba Cloud ワークベンチを使用してインスタンスにリモート接続する場合、特定の権限付与オブジェクトのみを許可する必要があります。次の表に、インバウンド セキュリティグループルールの例を示します。
アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
許可 | 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: 特定プロトコルの許可
ビジネス要件に基づいて、特定の TCP または UDP ポートでのみ通信を許可するなど、特定のネットワークプロトコルを制限する必要がある場合があります。ICMP プロトコルは、主に IP ホストとルーター間で制御メッセージを送信するために使用されます。特定のテストを実行するには、ICMP プロトコル経由でのアクセスを許可する必要があります。たとえば、クライアントで ping コマンドを実行してネットワーク接続をテストする場合、ICMP プロトコル経由でのアクセスを許可する必要があります。次の表に、セキュリティグループルール設定の例を示します。
ルール方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | 1 |
| -1/-1 | クライアント IP アドレス 説明 ネットワーク環境に応じて、IPv4 または IPv6 アドレスを入力します。 |
ケース 5: 内部通信の有効化
同じ VPC 内のインスタンス間でデータを共有する必要がある場合、たとえば、セキュリティグループ A のインスタンスが FTP 経由でセキュリティグループ B のインスタンス上の共有ファイルにアクセスできるようにする場合、セキュリティグループ間のアクセスを許可できます。別のセキュリティグループを許可することは、個々の IP アドレスや CIDR ブロックを許可するよりも便利です。なぜなら、各インスタンスの権限を設定することなく、一度にインスタンスのグループ全体にアクセスを許可できるからです。
異なる VPC にあるインスタンス間の通信を有効にするためにセキュリティグループルールを使用することはできません。
サービスが同じ
VPCにデプロイできる場合は、VPCの内部ネットワークを使用して接続を確立できます。詳細については、「ECS インスタンスの VPC を変更する」をご参照ください。サービスが異なる
VPCにインスタンスを配置する必要がある場合、Alibaba Cloud はそれらを接続するためのいくつかのソリューションを提供しています。たとえば、VPC ピアリング接続、PrivateLink、Cloud Enterprise Network (CEN)などです。違いについては、「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 サイトの IP アドレスへのアクセスのみを許可するルールを追加します。
これらのセキュリティグループルールを設定する際には、次の点に注意してください:
プロトコル、ポート、権限付与オブジェクトに基づいて複数のルールがリクエストに一致する場合、システムは優先度とアクションに基づいてどのルールが有効になるかを決定します。セッションは、最終的に有効なルールのアクションが
許可である場合にのみ確立されます。優先度の値が小さいほど、優先度が高くなります。2 つのルールの優先度が同じでアクションが異なる (
許可vs拒否) 場合、拒否ルールが優先されます。アウトバウンドトラフィックのホワイトリストを正しく実装するには、拒否ルールが許可ルールよりも低い優先度 (より高い数値) を持つ必要があります。これにより、許可ルールが有効になります。
次の表に、このセキュリティグループルール設定の例を示します。
ルール方向 | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
アウトバウンド | 拒否 | 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 で HTTP サービスに、121.199.XX.XX のポート 443 で HTTPS サービスにアクセスできますが、他のすべてのアウトバウンドアクセスは拒否されます。