目的・背景
- 現場環境で使用されている踏み台PC経由のRDP接続の仕組みを深く理解したい
- AWSのセキュアなネットワーク設計パターンを実際に構築して学習する
- インフラエンジニアとしてのスキル向上
今回作る構成
ローカルPC → 踏み台Windows → プライベートサーバー2台への接続フローを再現
アーキテクチャ詳細
- リージョン: ap-northeast-1(東京)
- AZ: 1つ(ap-northeast-1a)
- VPC: 10.0.0.0/16
-
サブネット:
- Public: 10.0.0.0/24(踏み台用)
- Private: 10.0.10.0/24(RDP先2台)
-
ルーティング:
- Public → IGW(インターネット接続)
- Private → NAT Gateway(踏み台サブネット上)
事前準備
- RDPクライアント(Windows: mstsc、Mac: Microsoft Remote Desktop)
- 自分のグローバルIP確認(例: 203.0.113.10/32)
- AWS コンソールへのアクセス権限(EC2/VPC/EIP作成権限)
手順1: VPCとサブネットを一括作成
AWSの「VPC and more」機能を使って、必要なリソースを一括作成します。
-
VPCコンソール → VPCを作成 → VPC and moreを選択
-
以下の設定で作成:
Name tag auto-generation: vpc-bastion-demo
IPv4 CIDR: 10.0.0.0/16
Number of Availability Zones: 1
Number of public subnets: 1
Number of private subnets: 1
NAT gateways: 1 per AZ
VPC endpoints: なし -
生成されるリソース:
- VPC、Public/Privateサブネット(各1つ)
- Internet Gateway、ルートテーブル2つ
- NAT Gateway(自動作成)
手順2: セキュリティグループ作成
セキュリティの要となるセキュリティグループを2つ作成します。
踏み台用セキュリティグループ(bastion-sg)
- VPC → セキュリティ → セキュリティグループ → セキュリティグループを作成
- 設定:
名前: bastion-sg
説明: Bastion RDP inbound from my IP
VPC: vpc-bastion-demo -
インバウンドルール:
- タイプ: RDP(TCP 3389)
- 送信元: カスタム(あなたのグローバルIP/32)
- 説明: Allow RDP from my IP
ターゲット用セキュリティグループ(target-sg)
- 同様に作成:
名前: target-sg
説明: RDP from bastion-sg
VPC: vpc-bastion-demo -
インバウンドルール:
- タイプ: RDP(TCP 3389)
- 送信元: セキュリティグループ → bastion-sg を選択
- 説明: Allow RDP from bastion SG
ポイント: target-sgは踏み台からのみ接続を許可する設定です!
手順3: キーペア作成
WindowsのAdministratorパスワード復号に必要です。
- EC2 → キーペア → キーペアを作成
- 設定:
名前: kp-bastion-demo タイプ: RSA 形式: .pem
手順4: Elastic IP の取得
踏み台サーバー用の固定IPを確保します。
- EC2 → Elastic IP → Elastic IP アドレスの割り当て
- 割り当てをクリック
手順5: 踏み台サーバー起動
いよいよ踏み台サーバーを立ち上げます!
-
EC2 → インスタンス → インスタンスを起動
-
設定:
名前: bastion-win
AMI: Microsoft Windows Server 2025 Base
インスタンスタイプ: t3.micro
キーペア: kp-bastion-demo
ネットワーク: VPC = vpc-bastion-demo、サブネット = Public
自動割り当てパブリック IP: 有効
セキュリティグループ: bastion-sg
ストレージ: 30GB gp3 -
起動後の設定:
- Elastic IP を関連付け(必要に応じて)
- Administratorパスワード取得(4〜10分後)
手順6: 踏み台サーバーへ接続
Windows の場合
- Win + R →
mstsc
- コンピューター: Elastic IP アドレス
- ユーザー: Administrator
- パスワード: 取得したパスワード
Mac の場合
- Microsoft Remote Desktop起動
- Add PC → PC name: Elastic IP
- User: Administrator で保存
接続できたら、Windows Updateを実行してインターネット接続を確認しましょう!
手順7: プライベートサブネットにアプリサーバー作成
プライベート側に2台のWindowsサーバーを立ち上げます。
app-win-01 の作成
名前: app-win-01
AMI: Windows Server 2022 Base
インスタンスタイプ: t3.micro
キーペア: kp-bastion-demo
ネットワーク: VPC = vpc-bastion-demo、サブネット = Private
自動割り当てパブリック IP: 無効
セキュリティグループ: target-sg
app-win-02 も同様に作成
各インスタンスのプライベートIPをメモしておきましょう。
手順8: 踏み台経由でプライベートサーバーへ接続
踏み台サーバー上からプライベートサーバーにRDP接続します。
- 踏み台サーバー上で
mstsc
起動 - コンピューター: プライベートIP(例: 10.0.10.23)
- ユーザー: Administrator
- パスワード: 各サーバーのパスワード
接続できたら:
- パスワード変更
動作確認チェックリスト
以下の項目をチェックして構成が正しく動作していることを確認:
- ✅ 管理端末 → 踏み台(EIP)にRDP接続できる
- ✅ 踏み台 → app-win-01/02(プライベートIP)にRDP接続できる
- ✅ app-win-01/02でWindows Updateが成功(NAT Gateway経由)
- ✅ セキュリティグループの制限が意図通り
- bastion-sg: 3389の送信元が自分のIP/32のみ
- target-sg: 3389の送信元がbastion-sgのみ
運用上の注意点
コスト対策
- 不使用時はインスタンス停止
- 必要に応じてスケジュール化
- 検証完了後は確実にリソース削除
コストの目安
主な課金項目:
- EC2インスタンス(3台)
- EBSストレージ
- NAT Gateway(時間+データ処理料金)
- Elastic IP(未関連付け時のみ)
単一AZ・NAT Gateway1台構成で大幅にコスト削減できています。
クリーンアップ
検証完了後は以下の手順で削除:
- EC2インスタンス終了(bastion-win, app-win-01/02)
- Elastic IPの関連付け解除 → 解放
- VPC削除(vpc-bastion-demo)
- 依存関係のエラーが出た場合は指示に従って対応
まとめ
AWSの知識がある程度ある人であれば難しくない実装ではあると思います。現場ではよく使用される構成ですのでインフラエンジニアだけではなく、アプリケーションエンジニアもインフラの知識を蓄えるという意味でやっておいて損がないと思います。