ECS インスタンスにパブリック IP アドレスを直接割り当てる代わりに、NAT ゲートウェイ、SLB、またはセッション管理を使用します。
セキュリティリスク
Elastic IP アドレス (EIP) や静的パブリック IP アドレスなどのパブリック IP アドレスを ECS インスタンスに直接割り当てると、攻撃対象領域が拡大し、次のリスクが生じます。
受動的なスキャンと検出: 公開されたサービスポートがスキャナーによって検出され、DDoS 攻撃やリモートの脆弱性の悪用につながり、ホストが侵害される可能性があります。
脆弱なポートへの攻撃: セキュリティグループの設定ミスにより、SSH (ポート 22)、RDP (ポート 3389)、SMB (ポート 445) などの管理ポートがインターネットに公開される可能性があります。これらのポートは、ブルートフォース攻撃、パスワード推測、認証情報の盗難に対して非常に脆弱であり、ホストの侵害やデータ侵害につながります。
管理の複雑化: インスタンスごとにパブリック IP アドレスとアクセス制御ポリシーを管理すると、O&M の複雑さが増し、設定ミスのリスクが高まり、単一障害点が生まれます。
分類保護要件への非準拠:MLPS 2.0 などの標準では、すべてのパブリックネットワークアクセスが安全で、制御可能で、監査可能であることが求められます。インスタンスを直接公開する代わりに、SLB、NAT ゲートウェイ、または Bastionhost を使用して、パブリックネットワークのアクセス制御を一元化します。
ベストプラクティス
セキュリティグループの設定
セキュリティグループは、ECS インスタンスのインバウンドおよびアウトバウンドのトラフィックを制御する仮想ファイアウォールです。適切なセキュリティグループの設定は、ECS ネットワーク防御の基盤です。
基本原則:最小権限。 すべてのインバウンドおよびアウトバウンドのルールに対して、最小権限の原則に従ってください。
認可オブジェクトの指定: 自社の出口 IP や他のクラウドリソースのプライベート IP アドレスなど、特定の IP アドレスまたは CIDR ブロックを使用します。ポート 80/443 の Web サービスなど、サービスをパブリックにアクセス可能にする必要がある場合を除き、0.0.0.0/0 の使用は避けてください。
認可ポートの指定: 必要なポートのみを開きます。リモート管理ポートやデータベースポートをインターネットに決して公開しないでください。
悪い例:
あるユーザーが ECS インスタンスにパブリック IP アドレスをアタッチし、セキュリティグループで SSH (ポート 22) と Redis (ポート 6379) のソースアドレスを 0.0.0.0/0 に設定しました。root ユーザーは脆弱なパスワードを使用しており、Redis にはパスワードがありませんでした。5 分以内に、自動スキャナーがサーバーを侵害し、データを盗みました。
ポート 22 を会社の IP アドレスに、ポート 6379 を VPC 内部ネットワークに制限していれば、脆弱なパスワードを使用していても、インターネットからの直接的な悪用はブロックされていたでしょう。
一般的な脆弱なポート。 次のポートについては、常にソース IP アドレスの範囲を制限してください。
ポートカテゴリー | ポート/プロトコル | サービス名 | 主なリスク |
リモート管理 | 22/TCP、3389/TCP | SSH、RDP | ブルートフォース攻撃、サーバーの完全な制御権の奪取 |
データベース | 3306/TCP、6379/TCP、1433/TCP | MySQL、Redis、SQL Server | 不正アクセス、データ侵害、リモートコード実行 (RCE) |
ファイル共有 | 445/TCP、139/TCP | SMB、NetBIOS | ワームの伝播 (EternalBlue など)、ファイルの盗難 |
Web アプリケーション管理 | 7001/TCP、8080/TCP | WebLogic、Tomcat | バックエンドの脆弱なパスワード、デシリアライゼーションの脆弱性による RCE |
ECS インスタンスへの安全な接続
SSH (ポート 22) または RDP (ポート 3389) をインターネットに公開すると、インスタンスはブルートフォース攻撃に対して脆弱になります。代わりに、以下の Alibaba Cloud O&M ツールを使用してください。
ソリューション | シナリオ |
Workbench ターミナル接続 | 迅速で一時的な日常管理、初心者に適しています |
セッション管理 | 開発者および O&M エンジニアによる日常的な使用、ポート公開ゼロ |
Bastionhost | 厳格なコンプライアンスと監査要件が求められるエンタープライズレベルでの利用 |
Workbench による接続
Workbench は、ブラウザで安全なシェルまたは RDP セッションを開きます。日常的な管理に推奨されます。
仕組み: リクエストは、インスタンスに到達する前に Workbench サービス クラスターを介して認証および中継されます。セキュリティグループは、管理ポートで Workbench サービスの IP アドレス範囲を許可するだけでよく、攻撃対象領域を最小限に抑えます。
使用方法:
セッション管理による接続
セッション管理は、柔軟なインスタンス管理のためにポートを一切公開しません。
仕組み: Cloud Assistant エージェントは、Cloud Assistant サービスへの暗号化されたリバース接続を確立します。すべての O&M 操作はこのトンネルを通過するため、インスタンスはどのインバウンドポートもリッスンしません。
使用方法:
安全なアウトバウンドインターネットアクセス
ECS インスタンスは、パッケージのダウンロード、システムの更新、またはサードパーティ API の呼び出しのために、アウトバウンドのインターネットアクセスを必要とすることがよくあります。
NAT ゲートウェイの使用
仕組み:
VPC 内の ECS インスタンスにはパブリック IP アドレスがありません。
VPC ルートは、すべてのアウトバウンドトラフィックを NAT ゲートウェイに転送します。
NAT ゲートウェイは、リクエストをインターネットに送信する前に、プライベート IP アドレスを自身のパブリック IP アドレスに変換します。
主な利点:
バックエンドインスタンスの非表示: インターネットからは NAT ゲートウェイのパブリック IP アドレスのみが見えます。バックエンド ECS インスタンスは検出されず、直接アクセスすることもできません。
一元管理: 単一の VPC 出口ポイントを介してアウトバウンドトラフィックを管理します。
パブリック IP アドレスの節約: 複数の ECS インスタンスが 1 つ以上のパブリック IP アドレスを共有します。
詳細については、「インターネットNATゲートウェイのSNAT機能を使用してインターネットにアクセスする」をご参照ください。
アウトバウンドセキュリティグループルールの設定
アウトバウンドのみのアクセスであっても、侵害されたインスタンスは外部のコマンド & コントロール (C&C) サーバーに接続する可能性があります。アウトバウンドセキュリティグループルールは、このような悪意のある接続をブロックします。
デフォルトの拒否ポリシーを設定します。 最も低い優先度 (100 など) でアウトバウンドルールを追加します。ポリシーは「Deny」、宛先は「0.0.0.0/0」、ポート範囲は「すべて」です。
必要な Alibaba Cloud サービスを許可します。 基本的な Alibaba Cloud サービスアドレスに対して、高い優先度の許可ルールを追加します。例:
Security Center Agent: ポート 80/443 での 100.100.0.0/16、106.11.0.0/16、その他。
Cloud Assistant Agent: 100.100.100.200:80 および各リージョンの Cloud Assistant サービスドメイン名。
Alibaba Cloud ミラーソース/OSS/SLS: リージョンのドメイン名を解決し、その IP アドレスを追加します。
ビジネス上の宛先を許可します。 特定のドメイン (github.com など) にアクセスするには、
digまたはnslookupでその IP アドレスを解決し、アウトバウンドの許可ルールに追加します。
安全なインバウンドインターネットアクセス
ECS インスタンスが Web サイト、アプリのバックエンド、または API をインターネットユーザーに提供する場合、パブリック IP アドレスを直接アタッチすることは避けてください。
SLB の使用
ECS インスタンスにパブリック IP アドレスを直接アタッチすると、バックエンドサーバーが公開され、高可用性が提供されません。本番環境では、Application Load Balancer (ALB) や Network Load Balancer (NLB) などの Server Load Balancer (SLB) を使用してください。
仕組み:
ユーザーリクエストは SLB のパブリックエンドポイントに到達します。
SLB は、転送ルールとヘルスチェックに基づいて、正常なバックエンド ECS インスタンスにリクエストを分散します。
バックエンド ECS インスタンスは、内部ネットワーク経由でのみ SLB と通信します。
主な利点:
バックエンドサーバーの非表示: SLB インスタンスはユーザー向けのエンドポイントとして機能し、バックエンド ECS インスタンスの IP アドレスを隠します。
高可用性: SLB は異常なインスタンスを自動的に削除し、フェールオーバーを実行します。
負荷分散: SLB は複数の ECS インスタンスにトラフィックを分散させ、水平スケーリングを実現します。
統合されたセキュリティ: SLB を WAF やその他のセキュリティ製品と統合して、アプリケーション層の攻撃から保護します。
詳細については、「IPv4サービスのロードバランシングを迅速に実装する」をご参照ください。
バックエンドインスタンスのセキュリティグループの設定
バックエンド ECS インスタンスのセキュリティグループを次のように設定します。
インバウンド ルールで、SLB サービス IP アドレス範囲からポート 80/443 などのサービスポートへのトラフィックを許可します。
他のすべてのソース IP アドレスを拒否します。
ローカルアクセス用の Cloud Assistant ポートフォワーディングの使用
ネットワーク品質の要件が低く、パブリック帯域幅のコストを避けたい、プライベートネットワークアクセスまたは一時的な試行を行う少数の ECS インスタンスには、Cloud Assistant のポートフォワーディングを使用します。これは、完全なセキュリティ防御システムが導入される前の、小規模なテストやリモートサービス呼び出しに適しています。
例:ローカルマシンから ECS インスタンス上の PostgreSQL サービスにアクセスする
ECS インスタンス上の PostgreSQL サービスは、ポート 5432 でリッスンします。パブリック IP アドレスをアタッチしたり、セキュリティグループでポート 5432 を開いたりすることなく、ローカルからアクセスできます。
セッション管理 CLI を介したポートフォワーディングは、リモートポート (5432 など) をローカルポート (8080 など) にマッピングします。127.0.0.1:8080 へのトラフィックは、暗号化された Cloud Assistant チャネルを介して ECS インスタンスに転送されます。
ターゲット ECS インスタンスのポート
5432をローカルマシンのポート8080にマッピングします。ali-instance-cli.exe portforward -i <instance_id> -r <target_port> -l <local_port>instance_id: インスタンスの ID。target_port: ターゲットインスタンスのポート。local_port: ローカルポート。pgAdmin を起動し、
127.0.0.1:8080に接続します。リクエストは、Cloud Assistant チャネルを介して ECS インスタンスのポート5432に転送されます。
コンプライアンス機能
チェック
ログオンに SSH キーペアを使用しない ECS インスタンスのクエリ
Security Center コンソールに移動します。
ナビゲーションペインで、 を選択します。[クラウド製品設定リスク] タブで、[ログオンにSSHキーペアを使用] を見つけ、操作 列の[スキャン] をクリックします。
「Failed」 ステータスは、キーペア認証を使用していない Linux インスタンスを示します。詳細 をクリックして表示します。
脆弱なポートが公開されているセキュリティグループのチェック
ECS Insight に移動します。
[セキュリティ] タブで、[特定のセキュリティグループポートへの無制限アクセス] をクリックして、脆弱なポートへの無制限アクセスを持つインスタンスを表示します。
ブロック
ECS インスタンスへのパブリック IP アドレスのアタッチ禁止
エンタープライズユーザー向け:
Resource Directory コンソールにログインします。ナビゲーションペインで [コントロールポリシー] をクリックします。次の JSON コンテンツで カスタムポリシーを作成 します。
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": [ "ecs:RunInstances", "ecs:CreateInstance", "ecs:ModifyInstanceSpec", "ecs:ModifyInstanceNetworkSpec" ], "Resource": "*", "Condition": { "Bool": { "ecs:AssociatePublicIpAddress": [ "true" ] } } }, { "Effect": "Deny", "Action": [ "vpc:AllocateEipAddress", "vpc:AllocateEipAddressPro", "vpc:AllocateEipSegmentAddress", "eipanycast:AllocateAnycastEipAddress" ], "Resource": "*" } ] }ポリシーを適切なリソースディレクトリノードにアタッチします。ポリシーは、そのノード配下のすべてのアカウントに対して、指定された操作をブロックします。
非エンタープライズユーザー向け:
RAM コンソールにログインします。ナビゲーションペインで 権限付与ポリシー をクリックし、同じ内容のカスタムポリシーを作成します。
アクセスポリシーの権限付与管理 を使用して、RAM ユーザー、RAM ユーザーグループ、または RAM ロールにポリシーを付与します。
任意のアドレスからの脆弱なポートへのアクセス制限
エンタープライズユーザー向け:
Resource Directory コンソールにログインします。ナビゲーションペインで [コントロールポリシー] をクリックします。次の JSON コンテンツで カスタムポリシーを作成 します。
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": [ "ecs:AuthorizeSecurityGroup", "ecs:ConfigureSecurityGroupPermissions", "ecs:ModifySecurityGroupRule" ], "Resource": "acs:ecs:*:*:securitygroup/*", "Condition": { "StringEquals": { "ecs:SecurityGroupSourceCidrIps": [ "0.0.0.0/0", "::/0" ] }, "ForAllValue:StringEquals": { "ecs:SecurityGroupPort" : [ "22", "3389", "445" ] } } } ] }ポリシーを適切なリソースディレクトリノードにアタッチします。ポリシーは、そのノード配下のすべてのアカウントに対して、指定された操作をブロックします。
非エンタープライズユーザー向け:
RAM コンソールにログインします。ナビゲーションペインで 権限付与ポリシー をクリックし、同じ内容のカスタムポリシーを作成します。
アクセスポリシーの権限付与管理 を使用して、RAM ユーザー、RAM ユーザーグループ、または RAM ロールにポリシーを付与します。
修正
静的パブリック IP アドレスのデタッチ:帯域幅を 0 Mbps に設定すると、自動的に解放されます。詳細については、「サブスクリプションインスタンスの帯域幅の変更」および「従量課金インスタンスの帯域幅の変更」をご参照ください。
EIP のデタッチ:詳細については、「ECS インスタンスからのEIPの関連付け解除」をご参照ください。