tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

Remote Desktop Web Service を AWS Elastic Load Balancing で冗長化する

プライベートネットワークにあるリソースへのリモートアクセスするにあたりどんな方法が一般的でしょうか。

10年前はVPN全盛で、社外からのアクセスに IPSec や PPTP などが用いられていたように思います。しかし、現在リモートアクセスを提供するなら、Remote Desktop Service を利用することが多いでしょう。幾つか理由がありますが、SSL でのアクセスは制御しやすく便利なものです。

リモート デスクトップ サービスの概要

さて、便利な Remote Desktop Service ですが、サーバーを持つと当然の如く一つのエンドポイントに対して冗長化されていることが期待されます。今回は、AWS Elastic Load Balancing で、透過的に社外からの社内リソースアクセスを提供してみましょう。

目次

環境設計

Remote Desktop Service (以下 RD Service) に関して、以下の環境を考えましょう。

ポイント 概要
アクセスURL rdweb.example.com というレコードで External ELB の Aレコード Alias を公開しておきます。ユーザーがリモートデスクトップするために利用するアドレスはこれです。
MultiAZ RD Service を EC2 に構築する際は、MultiAZ になるようにしておきます。
ELB ELB は、ぶら下がったRD Service のEC2の死活監視とバランシングを行う役割です。外からのエンドポイントは ELB 一本になるので、Internet facing で作成します。また、リクエストをバックエンドにパススルーするため、SSLではなく TCP 443 で設定します。
RD Service RD Service は、EIP を付与して、Route53 で公開しておきます。

ざっくりと以下の構成ですね。

f:id:guitarrapc_tech:20160225035603p:plain

接続方式

一言に Remote Desktop といっても Remote Desktop Service で提供する方法が複数あります。

  1. Remote Desktop Web Access (RD Web アクセス)
  2. Remote Desktop Gateway (RD ゲートウェイ)

今回紹介するのは、RD Web アクセス を用いた Remote Desktop とその冗長化です。RD ゲートウェイは、ELB を用いた冗長化ができないためご注意ください。

説明の省略

RDS サーバーを立ててEIPを振るのは省略します。DSC でも使って楽に構築してください。

www.powershellgallery.com

www.powershellgallery.com

www.powershellgallery.com

構築

とりあえずさくっと構築しましょう。

EC2 は立ててあるという前提で、ELB と Route53 のレコードをさくっと作ります。

ELB の作成

Internet facing で、ELB を作成してください。Lister は TCP 443 で Load Balancer Protocol/Instance Protocol を設定します。

これが構成の要です。くれぐれも SSL や HTTPS にしないでください。SSL のターミネートも持っての他です。

f:id:guitarrapc_tech:20160225041646p:plain

Ping も TCP 443です。

f:id:guitarrapc_tech:20160225041826p:plain

作成したら、続いて Route53 です。

Route53

ELB の A Record Alias、あるいは CNAME を作成します。(ここでは仮に guitarrapc.com のドメインとします。)

f:id:guitarrapc_tech:20160225042236p:plain

合わせて、RD Service のサーバー2つに付与したEIP で Aレコードも作っておきます。

f:id:guitarrapc_tech:20160225042359p:plain

RD Web への RemoteDesktop の公開

RD Web から内部リソースにリモートさせるため、Remote Desktop を Remote Appとして公開します。

f:id:guitarrapc_tech:20160225043303p:plain

こんな感じで RD Web で表示されればok です。

f:id:guitarrapc_tech:20160225042704p:plain

Remote Desktop Gateway が本構成では使えないように、RD Web からの リモートデスクトップはできませんので使わないようにします。

f:id:guitarrapc_tech:20160225042633p:plain

接続

さて、あとは繋いでみましょう。Private LAN ではなく、WAN 越しに Route53 で作成した rdweb.expample.com にアクセスしてみます。

Remote Desktop 接続をクリックしてダウンロードしたら

f:id:guitarrapc_tech:20160225043653p:plain

ドメインユーザーの認証を入れます。

f:id:guitarrapc_tech:20160225045621p:plain

無事に RemoteApp の認証が通れば、RD Webサーバーとつながったというトースト通知がきます。

f:id:guitarrapc_tech:20160225042932p:plain

あとは、アクセス先のサーバーを指定して、ログインしてみます。今回は適当に RD Webのサーバーにアクセスします。

f:id:guitarrapc_tech:20160225043013p:plain

サーバーにログインできましたね。

f:id:guitarrapc_tech:20160225043827p:plain

もちろん Server1 とServer2 がラウンドロビンされますし、Server1接続できないように Stop するとServer2 につながります。

ELB で冗長化されると生存監視を任せられるので楽ちんです。

まとめ

今回は、ELB を用いることでRD Web サーバーの死活監視、冗長化を行いました。個別のサーバーに直接アクセスよりも圧倒的にいいです。ただ、ELBの性質上、アクセスのたびにアクセスが分散されることがあります。その時は接続処理を繰り返せば問題ありません。ここで紹介した内容は全部SDK や PowerShell でさくっと自動化できますし、Cloud Formation を使うのもいいでしょう。

同じ要領で、ADFS の Web Application Proxy も冗長化したり、ADFS 自体も冗長化できるのでお試しください。基本的には、AWSだけではなく環境選ばず、Azure や GCP でも同様に構成できます。

RD Gateway が ELB と相性悪く、接続が確立できたりできなかったりするので、RD Web は間違いないことから推奨しておきます。