本ドキュメントでは、セキュリティグループのインバウンドルールを構成する方法を紹介します。

仮想ファイアウォールと同様に、セキュリティグループは 1 つや複数の ECS インスタンスに対してネットワークアクセスを制御します。 これはセキュリティを分離するための重要な手段です。 ECS インスタンスを作成するときは、セキュリティグループを選択する必要があります。 セキュリティグループルールを追加して、同じセキュリティグループ内のすべての ECS インスタンスのアウトバウンドアクセスとインバウンドアクセスを制御することもできます。

セキュリティグループのインバウンドルールを構成する前に、次の情報について学んでおく必要があります。

セキュリティグループの実践に関する一般的なアドバイス

セキュリティグループを操作する前に、次のアドバイスをお読みください。

  • 最も重要なルール:セキュリティグループはホワイトリストとして使用されるべき。
  • アプリケーションに対してインバウンドルールまたはアウトバウンドルールを構成するときには、「必要最低限の権限付与」の原則を守る必要があります。 たとえば、特定のポート(例:ポート80)を許可できます。
  • 1 つのセキュリティグループですべてのアプリケーションを管理することは推奨されません。要件はレイヤによって異なってくるからです。
  • 分散アプリケーションの場合は、アプリケーションのタイプごとに異なるセキュリティグループを使用する必要があります。 たとえば、Web、Service、Database、および Cache の各レイヤに異なるセキュリティグループを使用して、異なるインバウンド/アウトバウンドのルールと権限を適用する必要があります。
  • インスタンスごとに個別のセキュリティグループを設定する必要はありません。管理コストが不必要に増えてしまうためです。
  • VPC の使用をお勧めします。
  • インターネットアクセスを必要としないリソースにインターネットアドレスを割り当てません。
  • 各セキュリティグループのルールはできるだけ簡潔にします。 1 つのインスタンスは最大 5 つのセキュリティグループに参加でき、1 つのセキュリティグループには最大 100 のセキュリティグループルールを含めることができるため、インスタンスは同時に何百ものセキュリティグループルールの影響を受ける可能性があります。 割り当てられたすべてのセキュリティルールを集約して、インバウンドトラフィックまたはアウトバウンドトラフィックが許可されているかどうかを判断できます。 ただし、1 つのセキュリティグループに対して非常に複雑なルールを設定すると、管理が複雑になる可能性があります。 このため、各セキュリティグループのルールはできるだけ簡潔にすることをお勧めします。
  • ECS コンソールを使用すると、セキュリティグループとセキュリティグループルールを複製できます。 有効化されているセキュリティグループとそのルールを変更する場合は、オンラインアプリケーションへの影響を避けて、セキュリティグループを複製し、そのコピーで変更する必要があります。
    有効化されているセキュリティグループのインバウンドまたはアウトバウンドルールを変更するのは危険です。 よく分からない場合、ルールを適当に更新しないでください。

セキュリティグループのインバウンドアクセスルールの設定

以下は、セキュリティグループのインバウンドルールに関するいくつかのアドバイスです。

0.0.0.0/0 インバウンドルールを使用しない

制限なしにすべてのインバウンドアクセスを許可することはよくある間違いです。 0.0.0.0/0 を使用すると、すべてのポートが外部アクセスに対してオープンになります。 これは非常に危険です。 正しい方法は、最初にすべてのポートへの外部アクセスを拒否することです。 ホワイトリスト項目はセキュリティグループ用に構成する必要があります。 たとえば、Web サービスを公開する必要がある場合は、デフォルトで 80、8080、443 などの一般的な TCP ポートのみを開くようにします。 他のすべてのポートは無効にする必要があります。

{ "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "SourceCidrIp" : "0.0.0.0/0", "Policy": "accept"} ,
{ "IpProtocol" : "tcp", "FromPort" : "8080", "ToPort" : "8080", "SourceCidrIp" : "0.0.0.0/0", "Policy": "accept"} ,
{ "IpProtocol" : "tcp", "FromPort" : "443", "ToPort" : "443", "SourceCidrIp" : "0.0.0.0/0", "Policy": "accept"} ,

不要なインバウンドルールを無効にする

現在のインバウンドルールに 0.0.0.0/0 が含まれている場合は、アプリケーションに公開する必要があるポートとサービスを確認します。 一部のポートで外部アプリケーションに直接サービスを提供したくない場合は、それらに拒否ルールを追加します。 たとえば、サーバーに MySQL データベースサービスをインストールした場合、デフォルトでポート 3306 はインターネットに公開されません。 以下に示すように、拒否ルールを追加できます。 優先順位の値を 100 に設定します。つまり最小優先度にします。

{ "IpProtocol" : "tcp", "FromPort" : "3306", "ToPort" : "3306", "SourceCidrIp" : "0.0.0.0/0", "Policy": "drop", Priority: 100} ,

この設定によって、すべてのポートがポート 3306 にアクセスすることができなくなります。 ただし、これによって通常のサービスリクエストもブロックされる可能性があります。 このため、インバウンドアクセス用に別のセキュリティグループのリソースを許可できます。

他のセキュリティグループにインバウンドアクセスの許可

異なるセキュリティグループが、必要最低限の権限付与原則に従ってインバウンドルールとアウトバウンドルールを導入します。 異なるアプリケーションレイヤーは、対応するインバウンドルールとアウトバウンドルールを持つ異なるセキュリティグループを使用する必要があります。

たとえば、分散アプリケーション用に異なるセキュリティグループが構成されているとします。 ただし、IP アドレスまたは CIDR を許可するのではなく、 他のセキュリティグループのすべてのリソースに直接アクセスする権限を付与することをお勧めします。 たとえば、sg-web セキュリティグループと sg-database セキュリティグループは、アプリケーションの Web レイヤーとデータベースレイヤーに対してそれぞれ作成されます。 sg-database では、以下のルールを追加して sg-web セキュリティグループ内のすべてのリソースにポート 3306 へのアクセス権限を付与することができます。

{ "IpProtocol" : "tcp", "FromPort" : "3306", "ToPort" : "3306", "SourceGroupId" : "sg-web", "Policy": "accept", Priority: 2} ,

インバウンドアクセス用に別の CIDR の許可

クラシックネットワークでは、ネットワークセグメントを制御することは困難であり、インバウンドルールを許可するためにセキュリティグループ ID を使用することをお勧めします。

VPC ネットワークでは、独自に IP アドレスを設定し、異なる VSwitch ドメインを使用して異なる IP ドメインを設定できます。 したがって、VPC ネットワークでは、デフォルトではアクセスを拒否することができますが、自分の VPC へのアクセスを許可すること、つまり信頼できる CIDR ネットワークセグメントを直接許可することができます。

{ "IpProtocol" : "icmp", "FromPort" : "-1", "ToPort" : "-1", "SourceCidrIp" : "10.0.0.0/24", Priority: 2} ,
{ "IpProtocol" : "tcp", "FromPort" : "0", "ToPort" : "65535", "SourceCidrIp" : "10.0.0.0/24", Priority: 2} ,
{ "IpProtocol" : "udp", "FromPort" : "0", "ToPort" : "65535", "SourceCidrIp" : "10.0.0.0/24", Priority: 2} ,

セキュリティグループルールの変更手順及び説明

セキュリティグループルールを変更すると、インスタンス間のネットワーク通信が中断される可能性があります。 重要なネットワーク通信が影響を受けないようにするには、以下の方法で必要なインスタンスを許可してからセキュリティグループポリシーを実行して変更を絞り込みます。

変更を絞り込んだ後、他の必要な変更を実行する前に、サービスアプリケーションが正しく実行されていることを確認します。
  • 新しいセキュリティグループを作成し、それに相互アクセスが必要なインスタンスを追加してから、変更を実行します。
  • 権限付与タイプがセキュリティグループの場合、相互通信を必要とするピアインスタンスのバインドされたセキュリティグループ ID をセキュリティグループの権限付与ルールに追加します。
  • 権限付与タイプが CIDR の場合、相互通信を必要とするピアインスタンスのイントラネット IP アドレスをセキュリティグループの権限付与ルールに追加します。

詳細な手順については、「クラシックネットワークでインスタンス間の相互通信を構成する方法」をご参照ください。