目次
- EC2で構築したUiPath Orchestrator サーバを、自己署名じゃない証明書でSSLで公開する
- AWS Certificate Managerを使って無料でSSL証明書を発行する
- EC2とELBで、URLごとに別のサーバにルーティングする
- ELB(SSL)の内側に配置したEC2のUiPath Orchestrator(IISサーバ)をポート80で運用したい→ 妥協 本記事
概要
EC2で構築したUiPath Orchestrator サーバを、自己署名じゃない証明書でSSLで公開する で注記していた件です。
現状
いま時点の構成は以下の通りです。 ELBからUiPath Orchestratorサーバ(IISです)へのルーティングは、ポート443のHTTPSとなっています。
理想
しかし、UiPath OrchestratorサーバはELBの内側に配置されています。したがってパフォーマンスの観点からも、ELBでSSLをほどくことでIISはポート80だけで待ち受けるようにしたいですよね。。
今回のテーマはコレです。結果うまくいかなくて妥協案に落ち着くのですが (´Д`;)。。
やってみる
ELBでSSLをほどいて IISにはHTTPのポート80で流すということですが、以下の制約というか前提が。。
- UiPath OrchestratorのインストーラがIIS上にSSLで構築してくれてしまう
- URL Rewrite機能を用いて HTTPアクセスをHTTPSにリダイレクトしてくれる
したがって、これらもふまえて以下の対応を行います。
- IISの設定で、Orchestratorアプリケーションのバインドを、ポート443→80へ変更する
- URL Rewrite機能をDisableにしてしまう
- EC2のターゲットグループに、orchhttpという「ポート80(HTTP)で受信する」グループを追加
- 既存のOrchestratorサーバを、ポート80でorchhttpに属させる
- ELBのルーティング設定を、orch → orchhttp へ変更
- ELBのセキュリティグループから、EC2インスタンスのセキュリティグループへポート80を許可する
さてやってみます。
IISのバインド設定を 443 → 80へ変更
RDPでIISサーバにログインし、スタートメニューで「IIS」といれて、設定画面を開きます。
種類が「http」であることを確認し、ホスト名を「*」にしてOKをクリックし、ポート80をバインドします。(タイトルは 443→80へ変更すると書いてるんですが、あとのことをかんがえて、443も残しておきましょう :-))
URL Rewrite機能をDisableにしてしまう
つづいてポート80に来たら443に転送するという機能、URL Rewriteの機能を停止します。
まずはInboundのルールを右クリックし、「Disable Rule」をクリック。
色が薄くなって、Disableされたことがわかります。つづいてOutbound側も同様に。
一応、IISサーバを再起動して、作業完了です。
orchhttpという「ポート80(HTTP)で受信する」ターゲットグループを追加/Orchサーバを追加
さてさてIISサーバでポート80でOrchestratorが接続可能になったので、ELBがそちらに接続するためのターゲットグループを作成します。
やりかたはUiPath Orchestrator サーバをSSLで公開する と同じです。
ELBのルーティング設定を、orch → orchhttp へ変更
最後に、ELBに来たときにデフォルトではorchグループに転送していましたが、そのデフォルト値をorchhttpへ変更します。
ロードバランサー >> リスナー >> 「ルールの表示/編集」をクリック
ELBのセキュリティグループから、EC2インスタンスのセキュリティグループへポート80を許可する
さいごに ELBのグループからEC2のインスタンスが属するセキュリティグループへ、ポート80の通信許可をしてあげてください。
疎通確認。。WEBからの接続はOK、Robotの接続がNGという。。
さてWEB画面を開いてみます。URLは https://orch.example1.xyz/ でした。、、、、表示されますねー!
ホントにHTTPSがほどかれて、HTTPでルーティングされているかな?ということでIISのログを確認してみます。場所は、
C:\inetpub\logs\LogFiles\W3SVC2\
です。
確認してみると、、、おお、確かにポート80で繋いでいるというログが出力されています。
2019-07-14 15:11:47 172.31.34.47 GET /odata/Users/UiPath.Server.Configuration.OData.GetCurrentPermissions - 80 ...
2019-07-14 15:12:05 172.31.34.47 GET / - 80 - 172.31.3.121 ELB-HealthChecker/2.0 - 302 0 0 10
HTTPSをそのままルーティングしていたときは、、うん443というログが出力されています。
2019-07-14 15:14:08 172.31.34.47 GET /odata/Users/UiPath.Server.Configuration.OData.GetCurrentPermissions - 443 ...
2019-07-14 15:14:32 172.31.34.47 GET / - 443 - 172.31.3.121 ELB-HealthChecker/2.0 - 302 0 0 13
つづいて、PCのロボットトレイからの接続・切断ですが、、、うーん、まさかのNGです、、┐('〜`;)┌。。
うーん、色々調べたのですが、ダメでした。。。ロボット接続には何かしら特殊なプロトコルが使われてるのかもしれません(すいません力尽きました)。。
2019/12/18追記:
ロボット接続・切断について電文を確認しようとプロキシ設定をいろいろいじってみたのですが、記事投稿当初はどうしても電文を見るツール(Fiddlerのことです)をかますコトができませんでした。
が、、下記のツールを使ってようやくその処理用の設定ファイルがわかりました。
C:\Program Files (x86)\UiPath\Studio\UiPath.Service.Host.exe.config
みたいです(Enterprise版の場合)。
https://twitter.com/RisaMizushina/status/1206938186754093057
作者の方感謝します!!
妥協案を考える
というわけで妥協案を検討します。
通常のWEBからのアクセスはHTTPS(443)を HTTP(80)へルーティングしつつ、ロボットトレイからの接続のみHTTPSをそのままルーティングする案で行きましょう。
幸い 先の記事によりURLごとにELBが別のターゲットグループにルーティングできる事がわかっているので、
- ひとつのOrchサーバをHTTPS(ポート443)のターゲットグループorchと、HTTP(ポート80)のターゲットグループorchhttp両方に属させて
- https://robo.example1.xyz というロボットトレイ用のURLの時は、HTTPSのままorchグループにルーティングする
ことで対応出来そうです。
さあ設定です。
と言ってもターゲットグループは既に存在するし、IISのバインド設定も両方残してあるし、、、やるのは**「URLがロボット専用の https://robo.example1.xyz のときだけはSSLのままルーティングする」というELBの設定追加**と、**DNSサーバへの設定追加(roboもELBへ転送)**だけですね。
ELBの設定追加( https://robo.example1.xyz のルーティング)
なんどもやってるので、設定後画面だけ。ELBのルーティングのルール画面で、下記の通り設定し保存します。
DNSサーバへの設定追加(roboもELBへ転送)
こちらも、ELBのサーバ名をAWS Route 53(DNSサービス)で名前解決 と同じやり方で。
疎通
さあ疎通です。WEB画面はもちろんOKですね。さいごにロボット接続です。
うまくいきましたねーー。。
いちおう、一応ログをみておきます。
WEBアクセスの出すログ:
2019-07-15 01:37:56 172.31.34.47 GET /odata/Users/UiPath.Server.Configuration.OData.GetCurrentPermissions - 80 ...
ちゃんとポート80で着信しています。
ロボットの出すログ:
2019-07-15 01:38:02 172.31.34.47 GET /signalr/hubs/signalr/negotiate clientProtocol=1.4&connectionData=[%7B%22Name%22:%22SignalrEventHub%22%7D] 443 - 172.31.46.166 SignalR.Client.NET45/2.2.1.0+(Microsoft+Windows+NT+6.2.9200.0) - 200 0 0 2
2019-07-15 01:38:02 172.31.34.47 GET /signalr/hubs/signalr/start clientProtocol=1.4&transport=webSockets&connectionData=[%7B%22Name%22:%22SignalrEventHub%22%7D]&connectionToken=...b4mrzN 443 - 172.31.46.166 SignalR.Client.NET45/2.2.1.0+(Microsoft+Windows+NT+6.2.9200.0) - 200 0 0 2
2019-07-15 01:38:03 172.31.34.47 POST /api/robotsservice/GetProcesses - 443 WINDOWS_m-kino.robotAccount 172.31.46.166 - - 200 0 0 144
2019-07-15 01:38:03 172.31.34.47 POST /api/robotsservice/BeginSession - 443 - 172.31.46.166 - - 200 0 0 205
2019-07-15 01:38:03 172.31.34.47 POST /api/robotsservice/Heartbeat - 443 - 172.31.3.121 - - 200 0 0 236
おお、ポート443で着信していますね!よさそうです。
以上、ながながと環境構築でした。ロボットトレイからの接続だけ別のURLでSSLのままルーティングするという、どうもコレジャナイ感満載ですが、、コレでうまくいくか、しばらく様子見です。
おつかれさまでしたー。
おまけ:ELBへのHTTP着信は、HTTPSへルーティングする
おまけです。IISのURL Rewriteでやっていた、HTTPへの着信はHTTPSへ転送する機能をDisableにしましたが、ELBのルーティングでコレをやっておきましょう。
参考:Webサーバでの実装不要!ALBだけでリダイレクト出来るようになりました!
この情報を参考にさせていただきました!ありがとうございます。
ポートが80であることを確認し、アクションに「リダイレクト先」を選択。
HTTPSで、ポート443にリダイレクトさせます。後のパラメタも、そのままでよいです。保存をクリックすると、
Fiddlerで確認してみると、、、HTTPのリクエストを投げると301が返ってきて、HTTPSへリダイレクトされていますねー。。