LoginSignup
1
1

More than 3 years have passed since last update.

ELB(SSL)の内側に配置したEC2のUiPath Orchestrator(IISサーバ)をポート80で運用したい→ 妥協

Last updated at Posted at 2019-07-15

目次

概要

EC2で構築したUiPath Orchestrator サーバを、自己署名じゃない証明書でSSLで公開する で注記していた件です。

現状

いま時点の構成は以下の通りです。 ELBからUiPath Orchestratorサーバ(IISです)へのルーティングは、ポート443のHTTPSとなっています。
現実.png

理想

しかし、UiPath OrchestratorサーバはELBの内側に配置されています。したがってパフォーマンスの観点からも、ELBでSSLをほどくことでIISはポート80だけで待ち受けるようにしたいですよね。。

つまり、理想はこうです。
理想.png

今回のテーマはコレです。結果うまくいかなくて妥協案に落ち着くのですが (´Д`;)。。

やってみる

ELBでSSLをほどいて IISにはHTTPのポート80で流すということですが、以下の制約というか前提が。。

  • UiPath OrchestratorのインストーラがIIS上にSSLで構築してくれてしまう
  • URL Rewrite機能を用いて HTTPアクセスをHTTPSにリダイレクトしてくれる

したがって、これらもふまえて以下の対応を行います。

さてやってみます。

IISのバインド設定を 443 → 80へ変更

RDPでIISサーバにログインし、スタートメニューで「IIS」といれて、設定画面を開きます。
01.png

「バインドの編集」を選択し、
02.png

追加をクリック
03.png

種類が「http」であることを確認し、ホスト名を「*」にしてOKをクリックし、ポート80をバインドします。(タイトルは 443→80へ変更すると書いてるんですが、あとのことをかんがえて、443も残しておきましょう :-))
04.png

ポート80が追加されました。
05.png

IISを再起動して作業完了です。
06.png

URL Rewrite機能をDisableにしてしまう

つづいてポート80に来たら443に転送するという機能、URL Rewriteの機能を停止します。

URL Rewiteを右クリックし「機能を開く」を選択
07.png

まずはInboundのルールを右クリックし、「Disable Rule」をクリック。
08.png

色が薄くなって、Disableされたことがわかります。つづいてOutbound側も同様に。
09.png

2つありますが、どちらもDisableにしましょう。
10.png

一応、IISサーバを再起動して、作業完了です。

orchhttpという「ポート80(HTTP)で受信する」ターゲットグループを追加/Orchサーバを追加

さてさてIISサーバでポート80でOrchestratorが接続可能になったので、ELBがそちらに接続するためのターゲットグループを作成します。
やりかたはUiPath Orchestrator サーバをSSLで公開する と同じです。

追加出来たらこんな感じになるとおもいます。
11.png

ELBのルーティング設定を、orch → orchhttp へ変更

最後に、ELBに来たときにデフォルトではorchグループに転送していましたが、そのデフォルト値をorchhttpへ変更します。

ロードバランサー >> リスナー >> 「ルールの表示/編集」をクリック
12.png

上の編集ボタンをクリック
13.png

最後、の編集ボタンをクリック
14.png

then の編集ボタンをクリック
15.png

転送先に「orchhttp」を選択し、
16.png

チェックボタンをクリック
17.png

最後に「更新」をクリックしたら
18.png

転送先が変更されました。
19.png

ELBのセキュリティグループから、EC2インスタンスのセキュリティグループへポート80を許可する

さいごに ELBのグループからEC2のインスタンスが属するセキュリティグループへ、ポート80の通信許可をしてあげてください。

疎通確認。。WEBからの接続はOK、Robotの接続がNGという。。

さてWEB画面を開いてみます。URLは https://orch.example1.xyz/ でした。、、、、表示されますねー!
20.png

ホントに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です、、┐('〜`;)┌。。
21.png

うーん、色々調べたのですが、ダメでした。。。ロボット接続には何かしら特殊なプロトコルが使われてるのかもしれません(すいません力尽きました)。。

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グループにルーティングする

ことで対応出来そうです。

図にすると下記の通り:
妥協.png

さあ設定です。

と言ってもターゲットグループは既に存在するし、IISのバインド設定も両方残してあるし、、、やるのは「URLがロボット専用の https://robo.example1.xyz のときだけはSSLのままルーティングする」というELBの設定追加と、DNSサーバへの設定追加(roboもELBへ転送)だけですね。

ELBの設定追加( https://robo.example1.xyz のルーティング)

なんどもやってるので、設定後画面だけ。ELBのルーティングのルール画面で、下記の通り設定し保存します。
22.png

DNSサーバへの設定追加(roboもELBへ転送)

こちらも、ELBのサーバ名をAWS Route 53(DNSサービス)で名前解決 と同じやり方で。

疎通

さあ疎通です。WEB画面はもちろんOKですね。さいごにロボット接続です。

23.png

うまくいきましたねーー。。

いちおう、一応ログをみておきます。

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だけでリダイレクト出来るようになりました!
この情報を参考にさせていただきました!ありがとうございます。

リスナーを追加をクリック。
R01.png

ポートが80であることを確認し、アクションに「リダイレクト先」を選択。
R03.png

HTTPSで、ポート443にリダイレクトさせます。後のパラメタも、そのままでよいです。保存をクリックすると、
R04.png

リスナーが追加されましたー。。
R05.png

Fiddlerで確認してみると、、、HTTPのリクエストを投げると301が返ってきて、HTTPSへリダイレクトされていますねー。。
R06.png

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1