実際には、すべてのインスタンスを同一セキュリティグループに配置できるため、初期の設定作業負荷は軽減されます。 しかし、長期的にはビジネスシステムの相互作用は複雑になり、制御不能になります。 セキュリティグループを変更すると、ルールの追加または削除による影響範囲を明確に特定できなくなります。

セキュリティグループの合理的な計画と差別化により、システムの調整、アプリケーションによって提供されるサービスの整理、およびさまざまなレイヤーでアプリケーションの配置が容易になります。 異なるセキュリティグループを計画し、さまざまな業務に対して異なるセキュリティグループルールを設定することを推奨します。

異なるセキュリティグループの区別

  • インターネット上とイントラネット上で、ECS インスタンスに対する異なるセキュリティグループの使用

    インターネットサービスを提供する ECS インスタンスは、外部アクセス用の一部のポートの公開 (80 や 443 など) 、またはポート転送ルールの提供 (インターネット IP アドレス、EIP アドレス、NAT ポートに対する転送ルールによって設定されたインスタンスなど) のいずれかによって、アプリケーションをインターネットに公開します。

    上記の 2 つのシナリオの場合、関連するセキュリティグループは最も厳密なルールを採用する必要があります。 インターネットへの接続を最初は拒否することを推奨します。 具体的には、80 や 443 などの外部サービスの提供に必要なポートを除き、デフォルトでポートとプロトコルをすべて無効にする必要があります。 セキュリティグループにはインターネットアクセスを提供する ECS インスタンスしか含まれていないため、セキュリティグループルールを調整する方が簡単です。

    インターネットアクセスを提供する ECS インスタンスのグループの場合、それらの責任を明確化、単純化して、同一インスタンスで他の外部サービスが提供されないようにする必要があります。 たとえば、MySQL、Redis などの場合は、インターネットアクセスを無効にする ECS インスタンスにそのようなサービスをインストールし、セキュリティグループ権限付与によってサービスへのアクセスを有効にすることを推奨します。

    他のアプリケーションのインスタンスとしてセキュリティグループ SG_CURRENT にある、インターネットアクセスを提供する ECS インスタンスがあると仮定します。 以下の手順を実行して変更を加えます。

    1. 80 や 443 など、現在のインターネットサービスで公開されているポートとプロトコルを整理します。
    2. SG_WEB などの新しいセキュリティグループを作成し、対応するポートとルールを追加します。
      アクション: 許可; プロトコル種別: すべて; ポート範囲: 80/80; 権限付与オブジェクト: 0.0.0.0/0; アクション: 許可; プロトコル種別: すべて; ポート範囲: 443/443; 権限付与オブジェクト: 0.0.0.0/0。
    3. セキュリティグループ SG_CURRENT を選択し、セキュリティグループ権限付与のルールを追加します。つまり、SG_WEB 内のリソースが SG_CURRENT 内のリソースにアクセスすることを許可します。
      アクション: 許可; プロトコル種別: すべて; ポート範囲: -1/-1; 権限付与オブジェクト: SG_WEB; 優先度: 実際の状況に応じて [1 ~ 100] から選択します。
    4. ECS_WEB_1 を新しいセキュリティグループに追加します。 これはセキュリティグループを切り替える必要のあるインスタンスです。
      1. ECS コンソールで、[セキュリティグループ] をクリックします。
      2. [SG_WEB] > [インスタンスの管理] > [インスタンスの追加] をクリックします。 インスタンス ECS_WEB_1 を新しいセキュリティグループ SG_WEB に追加します。 ECS_WEB_1 が正常に機能することを確認します。
    5. 元のセキュリティグループからインスタンス ECS_WEB_1 を削除します。
      1. ECS コンソールで、[セキュリティグループ] をクリックします。
      2. [SG_WEB] > [インスタンスの管理] > [インスタンスの追加] をクリックします。 ECS_WEB_1 を選択して SG_CURRENT から削除します。 トラフィックとネットワークが正常であることを確認します。
      3. エラーが発生した場合は、ECS_WEB_1 を元のセキュリティグループ SG_CURRENT に追加します。 SG_WEB のポートが予想どおりに公開されているかどうかを確認し、それに応じて調整します。
    6. セキュリティグループに他の変更を加えます。
  • 異なるアプリケーションに対する異なるセキュリティグループの使用

    本番環境では、異なるオペレーティングシステムは一般的に、同一アプリケーショングループに属して負荷分散サービスを提供することはありません。 異なるサービスを提供することは、公開されたポートが拒否されたポートとは異なることを意味します。 したがって、異なるオペレーティングシステムを持つインスタンスを異なるセキュリティグループに属させることを推奨します。

    たとえば、TCP ポート 22 は Linux で SSH を実装するために公開され、TCP ポート 3389 は Windows でリモートデスクトップ接続を実装するために公開されます。

    さらに、同じ種類のイメージを持つが異なるサービスを提供するインスタンスについては、イントラネット経由で互いにアクセスする必要がない場合は、それらを異なるセキュリティグループに入れることを推奨します。 これにより、ルールをできるだけ単純にできるので、セキュリティグループルールの分離と将来の変更が容易になります。

    新しいアプリケーションを計画して追加するときは、異なる VSwitch を分割してサブネットを設定するのとは別に、セキュリティグループを合理的に編成する必要があります。 ネットワークセグメントとセキュリティグループを使用して、サービスプロバイダーまたはコンシューマーとして自身を区別します。

    具体的な変更手順については、上記の操作をご参照ください。

  • 本番環境とテスト環境用の異なるセキュリティグループの使用

    システムをよりよく分離するには、実際の開発中に複数のテスト環境と 1 つのオンライン環境を構築します。 ネットワークの分離をよくするには、異なる環境に異なるセキュリティポリシーを設定し、テスト環境への変更をオンライン環境に同期しないようにする必要があります。オンラインサービスの安定性に影響を与える可能性があるためです。

    異なるセキュリティグループを作成することで、アプリケーションのアクセスドメインを制限し、本番環境とテスト環境の間で相互運用がされないようにします。 また、異なるテスト環境に対して異なるセキュリティグループを作成することで、テスト環境間で干渉されなくなり、開発効率が向上します。

インターネットアクセスを必要とするサブネットまたはインスタンスのみへのインターネットアドレスの割り当て

クラシックネットワークか VPC かにかかわらず、インターネットアドレスの合理的な割り当てにより、システムのインターネット管理が容易になり、攻撃のリスクが減ります。 VPC の場合、VSwitch を作成するときに、インターネットアクセスが必要なインスタンスの IP セグメントを、複数の専用 VSwitch (サブネット CIDR) に配置することを推奨します。 これにより、監査と差別化が容易になり、インターネットに偶発的にアクセスしないようになります。

ほとんどの分散アプリケーションには、異なるレイヤーとグループがあります。 インターネットアクセスを提供しない ECS インスタンスの場合は、インターネットアドレスを提供しないようにします。 インターネットアクセスを提供するインスタンスが複数ある場合は、 Server Load Balancer を設定して、インターネットサービスのトラフィックを分散させることを推奨します。それにより、システムの可用性が向上し、障害点が 1 つも発生しないようになります。

インターネットアクセスを必要としない ECS インスタンスの場合は、インターネットアドレスを割り当てないようにします。 VPC では、ECS インスタンスがインターネットにアクセスする必要がある場合は、NAT ゲートウェイ を使用し、VPC でインターネットアドレスなしで、ECS インスタンスのインターネットプロキシサービスを提供します。 対応する SNAT ルールを設定するだけで、具体的な CIDR セグメントまたはサブネットがインターネットにアクセスできるようにします。 具体的な設定については、「SNAT」をご参照ください。 このようにして、アウトバウンドアクセスのみが必要な場合に EIP (Elastic IP) アドレスが割り当てられた後のインターネットへのサービスの公開を回避します。

最小限の原則

セキュリティグループはホワイトリストとして機能する必要があります。 したがって、開いて公開するポートをできるだけ少なくし、割り当てるインターネットアドレスをできるだけ少なくするようにします。 インターネットアドレスを割り当てたり EIP をバインドしたりすることで、オンラインインスタンスにアクセスしてトラブルシューティングを行うのは簡単になりますが、結果的にインスタンス全体をインターネットにさらすことになります。 より安全なポリシーは、Jump Server を使用して IP アドレスを管理することです。

Jump Server の使用

Jump Server ははるかに強い権限を持っているので、関連する操作をツールによって適切に記録し、監査する必要があります。 さらに、VPC で Jump Server 専用 VSwitch を選択し、対応する EIP または NAT ポート転送テーブルを提供することを推奨します。

まず、Linux の TCP 22 や Windows の RDP 3389 など、対応するポートを有効にして、専用のセキュリティグループ SG_BRIDGE を作成します。 インバウンドアクセスを制限するには、会社のインターネット出口ポートへの権限付与オブジェクトを制限して、スキャンおよびアクセスされる可能性を低くします。

その後、このセキュリティグループに Jumper Server インスタンスを追加します。 この Jumper Server が他の適切なインスタンスにアクセスするために、適切なグループ権限付与を設定します。 たとえば、SG_CURRENT のルールを追加して、SG_BRIDGE が特定のポートとプロトコルにアクセスできるようにします。

SSH 通信に Jumper Server を使用する場合は、 パスワードの代わりにログイン用 SSH キーペアを使用します。

要約すると、セキュリティグループを適切に計画することで、アプリケーションの拡張が簡単になり、システムがより安全になります。