SSH ポートフォワーディングで EC2 Windows インスタンスに安全にアクセスする

SSH ポートフォワーディングで EC2 Windows インスタンスに安全にアクセスする

プライベートサブネット内の EC2 Windows インスタンスに SSH 踏み台ホスト経由でアクセスし、RDP をパブリックインターネットに公開しない方法を解説します。

Takahiro Iwasa
5 min read

EC2 Windows インスタンスをプライベートサブネットに配置し、パブリックサブネット内の踏み台ホストを経由してアクセスする構成は、インスタンスを直接インターネットに公開せずにリモートデスクトップ接続を保護する一般的な方法です。

Important

この方法で SSH により暗号化されるのは、クライアントと踏み台ホスト間の接続のみです。踏み台ホストと EC2 Windows インスタンスの間は SSH トンネルの対象外です。

全体のアーキテクチャは以下の図の通りです。クライアントはパブリックサブネット内の踏み台ホストへ SSH で接続し、そのセッションを通じて、インターネットゲートウェイへのルートを持たないプライベートサブネット内の Windows インスタンスへ RDP 通信が転送されます。SSH による暗号化は踏み台ホストまでで終わるため、VPC 内で転送される区間は通常の RDP 通信として流れます。

クライアントから SSH 踏み台ホストを経由してプライベートサブネット内の EC2 Windows インスタンスへ接続する経路

バックエンドの構築

VPC

対象の VPC 内にプライベートサブネットを作成します。適切なサブネットがすでに存在する場合は、この手順を省略できます。

Private Subnet

ルートテーブルを作成し、プライベートサブネットに関連付けます。

Route Table Configuration

🔥 Caution

このルートテーブルからインターネットゲートウェイが除外されていることを必ず確認してください。含まれていると、そのサブネットが実質的にパブリックサブネットになってしまいます。

EC2 Windows インスタンスにインターネットアクセスが必要な場合は、パブリックサブネットに NAT ゲートウェイを作成し、ルートテーブルに関連付けます。

🔥 Caution

NAT ゲートウェイの利用には追加料金がかかります。

NAT Gateway

SSH 踏み台ホスト

  1. 踏み台ホストとして使用する EC2 インスタンスをパブリックサブネットに起動する。
  2. セキュリティグループを設定し、ポート 22(SSH)と 3389(RDP)へのインバウンドトラフィックを許可する。
💡 Tip

Elastic IP(EIP)を割り当てると、踏み台ホストの接続先を固定できます。

EC2 Windows インスタンス

  1. EC2 Windows インスタンスをプライベートサブネットに起動する。
  2. EC2 ダッシュボードの Get Windows Password を使って、リモートデスクトップの認証情報を取得する。
  3. セキュリティグループを設定し、ポート 22 および 3389 へのインバウンドトラフィックを踏み台ホストからのみ許可する。

EC2 Windows Security Group

接続のテスト

ローカルのターミナルで以下のコマンドを実行し、EC2 Windows インスタンスへの接続を確立します。

Terminal window
ssh -i <YOUR_PRIVATE_KEY> -L 13389:<YOUR_EC2_WINDOWS_IP>:3389 ec2-user@<YOUR_SSH_BASTION_IP>

このコマンドは、ローカルポート 13389 宛てのトラフィックを、踏み台ホスト経由でプライベートサブネット内の EC2 Windows インスタンスへ転送します。その後、localhost:13389 に接続すると、リモートデスクトップセッションを開始できます。

Remote Desktop Connection

まとめ

EC2 Windows インスタンスをインターネットゲートウェイへのルートがないプライベートサブネットに配置し、パブリックサブネット内の SSH 踏み台ホスト経由でアクセスすることで、RDP をパブリックインターネットに公開せずに済みます。この構成では、プライベートインスタンス側のセキュリティグループが重要です。ポート 22 と 3389 へのアクセスを広い CIDR 範囲から許可せず、踏み台ホストからのみに制限します。

ssh -L 13389:<EC2_WINDOWS_IP>:3389 を使って RDP セッションを踏み台ホスト経由でトンネリングすると、クライアントマシンの localhost:13389 から、VPC の外部から直接アクセスできないインスタンスへ接続できます。

ただし、SSH トンネルの対象はクライアントから踏み台ホストまでの区間だけなので、踏み台ホスト自体を十分に保護する必要があります。セキュリティグループでは、管理者が使用する既知の送信元アドレスだけを許可します。必要に応じて EIP を割り当て、踏み台ホストの接続先を固定してください。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.