ブラウザで起動する自分専用デスクトップ ─ VPN + DaaSの全体構成

 更新 2026-09-14

ブラウザのポータルからVPNサーバーとデスクトップサーバーを起動・停止し、安全な経路でAWS上のデスクトップを利用する構成を解説する。スポットインスタンスと「使う時だけ起動する」運用で、常時稼働の数分の一のコストに抑える。各EC2の構成と、入口のエンドポイントを使う時だけ作る考え方まで。

クラウド上に自分専用のデスクトップ(DaaS: Desktop as a Service)を持つと、 タブレットや低スペックの端末からでも、いつもの作業環境に入れる。 問題はコストと経路の安全性である。商用DaaSは月額固定で高く、 自前で建てるとデスクトップをインターネットに直接晒しがちになる。

本稿では、ブラウザから起動・停止でき、VPN経由でのみ到達でき、 使う時だけ課金される構成を解説する。

1. 全体像: 3つの構成要素

利用者がCloudFront・S3・Cognito・Lambdaでできたサーバレスの管理ポータルにHTTPSでログインし、LambdaのAPIからVPC内のVPNサーバー、Windowsデスクトップ、Linuxデスクトップを起動・停止する経路を示す図
起動・停止の経路
利用者がパブリックサブネットのL2TP/IPsecのVPNサーバーへVPN接続し、VPNトンネル内からプライベートサブネットのWindows・Linuxデスクトップへリモートデスクトップ接続する経路と、プライベートサブネットの外向き通信がNATインスタンスを通ることを示す図
接続の経路
構成要素
実体
常時稼働か
管理ポータル
CloudFront + S3 + Cognito + Lambda(すべてサーバレス)
常時(ただし従量課金でほぼゼロ円)
VPNサーバー
EC2(スポット)上のL2TP/IPsecサーバー
使う時だけ起動
デスクトップ
EC2(スポット)のWindows / Linux
使う時だけ起動

鍵になるのは「常時いる部分」をすべてサーバレスにしたこと。 EC2は1台も常時稼働させず、それでも「ブラウザを開けばいつでも起動できる」入口だけは常に生きている。

2. 利用の流れ

ポータルにIDプロバイダ連携でログインし、VPNサーバーを起動して端末標準のVPN機能(L2TP/IPsec)で接続し、デスクトップを起動してプライベートIPへRDP接続し、作業後に停止する(消し忘れは夜間に自動停止)という利用の流れ図
  • VPNはL2TP/IPsecを採用。iPhone・iPad・MacはOS標準のVPN機能でL2TP over IPsecに対応しており、専用アプリの導入が不要
  • デスクトップにはVPNトンネル内のプライベートアドレスで直接RDP接続する。インターネット側にRDPポートは一切開けない
  • 停止し忘れに備え、毎晩決まった時刻に全インスタンスを自動停止するスケジュールを仕込んである

3. 各EC2サーバーの構成

VPNサーバー(ARM小型インスタンス・スポット)

項目
設計
インスタンス
ARM系の小型(2vCPU/2GBクラス)。VPNの中継には十分
ネットワーク
NICを2枚持つ。1枚はパブリックサブネット(VPN接続の受け口)、もう1枚はプライベートサブネット(デスクトップ側への足)
受け付けるポート
IPsec関連(UDP 500/4500)のみ。SSHは開けない(管理はSSM Session Manager経由)
ソフトウェア
起動時のユーザーデータでVPNサーバーを自動構築。認証情報はSecrets Managerから初回構築時にのみ取得し、以後はVPNサーバー側で管理
クライアントの出口
VPN接続した端末のインターネット向き通信は、プライベート側NIC → NATインスタンス経由に誘導。VPNサーバー自身のグローバルアドレスを晒さない

デスクトップ(汎用インスタンス・スポット)

項目
Windows
Linux
インスタンス
汎用2vCPU/8GBクラス
同左
配置
プライベートサブネット(インターネットから直接到達不可)
同左
画面転送
標準のRDP
デスクトップ環境 + RDP互換サーバーを起動時に自動構築
初期認証情報
乱数生成しパラメータストアに保存。初回ログイン後に変更
同左
ログ
構築ログ・画面転送サーバーのログをCloudWatch Logsへ集約
同左

NATインスタンス(ARM最小・オンデマンド)

プライベートサブネットからの外向き通信(OSアップデート等)にはNAT Gatewayではなく、 最小クラスのEC2をNATインスタンスとして使う。NAT Gatewayは利用可能な状態にある時間ごとに課金されるため、使わない時間にも費用がかかる。 この用途の帯域なら最小インスタンスで十分であり、デスクトップ停止中は一緒に停止もできる。

4. コスト設計: 「使う時だけ」を徹底する

施策
効果
スポットインスタンス(永続リクエスト、中断時は停止)
オンデマンド比で大幅割引。中断で停止しても、容量が戻るとEC2が再開する
使う時だけ起動
1日2時間 × 20日利用なら、常時稼働の約1/18の稼働時間
夜間自動停止
消し忘れの上限を「その日の夜まで」に制限
常時部分のサーバレス化
ポータルの固定費が実質ゼロ
NATインスタンス
NAT Gatewayの固定費を回避

スポットの中断リスクは「個人の作業環境」という用途なら許容しやすい。 中断時の動作を「停止」にしておくと、停止中もEBSボリュームは保持され、同じアベイラビリティーゾーンで容量が戻るとEC2がインスタンスを再開する。作業データはボリュームに残っている。

5. セキュリティ設計: 入口はVPNだけ

レイヤー
制御
ポータル
IDプロバイダ連携ログイン + 許可リストにあるアカウントのみサインイン可
インターネットからの入口
VPNサーバーのIPsecポートのみ。RDP/SSHは一切公開しない
デスクトップへの到達
VPNトンネル経由のプライベートアドレスのみ。Security GroupもVPC内からの接続に限定
サーバー管理
SSHの代わりにSSM Session Manager。鍵の配布・管理が発生しない
権限
起動停止APIのLambdaは対象タグの付いたインスタンスの起動・停止のみ許可

「デスクトップをインターネットに晒さない」を出発点に、 到達経路(ネットワーク)と操作権限(IAM)を別々のレイヤーで絞っている。

6. 入口を常設しない: エンドポイントを使う時だけ作る

本構成のVPNサーバーはEC2の自前運用であり、OSとVPNソフトウェアの面倒を自分で見る必要がある。 マネージドな入口に置き換えると運用は軽くなるが、今度は入口そのものの常設費用が問題になる。

サービス
課金のされ方
接続に使うもの
AWS Client VPN
エンドポイントのサブネットへの関連付けごと、接続ごとに時間単位で課金
OpenVPNベースのVPNクライアント
AWS Verified Access
アプリケーションごとの時間と、処理したデータ量で課金
HTTPのアプリケーションはブラウザ。HTTP以外のアプリケーションは専用のConnectivity Client

どちらも、入口を作ったままにすれば使わない時間にも課金が続く。 そこで、入口のリソース自体を、使う時だけ作り、使い終わったら消すという考え方を取る。

当社では、この考え方をAWS Verified Accessを使った別の入口で実装した。 Verified AccessはVPNを使わずに、アプリケーションへのアクセスをリクエストごとに評価するサービスである。

利用開始時に自動化の手順がエンドポイントを作成してDNSに登録し、決めた利用時間だけ待機した後、DNSの登録とエンドポイントを削除する流れ図。信頼プロバイダーやグループなどの常設部分はTerraformが管理し、エンドポイントだけが作成と削除を繰り返す
部分
管理の仕方
常設する基盤(信頼プロバイダー、インスタンス、グループ)
Terraformで管理する
エンドポイント
Terraformの管理外に置く。Systems Managerの自動化の手順(Automation)が作成し、利用時間の待機後に削除する
早く終わらせたい場合
削除用の手順を単独で実行する
  • エンドポイントをTerraformの管理外に置くのは、作成・削除のたびにapplyが必要になるのを避けるためである
  • 作成の手順に待機と削除まで含め、利用の終わりに必ず削除まで進むようにしている。後始末を利用者に委ねない
  • インフラがコードで定義され、作り方が手順として固定されているからこそ、「リソースの存在自体をオンデマンドにする」という選択肢が取れる

7. まとめ

設計判断
内容
常時稼働はサーバレスだけ
「いつでも起動できる入口」と「使う時だけのEC2」を分離
入口はVPNに一本化
RDP/SSHを公開せず、OS標準クライアントで繋がるL2TP/IPsecを採用
スポット + 自動停止
割引と「消し忘れ上限」の二段構えでコストを抑える
入口のリソースをオンデマンドにする
常設の基盤とエンドポイントを分け、エンドポイントは使う時だけ自動で作成・削除する

DaaSは「贅沢な常時稼働サービス」である必要はない。 起動停止の導線をブラウザまで持ってくることで、クラウドの従量課金を個人の作業環境にそのまま適用できる。