このトピックでは、Elastic Compute Service (ECS) のセキュリティグループの特性に基づいてセキュリティグループルールを設定し、外部 Web サービスを提供するために ECS インスタンスに Web サイトをデプロイする、ECS インスタンスへのリモートアクセスを管理するなどの一般的なシナリオで、クラウドリソースのネットワークトラフィックのセキュリティと信頼性を確保する方法について説明します。
セキュリティグループの使用ガイドライン
1. ビジネス要件を分析し、さまざまなセキュリティグループを計画する
ビジネスの特性とセキュリティ要件を特定します。たとえば、どのサービスをインターネットに公開できるか、どのサービスを内部でのみ使用するかを知る必要があります。
インターネット向けサービスを提供する ECS インスタンスと、内部ネットワーク向けサービスを提供する ECS インスタンスに対して、異なるセキュリティグループを作成します。
ポートを過剰に開放すると、アプリケーションがインターネット経由でアクセスされる可能性があり、セキュリティ上の問題が発生する可能性があります。ECS インスタンスを割り当てるセキュリティグループは、厳格なルールに準拠している必要があります。セキュリティグループでは、優先的に拒否ルールを設定することをお勧めします。ECS インスタンスにデプロイされたサービスに必要なポートとプロトコルを除き、すべてのポートとプロトコルを閉じることができます。
インターネットに接続する ECS インスタンスを含むセキュリティグループは、インスタンスがプライマリサービスのみを提供するように、明確でシンプルなルールを持つ必要があります。たとえば、MySQL アプリケーションと Redis アプリケーションの場合は、インターネットにアクセスできない ECS インスタンスにアプリケーションをデプロイし、特定のセキュリティグループ (権限付与オブジェクトとして指定) からのみアクセスできるようにセキュリティグループルールを設定することをお勧めします。
異なるアプリケーションを異なるセキュリティグループに割り当てます。
ほとんどの場合、本番環境の異なるオペレーティングシステムは、負荷分散のために同じアプリケーショングループに属していません。異なるサービスを提供するには、オペレーティングシステムで公開およびブロックされるポートが異なる必要があります。異なるオペレーティングシステムを異なるセキュリティグループに割り当てることをお勧めします。
たとえば、Linux オペレーティングシステムの場合は、TCP ポート 22 を公開して SSH 接続を許可する必要がある場合があります。Windows オペレーティングシステムの場合は、TCP ポート 3389 を公開して RDP (Remote Desktop Protocol) 接続を許可する必要がある場合があります。
同じイメージを使用するが異なるサービスを提供するインスタンスが内部ネットワーク経由で相互に通信する必要がない場合は、インスタンスを異なるセキュリティグループに割り当てることをお勧めします。これは、イメージタイプとセキュリティグループの分離、セキュリティグループルールの後続の変更の簡素化、インスタンスのシンプルな責務の確保に役立ちます。
新しいアプリケーションを計画および追加する場合は、vSwitch を使用してサブネットを定義するだけでなく、セキュリティグループを適切に計画する必要があります。CIDR ブロックとセキュリティグループを使用して、サービスプロバイダーまたはコンシューマーとしての役割を定義します。
本番環境とテスト環境で異なるセキュリティグループを使用します。
システムをより適切に分離するために、実際の開発では複数のテスト環境と 1 つの本番環境を構築できます。ネットワークを適切に分離するには、環境ごとに異なるセキュリティグループルールを設定する必要がある場合があります。こうすることで、テスト目的で行われた変更が本番環境にアップロードされて本番環境の安定性に影響を与えるのを防ぐことができます。
セキュリティグループを使用して、アプリケーションのアクセスドメインを制限し、本番環境とテスト環境間の通信を防ぐことができます。また、異なるテスト環境に異なるセキュリティグループを割り当てて、環境間のトラフィックをブロックし、開発効率を向上させることもできます。
インターネットアクセスを必要としないリソースには、パブリック IP アドレスを割り当てないでください。
ECS インスタンスに接続する場合は、Workbench、Session Manager、ジャンプサーバーなど、パブリック IP アドレスを必要としない方法を使用して、インターネットへの露出を最小限に抑えることができます。インターネットアクセスがない環境またはプライベートネットワークにデプロイされたサービスに直接アクセスする場合は、ポート フォワーディング機能を使用できます。詳細については、「Session Manager CLI のポート フォワーディング機能を使用してインターネットに接続されていないインスタンスに接続する」をご参照ください。
ほとんどの分散アプリケーションには、異なるレイヤーとグループがあります。インターネットにアクセスできない ECS インスタンスの場合は、パブリック IP アドレスを割り当てないことをお勧めします。複数のインスタンスがインターネットアクセスを提供する場合は、Server Load Balancer (SLB) を設定してインターネットトラフィックを分散させ、システムの可用性を向上させ、単一障害点を防ぐことをお勧めします。詳細については、Server Load Balancer ページにアクセスしてください。
仮想プライベートクラウド (VPC) では、ECS インスタンスにパブリック IP アドレスがないがインターネットアクセスが必要な場合は、NAT ゲートウェイを使用してインスタンスにインターネットプロキシサービスを提供することをお勧めします。ソースネットワークアドレス変換 (SNAT) エントリを設定するだけで、特定の CIDR ブロックまたはサブネットのインターネットアクセスを有効にできます。こうすることで、アウトバウンドのインターネットアクセスのみが必要な場合にパブリック IP アドレスが割り当てられた後にサービスをインターネットに公開する必要がなくなります。詳細については、「SNAT エントリの作成と管理」をご参照ください。
ホワイトリストとしてセキュリティグループを使用する
ホワイトリストとしてセキュリティグループを使用します。デフォルトでは、セキュリティグループはすべてのインバウンドアクセスを拒否します。セキュリティグループにインバウンドルールの許可を追加して、特定のポートで特定の権限付与オブジェクトからのアクセスを許可できます。ECS インスタンスのオープンポートとパブリック IP アドレスの数を最小限に抑えることをお勧めします。オンライン ECS インスタンスに Elastic IP アドレス (EIP) を関連付けて、タスクログクエリとトラブルシューティングのためのアクセスを容易にすることができます。ただし、この操作により、インスタンスがインターネットに公開されます。
2. セキュリティグループルールを設定する
セキュリティグループは、ECS インスタンスのインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォールとして機能します。必要なポートのみを開き、許可される送信元 IP アドレス範囲を制限する必要があります。
ベーシックセキュリティグループとアドバンストセキュリティグループのデフォルトアクションは異なります。
デフォルトでは、ベーシックセキュリティグループとアドバンストセキュリティグループはすべてのインバウンドアクセスを拒否します。デフォルトでは、ベーシックセキュリティグループはすべてのアウトバウンドアクセスを許可し、アドバンストセキュリティグループはすべてのアウトバウンドアクセスを拒否します。
異なるセキュリティグループのインスタンスは、内部ネットワーク上で互いに分離されており、異なるタイプのセキュリティグループのインスタンスのデフォルトの内部アクセス制御ポリシーは異なります。
同じアカウントの異なるセキュリティグループのインスタンスは、内部ネットワーク上で互いにアクセスできません。デフォルトでは、ベーシックセキュリティグループのインスタンスは内部ネットワーク上で相互に通信でき、アドバンストセキュリティグループのインスタンスは内部ネットワーク上で互いに分離されています。
セキュリティグループルールの制御対象は、ネットワークタイプによって異なります。
VPC では、各セキュリティグループルールは、インターネットと内部ネットワークへの、またはインターネットと内部ネットワークからのアクセスを制御します。インターネットと内部ネットワークへの、またはインターネットと内部ネットワークからのトラフィックを拒否または許可するようにセキュリティグループルールを設定できます。
クラシックネットワークでは、パブリックルール (インターネットイングレスルールとインターネットエグレスルール) はインターネットへのアクセスとインターネットからのアクセスを制御し、内部ルール (インバウンドルールとアウトバウンドルール) は内部ネットワークへのアクセスと内部ネットワークからのアクセスを制御します。
最小権限の原則に基づいてセキュリティグループルールを追加します。
たとえば、リモートログイン用に Linux インスタンスでポート 22 を開く場合は、特定の IP アドレスからのアクセスのみを許可することをお勧めします。
警告セキュリティグループのインバウンドルールで権限付与オブジェクトとして 0.0.0.0/0 を指定すると、すべての IPv4 アドレスがセキュリティグループ内のインスタンスにアクセスできるようになり、すべてのポートが公開されます。これにより、セキュリティリスクが高まります。セキュリティを向上させるには、すべてのポートで外部アクセスを拒否してから、ビジネス要件に基づいてポートを開くようにセキュリティグループルールを設定することをお勧めします。たとえば、Web サービスを公開する場合は、ポート 80、8080、443 などの一般的な TCP ポートを開き、他のポートを閉じることができます。
セキュリティを確保するために、ビジネス要件と最小権限の原則に基づいて、IP アドレスまたは CIDR ブロックを権限付与オブジェクト (トラフィックの送信元または宛先) として指定することをお勧めします。すべての IPv4 アドレスまたは IPv6 アドレスからのアクセスを許可するために 0.0.0.0/0 または ::/0 を権限付与オブジェクトとして指定する場合は、注意が必要です。セキュリティグループでサポートされている権限付与オブジェクトのタイプの詳細については、「セキュリティグループルール」トピックの「各セキュリティグループルールの構成」セクションをご参照ください。
最小権限の原則に基づいて内部分離を設定します。
たとえば、セキュリティグループ内の ECS インスタンス間でグループ内接続が不要な場合は、セキュリティグループの内部アクセス制御ポリシーをグループ内接続から内部分離に変更します。
各セキュリティグループのルールの目的が一致していることを確認します。
セキュリティグループの目的に基づいてセキュリティグループにセキュリティグループルールを追加し、ECS インスタンスをセキュリティグループに割り当てます。1 つのセキュリティグループに多数のルールを追加すると、管理の複雑さが増します。
各セキュリティグループルールの権限付与オブジェクトを指定する場合は、注意が必要です。
セキュリティグループルールの権限付与オブジェクトには、IP アドレス、セキュリティグループ、または CIDR ブロックを指定できます。
異なるセキュリティグループのリソースが相互に通信できるようにするには、セキュリティグループ間で相互アクセスを許可するようにセキュリティグループルールを設定する必要があります。たとえば、分散アプリケーション用に異なるセキュリティグループを作成できます。セキュリティグループは互いにアクセスできない場合があります。この場合、IP アドレスまたは CIDR ブロックではなくセキュリティグループを参照するセキュリティグループルールを権限付与オブジェクトとして追加することで、セキュリティグループ間の相互アクセスを許可し、セキュリティグループ内のリソースが相互にアクセスできるようにすることができます。たとえば、アプリケーションの Web レイヤー用に
sg-web
セキュリティグループを作成し、データベースレイヤー用にsg-database
セキュリティグループを作成します。sg-database
セキュリティグループでは、sg-web
セキュリティグループを参照するルールを追加して、sg-web セキュリティグループのすべてのリソースが MySQL ポート 3306 で sg-database セキュリティグループのリソースにアクセスできるようにすることができます。内部ネットワーク経由でアクセスを許可するには、CIDR ブロックではなくセキュリティグループを権限付与オブジェクトとして指定する必要があります。
デフォルトでは、クラシックネットワークにある ECS インスタンスの内部ネットワークへのアクセスを許可するインバウンドセキュリティグループルールはありません。セキュリティを確保するために、CIDR ブロックに基づいてアクセスを有効にしないことをお勧めします。
ほとんどの場合、一般的なアプリケーションはデフォルトポートを使用します。
ECS インスタンスにデプロイされたアプリケーションは、インスタンスのポートを使用して外部サービスを提供します。詳細については、「共通ポート」をご参照ください。
3. セキュリティグループルールを継続的に最適化および変更する
ビジネスの成長に伴い、セキュリティグループとセキュリティグループルールがビジネス要件を満たさなくなる場合があります。既存のセキュリティグループとセキュリティグループルールを定期的にチェックし、最新のセキュリティ体制に基づいてセキュリティグループ設定を変更する必要があります。セキュリティグループを変更する場合は、セキュリティグループをテスト環境にクローンし、テスト環境でセキュリティグループルールを変更およびデバッグして、セキュリティグループ内のインスタンスのトラフィックが正しく転送されることを確認することをお勧めします。その後、オンライン環境のセキュリティグループルールを変更して、偶発的な変更によるサービス中断を防ぐことができます。
さまざまなユースケースのセキュリティグループ
ECS インスタンスへのインバウンドトラフィックの制御
セキュリティグループにインバウンドルールを設定して、セキュリティグループに属する ECS インスタンスにデプロイされたサービスに特定のユーザーのみがアクセスできるようにすることができます。デフォルトでは、セキュリティグループはすべてのインバウンドアクセスを拒否します。セキュリティグループルールの許可を設定するだけで済みます。次のユースケースでは、ECS インスタンスへのインバウンドトラフィックを制御する方法について説明します。
ECS インスタンスからのアウトバウンドトラフィックの制御
セキュリティグループにアウトバウンドルールを設定して、セキュリティグループ内の ECS インスタンスが特定の外部リソースにアクセスできないようにすることができます。デフォルトでは、ベーシックセキュリティグループはすべてのアウトバウンドアクセスを許可します。セキュリティグループルールの拒否を設定するだけで済みます。次のユースケースでは、ECS インスタンスからのアウトバウンドトラフィックを制御する方法について説明します。
ケース 1: ECS インスタンスにデプロイされた Web サイトが Web サービスを提供できるようにする
Web サイトは ECS インスタンスにデプロイされ、インターネット経由で任意のユーザーがアクセスできます。インスタンスのセキュリティを確保するために、TCP ポート 80 (HTTP) と 443 (HTTPS) でのみ任意の送信元からのインバウンドトラフィックを許可するようにセキュリティグループルールを設定できます。これにより、Web サイトにはインターネットからアクセスできますが、インスタンス上の他のサービスへの直接アクセスは制限されます。
次の表に、セキュリティグループルールの例を示します。
ルールの向き | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | 1 | カスタム TCP | オープンポート:
| 送信元: 0.0.0.0/0 |
上記のルールを追加した後も Web サイトにアクセスできない場合は、必要なすべてのポートが開いていて使用可能かどうかを確認してください。詳細については、「インスタンスにデプロイされたサービスにアクセスできない場合の対処方法」をご参照ください。
ケース 2: 特定のユーザーのみが ECS インスタンスに接続できるようにする
ECS インスタンスにサービスをデプロイする場合は、インスタンスが属するセキュリティグループのルールを設定して、管理者や特定の IP アドレスのサーバーなどの特定のユーザーのみが接続ポート (TCP ポート 22 (デフォルトの SSH ポート) やカスタム SSH ポートなど) でインスタンスに接続できるようにする必要があります。これにより、悪意のある攻撃のリスクが軽減されます。
次の表に、セキュリティグループルールの例を示します。
ルールの向き | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | 1 | カスタム TCP |
| 送信元: 192.168.XX.XX 説明 特定のユーザーまたは特定のサーバーの IP アドレス。接続がインターネット経由かプライベートネットワーク経由かに基づいて、パブリック IP アドレスまたはプライベート IP アドレスを入力します。 IP Search などの IP アドレス検索 Web サイトにアクセスして、ローカルネットワークのパブリック IP アドレスを取得できます。 |
Alibaba Cloud Workbench を使用して ECS インスタンスに接続する場合は、特定の権限付与オブジェクトのみを許可する必要があります。次の表に、インバウンド セキュリティグループルールの例を示します。
アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
許可 | 1 | カスタム TCP |
|
|
クラシックネットワークにある ECS インスタンスに Workbench を使用して接続するためのセキュリティグループルールを設定する方法については、「Workbench を使用してインスタンスに接続する」トピックの「Workbench に関連するセキュリティグループ設定」セクションをご参照ください。
ケース 3: ECS インスタンスにデプロイされたデータベースへのアクセスを制御する
ほとんどの場合、データベースには厳格なセキュリティポリシーが必要です。セキュリティグループルールを設定して、特定の IP アドレスまたはセキュリティグループ (アプリケーションサーバーが属するセキュリティグループなど) から特定のポートへのインバウンド接続のみを許可できます。これにより、データベースアクセスのプライバシーとセキュリティが確保されます。
インバウンドセキュリティグループルールに 0.0.0.0/0 が含まれている場合は、アプリケーションが公開する必要があるポートとサービスを確認してください。特定のポートが外部サービスを直接提供しないようにするには、そのポートの拒否ルールを追加できます。たとえば、インスタンスに MySQL データベースサービスをデプロイする場合、ポート 3306 をインターネットに公開することはできません。この場合、拒否ルールを追加し、ルールの優先度を最も低い優先度である 100 に設定できます。
次の表に、デフォルトポートを使用する一般的なデータベースのセキュリティグループルールの例を示します。
データベースタイプ | ルールの向き | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
MySQL | インバウンド | 許可 | 1 | カスタム TCP | 宛先: 3306/3306 | 送信元: 172.16.XX.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: 特定のプロトコルのトラフィックのみが ECS インスタンスにアクセスできるようにする
ビジネス要件に基づいて、ECS インスタンスへのアクセスに使用できるネットワークプロトコルを制限する必要がある場合があります。たとえば、特定の TCP ポートまたは UDP ポート経由のトラフィックのみを許可する必要がある場合があります。インターネット制御メッセージプロトコル (ICMP) は、IP ホストとルーター間で制御メッセージを転送するために使用されます。クライアントで ping
コマンドを実行して ECS インスタンスに ping を実行するなど、特定のテスト操作を実行する前に、セキュリティグループルールを追加してインバウンド ICMP アクセスを許可する必要があります。次の表に、セキュリティグループルールの例を示します。
ルールの向き | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
インバウンド | 許可 | 1 |
| 宛先: -1/-1 | クライアントの IP アドレス。 説明 ネットワーク環境に基づいて、IPv4 アドレスまたは IPv6 アドレスを入力します。 |
ケース 5: 異なるセキュリティグループのインスタンスが内部ネットワーク上で相互に通信できるようにする
同じ VPC 内の異なるセキュリティグループの ECS インスタンス間でデータを共有する場合 (たとえば、セキュリティグループ A のインスタンスが FTP 経由でセキュリティグループ B のインスタンスの共有ファイルにアクセスする場合など) は、内部ネットワーク上でセキュリティグループ間の相互アクセスを許可するルールを追加できます。前述の方法は、個々の IP アドレスまたは CIDR ブロックへのアクセスを許可するルールを追加するよりも便利です。各セキュリティグループの各インスタンスに個別にアクセス制御を設定する必要はありません。
この方法は、異なる VPC 内にある ECS インスタンスではサポートされていません。Cloud Enterprise Network (CEN) を使用して、VPC 内のインスタンスを別の VPC 内のインスタンスに接続できます。詳細については、「CEN の概要」をご参照ください。
シナリオ 1:
セキュリティグループ A とセキュリティグループ B が同じ Alibaba Cloud アカウントに属している場合は、セキュリティグループ B にルールを追加してセキュリティグループ A からのインバウンドアクセスを許可するときに、セキュリティグループ A の ID を権限付与オブジェクトとして指定する必要があります。次の表に、セキュリティグループルールの例を示します。
ルールの向き
アクション
優先度
プロトコルタイプ
ポート範囲
権限付与オブジェクト
インバウンド
許可
1
カスタム TCP
宛先: 21/21
送信元: sg-bp1hv6wvmegs036****
説明上記の表に示されているセキュリティグループ ID は参照用です。セキュリティグループ ID を実際のセキュリティグループ ID に置き換えてください。
シナリオ 2:
セキュリティグループ A とセキュリティグループ B が同じ Alibaba Cloud アカウントに属していない場合は、セキュリティグループ B にルールを追加してセキュリティグループ A からのインバウンドアクセスを許可するときに、セキュリティグループ A の ID とセキュリティグループ A が属する Alibaba Cloud アカウントの ID を権限付与オブジェクトとして指定する必要があります。次の表に、セキュリティグループルールの例を示します。
ルールの向き
アクション
優先度
プロトコルタイプ
ポート範囲
権限付与オブジェクト
インバウンド
許可
1
カスタム TCP
宛先: 21/21
送信元: 160998252992****/sg-bp174yoe2ib1sqj5****
説明上記の表に示されている Alibaba Cloud アカウント ID とセキュリティグループ ID は参照用です。ID を実際の ID に置き換えてください。
ケース 6: ECS インスタンスから外部 Web サイトへのアクセスを制限する
デフォルトでは、ベーシックセキュリティグループはすべてのアウトバウンドアクセスを許可します。ベーシックセキュリティグループの ECS インスタンスが特定の Web サイトのみにアクセスできるようにするには、セキュリティグループをホワイトリストとして使用し、すべてのアウトバウンドアクセスを拒否する拒否ルールと、Web サイトの IP アドレスへのアウトバウンドアクセスを許可する許可ルールを追加します。
次の点にご注意ください。
対応するプロトコル、ポート範囲、および権限付与オブジェクトに基づいて複数のルールがリクエストに一致した後、リクエストはルールの優先度とアクションと照合され、適用する単一のルールが決定されます。許可ルールが一致して適用されるまで、セッションは確立されません。
優先度の値が小さいほど、セキュリティグループルールの優先度が高くなります。2 つのセキュリティグループルールの優先度が同じで、アクションのみが異なる場合は、拒否ルールが有効になります。拒否ルールの優先度は、許可ルールの優先度よりも低くする必要があります。これにより、許可ルールが有効になり、指定された Web サイトの IP アドレスへのアウトバウンドアクセスが許可されます。
次の表に、セキュリティグループルールの例を示します。
ルールの向き | アクション | 優先度 | プロトコルタイプ | ポート範囲 | 権限付与オブジェクト |
アウトバウンド | 拒否 | 2 | すべて | 宛先: -1/-1 | 宛先: 0.0.0.0/0 |
アウトバウンド | 許可 | 1 | カスタム TCP | 宛先: 80/80 | 宛先: 47.96.XX.XX |
アウトバウンド | 許可 | 1 | カスタム TCP | 宛先: 443/443 | 宛先: 121.199.XX.XX |
上記のルールは、セキュリティグループ内の ECS インスタンスが、ポート 80 の 47.96.XX.XX にある HTTP サービスと、ポート 443 の 121.199.XX.XX にある HTTPS サービスにアクセスできることを示しています。その他のアウトバウンドアクセスリクエストは拒否されます。