Elastic Compute Service (ECS) インスタンスに直接パブリック IP アドレスを割り当てる代わりに、NAT Gateway、Server Load Balancer (SLB)、またはセッション管理を使用します。
セキュリティリスク
Elastic IP アドレス (EIP) や静的パブリック IP アドレスなどのパブリック IP アドレスを ECS インスタンスに直接割り当てると、攻撃対象領域が拡大し、次のリスクが発生します:
パッシブスキャンと検出: 公開されたサービスポートがスキャナーによって検出されると、DDoS 攻撃やリモートの脆弱性の悪用につながり、ホストが侵害される可能性があります。
脆弱なポートへの攻撃: セキュリティグループの設定が不適切な場合、SSH (ポート 22)、RDP (ポート 3389)、SMB (ポート 445) などの管理ポートがインターネットに公開される可能性があります。これらのポートは、ブルートフォース攻撃、パスワード推測、認証情報窃取に対して非常に脆弱であり、ホストの侵害やデータ漏洩につながります。
管理の複雑化: インスタンスごとにパブリック IP アドレスとアクセス制御ポリシーを管理すると、運用保守の複雑さが増し、設定ミスのリスクが高まり、単一障害点が生じます。
分類保護要件への非準拠: MLPS 2.0 などの標準では、すべてのパブリックネットワークアクセスが安全で、制御可能で、監査可能であることが求められます。インスタンスを直接公開する代わりに、SLB、NAT Gateway、または 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 の運用保守ツールを使用してください。
ソリューション | シナリオ |
ワークベンチのターミナル接続 | 迅速で一時的な日常管理、初心者に適しています |
セッション管理 | 開発者や運用保守エンジニアによる日常的な使用 (ポート公開不要) |
Bastionhost | 厳格なコンプライアンスおよび監査要件を伴うエンタープライズレベルでの使用 |
ワークベンチを使用した接続
ワークベンチは、ブラウザで安全なシェルまたは RDP セッションを開きます。日常的な管理に推奨します。
仕組み: リクエストは、インスタンスに到達する前に、ワークベンチのサービスクラスターを介して認証および中継されます。セキュリティグループは、管理ポートでワークベンチサービスの IP アドレス範囲を許可するだけで済むため、攻撃対象領域を最小限に抑えられます。
使用方法:
セッション管理を使用した接続
セッション管理は、ポートを一切公開せずに柔軟なインスタンス管理を提供します。
仕組み: クラウドアシスタント エージェントが、クラウドアシスタント サービスへの暗号化されたリバース接続を確立します。すべての運用保守操作はこのトンネルを通過するため、インスタンスはインバウンドポートをリッスンしません。
使用方法:
安全なアウトバウンドインターネットアクセス
ECS インスタンスは、パッケージのダウンロード、システムの更新、またはサードパーティ API の呼び出しのために、アウトバウンドインターネットアクセスを必要とすることがよくあります。
NAT Gateway の使用
仕組み:
VPC 内の ECS インスタンスにはパブリック IP アドレスがありません。
VPC ルートは、すべてのアウトバウンドトラフィックを NAT Gateway に転送します。
NAT Gateway は、リクエストをインターネットに送信する前に、プライベート IP アドレスを自身のパブリック IP アドレスに変換します。
主な利点:
バックエンドインスタンスの秘匿: インターネットから見えるのは NAT Gateway のパブリック IP アドレスのみです。バックエンドの ECS インスタンスは検出されず、直接アクセスされることもありません。
一元管理: 単一の VPC 出口を介してアウトバウンドトラフィックを管理します。
パブリック IP アドレスの節約: 複数の ECS インスタンスが 1 つ以上のパブリック IP アドレスを共有します。
詳細については、「インターネット NAT Gateway の SNAT 機能を使用したインターネットアクセス」をご参照ください。
アウトバウンドセキュリティグループルールの設定
アウトバウンド専用アクセスの場合でも、侵害されたインスタンスは外部の C&C サーバーに接続する可能性があります。アウトバウンドセキュリティグループルールは、このような悪意のある接続をブロックします。
デフォルトの拒否ポリシーを設定します。 最も低い優先度 (100 など) でアウトバウンドルールを追加します:ポリシー「Deny」、宛先 0.0.0.0/0、ポート範囲:すべて。
必要な Alibaba Cloud サービスを許可します。 基本的な Alibaba Cloud サービスのアドレスに対して、優先度の高い許可ルールを追加します。例:
Security Center エージェント:100.100.0.0/16、106.11.0.0/16、およびその他のアドレス範囲 (ポート 80/443)。
クラウドアシスタント エージェント:100.100.100.200:80 および各リージョンのクラウドアシスタント サービスのドメイン名。
Alibaba Cloud ミラー/OSS/SLS: リージョンのドメイン名を解決し、その IP アドレスを追加します。
ビジネス上の宛先を許可します。 特定のドメイン (github.com など) にアクセスするには、
digまたはnslookupを使用してその IP アドレスを解決し、アウトバウンド許可ルールに追加します。
安全なインバウンドインターネットアクセス
ECS インスタンスが Web サイト、アプリのバックエンド、または API をインターネットユーザーに提供する場合、パブリック IP アドレスを直接アタッチすることは避けてください。
SLB の使用
パブリック IP アドレスを ECS インスタンスに直接アタッチすると、バックエンドサーバーが公開され、高可用性を確保できません。本番環境では、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 アドレスを拒否します。
クラウドアシスタントのポートフォワーディングを使用したローカルアクセス
クラウドアシスタントのポートフォワーディングは、プライベートネットワークアクセスまたは一時的な試用を行う少数の ECS インスタンスに適しています。この方法は、ネットワーク品質の要件が低く、パブリック帯域幅のコストを避けたい場合に特に有効です。また、完全なセキュリティ防御システムを導入する前の小規模なテストやリモートサービスコールにも適しています。
例: ローカルマシンから 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キーペアを使用しないインスタンスの確認
Security Center コンソールに移動します。
ナビゲーションペインで、 を選択します。[クラウド製品設定リスク] タブで、[SSHキーペアを使用したログオン] を見つけ、操作 列の [スキャン] をクリックします。
[失敗] のステータスは、キーペア認証を使用していない 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": [ # アクセス元のIP "0.0.0.0/0", "::/0" ] }, "ForAllValue:StringEquals": { "ecs:SecurityGroupPort" : [ # 指定されたすべてのポートが以下のリストに含まれる場合 "22", "3389", "445" ] } } } ] }ポリシーを適切なリソースディレクトリノードにアタッチします。このポリシーは、そのノード配下のすべてのアカウントに対して指定された操作をブロックします。
非エンタープライズユーザー向け:
RAM コンソールにログインします。ナビゲーションペインで、権限付与ポリシー をクリックし、同じ内容のカスタムポリシーを作成します。
アクセスポリシーの権限付与管理を使用して、RAM ユーザー、RAM ユーザーグループ、または RAM ロールにポリシーを付与します。
修復
静的パブリック IP アドレスのデタッチ: 帯域幅を 0 Mbps に設定すると自動的に解放されます。詳細については、「サブスクリプションインスタンスの帯域幅の変更」および「従量課金インスタンスの帯域幅の変更」をご参照ください。
EIP のデタッチ: 詳細については、「EIP と ECS インスタンスの関連付けの解除」をご参照ください。