UiPath VPN ゲートウェイを利用して『Automation Cloud Robot - 仮想マシン』とのサイト間 VPN 接続を実現する

# はじめに

- 本記事は、『Automation Cloud Robot - 仮想マシン』 (略: ACR-VM) と UiPath Automation Cloud の VPN ゲートウェイ機能を連携させて、拠点ネットワークとの双方向の VPN 接続を実現するための設定手順を説明しています。
- 実際の拠点ネットワーク環境を準備することは困難なため、本記事では VPN ゲートウェイの挙動を確認するために **疑似的なお客様の拠点ネットワークとして、筆者の所有する Azure 環境** を利用しています。
- 公式 Web ガイド
    - Automation Cloud 管理ガイド> [Cloud ロボットの VPN を構成する](https://docs.uipath.com/ja/automation-cloud/automation-cloud/latest/admin-guide/configuring-vpn-for-cloud-robots) 
    - Orchestrator ユーザー ガイド > [Automation Cloud™ ロボット - 仮想マシン](https://docs.uipath.com/ja/orchestrator/automation-cloud/latest/user-guide/automation-cloud-robots-vm)

# VPN ゲートウェイを利用する目的

Automation Cloud にて利用可能な『Automation Cloud Robot - 仮想マシン』 (略: ACR-VM) は UiPath 社が管理する Unattended Robot (略: UR) 実行用の DaaS 環境 (Windows) です。この機能を利用すれば、エンドユーザーは自動化プロセスの実行のためにマシンを事前準備する必要はありません。Automation Cloud 上の Orchestrator からオンデマンドで仮想マシンをプロビジョニングすることができます。通常の Robot 用のライセンスとは異なり、マシンの起動時間に応じて課金されます。ユーザーはマシンの準備や運用に関わるコストを抑えることができます。Robot ライセンスを自動化業務のピークに合わせて過剰に準備する必要もありません。

VPN ゲートウェイ機能を利用しない ACR-VM では、Robot がお客様の拠点ネットワークに到達できないことが一般的です。この場合、ACR-VM は拠点ネットワークからインターネットを隔てて孤立した UR 専用環境です。実行可能なプロセスはインターネット経由でアクセス可能な Web システムの自動化処理やローカルマシンで完結する処理に限定されます。

しかし、この VPN ゲートウェイ機能を利用する ACR-VM では、Robot がユーザー拠点のネットワークにサイト間 VPN 接続が可能になります。これにより、ACR-VM 上の Robot がお客様の社内システムにアクセスして業務を自動化することが可能です。更に、VPN ゲートウェイ機能を利用する ACR-VM にはプライベート IP が生成されます。このプライベート IP を利用することで、ユーザー拠点から ACR-VM に向けて、サイト間 VPN トンネル (IPsec/IKEv2) を経由したリモートデスクトップ (RDP) 接続が可能となります。RDP 接続により、ACR-VM のセットアップや設定変更、Robot が実行したプロセスのトラブルシュート等が可能です。

# 前提要件

VPN ゲートウェイを設定するには、次の要件を満たす必要があります。

- Automation Cloud のテナントにて VPN ゲートウェイ機能が有効であること。
    - VPN ゲートウェイ機能はテナント単位で設定されるインスタンスです。
- Automation Cloud の作業先のテナントに十分な Robot Units ライセンスが割り当てられていること。
    - VPN ゲートウェイを作成するテナントには少なくとも 5,000 個の Robot Units ライセンスが必要です。
- 作業者が Automation Cloud の Organization Administrator であること。 
- 作業者が Orchestrator の「マシン - 編集」権限を含むロールを持っていること。
- Automation Cloud で『[新しい管理者エクスペリエンス](https://docs.uipath.com/ja/automation-cloud/automation-cloud/latest/release-notes/release-notes-august-2022)』を有効化していること。
- ACR-VM からの VPN 接続先となる拠点ネットワークおよび VPN ゲートウェイ用のアプライアンス (ソフトウェアアプライアンスも可) を準備すること。
- 正式にサポートされる VPN アプライアンスの一覧は Azure VPN Gateway でサポートされる製品 ([接続用の VPN デバイスについて - Azure VPN Gateway](https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-vpn-devices#devicetable)) に準拠していること。
    - 拠点ネットワークで使用されている VPN アプライアンスの設定方法は製品毎に異なる為、詳細な設定方法は各 VPN アプライアンスのベンダーに確認してください。
    - 本記事では **疑似的なお客様拠点として筆者の所有する Azure 環境** を利用していますが、設定に必要な情報は凡そ共通している為、知見を流用できるはずです。
- 割り当て可能な IP アドレス範囲が整理されていること。(次節の構成図を参照)
    -  『Automation Cloud Robot - 仮想マシン』と拠点ネットワークのネットワークセグメントは重複してはいけません。

# 環境構成

本記事の手順に則って最終的に構築される環境の一例を下図に示します。

![AC_ACR_VPN_Arch_forPostingQiita.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/68abf72f-ab9d-993d-e607-2b922c03f9e4.png)


### Automation Cloud 側の構成

当該環境の設定値の一例を下記に示します。

#### UiPath VPN ゲートウェイ

| 項目 | 値 | 備考 |
|:-----------|:------------|:------------|
| ゲートウェイ名 | `AzureVpnGateway` | - |
| ゲートウェイの種類 | `VPN` | - |
| パブリック IP | `104.41.230.185` | 自動割り当て |
| リージョン | Europe | - |
| Vnet | `192.168.1.0/25` | - |
| 接続名 | `VPN-Conn (UIPATH-JAPAN-DIRECTORY)` | ● 接続先パブリック IP:<br>&nbsp;&nbsp;└ `20.210.250.211`<br>● 接続先アドレス空間(※1):<br>&nbsp;&nbsp;├ `10.3.0.0/27` (`GatewaySubnet`)<br>&nbsp;&nbsp;└ `10.3.1.0/24` (`default` サブネット) |

(※1) これら 2 つのアドレス空間を内包する `10.3.0.0/16` [`10.3.0.0` - `10.3.255.255`] だけでも良いですが、運用規模に依っては IP アドレス数が過剰です。

#### Automation Cloud Robot - 仮想マシン (ACR-VM)

| 項目 | 値 | 備考 |
|:-----------|:------------|:------------|
| エイリアス名 | `CloudRobotVm01-VpnConnected` | - |
| プライベート アドレス範囲 | `192.168.2.0/24` | - |
| プライベート IP | `192.168.2.4` | 自動割り当て |
| パブリック IP| `4.210.127.56` | 自動割り当て |
| OS | Windows 10 | - |
| 拠点ネットワーク上の RDP 接続元 IP | `10.3.1.4` | 例) `Win10-Bastion` のプライベート IP |
| ACR-VM プール名 | `CloudRobotVmPool03` | - |

### VPN 接続の拠点ネットワーク側の構成

※本記事では疑似的に構成した Azure 環境を指します。

| 項目 | 値 | 備考 |
|:-----------|:------------|:------------|
| 設定対象の拠点ネットワークのアドレス空間 | `10.3.0.0/16` | - |
| 接続名 | `cloudrobots-vpnconn` | `cloudrobots-vpn-gw` と `cloudrobots-localnet-gw` の間に存在|

#### ローカル ネットワーク ゲートウェイ

| 項目 | 値 | 備考 |
|:-----------|:------------|:------------|
| ローカル ネットワーク ゲートウェイ名 | `cloudrobots-localnet-gw` | - |
| ゲートウェイ専用のサブネット名 | `GatewaySubnet` | 自動割り当て (変更不可) |
| ゲートウェイ専用のサブネットのアドレス範囲 | `10.3.0.0/27` | - |
| 接続先ゲートウェイのパブリック IP | `104.41.230.185` | UiPath VPN ゲートウェイのパブリック IP|
| 接続先アドレス空間 | `192.168.1.0/25` `192.168.2.0/24` | - |

#### 仮想ネットワーク ゲートウェイ

| 項目 | 値 | 備考 |
|:-----------|:------------|:------------|
| 仮想ネットワーク ゲートウェイ名 | `cloudrobots-vpn-gw` | - |
| パブリック IP | `20.210.250.211` | 自動割り当て |

#### ACR-VM への RDP接続元の Azure 仮想マシン

| 項目 | 値 | 備考 |
|:-----------|:------------|:------------|
| ホスト名 | `Win10-Bastion` | - |
| プライベート IP | `10.3.1.4` | 自動割り当て |
| パブリック IP | `4.241.108.122` | 自動割り当て |
| OS | Windows 10 | - |

# 設定手順

### Cloud Robot の VPN ゲートウェイの作成
- Automation Cloud > [管理] 画面にて新しい管理エクスペリエンスを有効にします。
- Automation Cloud Robot - 仮想マシン (略: ACR-VM) を作成する Orchestrator テナントを選択し、VPN ゲートウェイを作成します。

![screencapture-staging-uipath-hiroakimishima-portal-tenant-2608deab-c9e0-42fb-b269-d9df36503949-2024-01-10-13_08_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/8113c4ad-833d-2119-8ed7-840f3d3faf08.png)

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/f3c92168-9fa7-4adb-0228-df77f7a7b6eb.png)

- [ゲートウェイ Vnet のアドレス空間] 欄には ACR-VM 側の VPN ゲートウェイ用サブネットを `/25` の CIDR で指定します。(例: [`192.168.1.0/25`]) 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/048ab068-90c1-8c0b-98cf-5bef85981f94.png" width=50%>

- [DNS アドレス] 欄は拠点ネットワークの DNS サーバーの IP アドレスを割り当てる。この設定値はスキップして後で設定することも可能です。
- 「Provisioning」状態から、作成が完了して「Deployed」状態に遷移まで 30 分程の時間を要します。
- 「Deployed」 と表示されたら、後で利用するパブリック IP と Vnet の値をメモしておきましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/a18b7216-c262-3d23-c6fc-7c13674b0cd8.png" width=75%>

### 拠点ネットワークの VPN ゲートウェイの設定

拠点ネットワークの VPN アプライアンス (仮想アプライアンスも含む) の種類に応じて作業を行います。本記事では、検証用に Azure の VPN サービスを利用して疑似的に拠点ネットワークを構成するための設定例を説明します。

:::note info
お客様にて管理している Azure 環境の VPN サービスから社内ネットワークにルーティングさせることも可能ですが、本節での説明は割愛します。一般的には、各ユーザーにて用意された物理 VPN アプライアンス、物理サーバーや仮想サーバーにインストールした仮想 VPN アプライアンスを利用することになります。
:::

- Azure ポータルからリソースグループを作成します。

![az1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/8d2dff70-f594-4c09-2716-4c4abbe6adf6.png)

- 仮想ネットワーク (VNet) を作成します。
    - [基本] 項目を設定します。

    ![az2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/c338ce40-76c1-7c64-09af-611b26eb58cf.png)
 
    - IPv4 アドレス空間として、例えば、`10.3.0.0/16` を指定し、`default` のサブネットとして `10.3.1.0/24` を指定して VNet を構成します。

    ![az3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/d6ad9593-cbec-c5f8-4295-a5cc53493e49.png)

- 仮想ネットワークゲートウェイを作成し、次のようにパラメータを設定する。ゲートウェイ専用のサブネット (`GatewaySubnet`) には、例えば、 `10.3.0.0/27` を指定します。

    ![az4.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/9c370c71-4b21-d8a1-5389-2cf9251a8e29.png)

    - 仮想ネットワークゲートウェイに自動割り当てされたパブリック IP アドレスをメモしておきましょう。

    ![az5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/30ab128d-954a-87ea-d4bd-97289c694abf.png)

- ローカル ネットワーク ゲートウェイを作成します。
    - IP アドレスには Automation Cloud の VPN 設定で自動割り当てされたパブリック IP アドレス (`104.41.230.185`) を指定します。アドレス空間には下記の 2 つのアドレス空間を指定します。
        - UiPath VPN ゲートウェイの Vnet (`192.168.1.0/25`)
        - Cloud Robot - 仮想マシン用のサブネット (`192.168.2.0/24`)

    ![az6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/82d59664-4d37-5f19-86cd-5ed074134087.png)

- 仮想ネットワークゲートウェイ > [接続] > [+ 追加] より、VPN 接続を追加します。
    - [基本]タブから、接続の種類に「サイト対サイト接続 (IPsec)」を選択し、名前と地域を設定します。

    ![az7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/62d6c307-f62b-57e8-29b5-9d12aeae7551.png)

    - [設定] タブにおいて、下図のようにパラメータを指定します。共有キーは任意の文字列を指定できますが、可能な限り予測されない複雑な値を設定しましょう。

    ![az8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/d1670c5e-301b-f2d9-b388-b7b8f0480be9.png)

### Automation Cloud の VPN 接続の設定

- Automation Cloud > 管理 > VPN ゲートウェイにて接続を追加する。
    - [共有キー (PSK)] 欄には、拠点ネットワークの VPN 接続の設定時に入力した共有キー (PSK) を入力します。
    - [VPN デバイスのパブリック IP] 欄には、仮想ネットワーク ゲートウェイのパブリック IP アドレス (`20.210.250.211`) をそれぞれ入力します。
    - [オンプレミス デバイスのアドレス空間] 欄には拠点ネットワークのゲートウェイ用のサブネット (`10.3.0.0/27`) と拠点システムのサブネット (`10.3.1.0/24`) をそれぞれ入力します。

    ![ac5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/adf84887-f29a-134c-b4d3-144be28cbeed.png)

    - ステータスが「Connecting」から「Connected」になるまで 20 分程度を要します。「Failed」になった場合は一旦削除し、設定を見直しましょう。 

    ![ac6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/ba0aa2e0-3e89-88b1-0e23-03415d6473f4.png)

:::note info
筆者の環境では、設定内容が正しくても 5 分程で「Failed」になることもあったため、設定の誤りが発見できなくても焦る必要はありません。ネットワーク通信状態の影響も考えられます。
:::

- 仮想ネットワークゲートウェイの接続の状態が「接続済み」になることを確認します。

![ac7a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/158b7521-843f-00ab-7a7a-2b7bedcf1d4f.png)
![ac7b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/8a8f29e8-f81c-65ce-e7a5-feaa6d815218.png)


- VPN 接続の確認用の端末を用意します。ここでは、疑似的な拠点ネットワーク (Azure) 上に端末 (Azure 仮想マシン) を作成します。

![azb2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/4d4c6c5e-584d-a01a-5527-26604b35b7a2.png)

- 作成された Azure 仮想マシンのパブリック IP アドレスとプライベート IP アドレスを確認します。

![azb3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/f20a9b2a-714a-e6d6-6e34-ac3a60a0398a.png)

- 作成した疑似的な拠点ネットワーク上の端末 (Azure 仮想マシン) のパブリック IP アドレスまたはプライベートIP アドレス宛に RDP 接続できることを確認します。

### Cloud Robot の作成と動作確認

- Orchestrator テナントからマシンを作成する。[+ マシンの追加] ボタンから『Cloud ロボット - 仮想マシン』を選択します。

![acrvm1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/c37eac56-506c-6e2b-aa11-8461b1952cbe.png)

- マシン プールの設定 GUI が表示されます。[全般設定] タブと [仮想マシンとランタイムの詳細] タブで必要な設定を入力します。
- [プールの設定] タブにて VPN 連携を有効化し、VNet のアドレス空間に Automation Cloud Robot - 仮想マシン (ACR-VM) 用のサブネット (例: `192.168.2.0/24`) を割り当てます。

![acrvm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/4bcb02a8-aac9-b868-0d64-495478eddd7b.png)

- 作成したマシン プールの行の右端メニューから、[仮想マシンを追加/管理] メニューを選択します。

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/94ad119f-2ce7-9467-d562-1746b1b2b0df.png)

- [このプールの仮想マシン] ページが開くので、VPN ステータスが「Connected」になっていることを確認します。[仮想マシン (VM) を追加] ボタンを押下し、ACR-VM をデプロイします。

![acrvm4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/dfc8a0eb-0394-318b-da69-2992f4071512.png)

- ACR-VM のステータスが実行中となったらリモートデスクトップを有効化します。対象の仮想マシンの右側の縦三点ボタン (ケバブ メニュー) をクリックし、[リモート デスクトップを有効化] をクリックします。

![acr_rdp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/a11e2ae2-8b7a-cea8-ae2a-20792305a608.png)

![acr_rdp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/3e2f0943-01d1-2a65-155f-6b5c7c97fe9b.png)

![acr_rdp3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/7a4975d0-9cde-e51b-e98a-f2b98b1a7a97.png)

- 対象の仮想マシンの [リモート デスクトップ] 列のステータスが「有効」になっていることを確認します。「有効」ステータスの右側の info マークをクリックし、接続元の IP アドレス (アクセス IP) を入力します。デフォルトでは、現在 Automation Cloud に接続中の端末のパブリック IP アドレス (IPv4) が表示されますが、ここでは本手順内で作成した疑似的な拠点ネットワーク上の Azure 仮想マシンのプライベート IP アドレス (`10.3.1.4`) からの RDP 接続のみを許可するように設定します。

![acr_rdp4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/40c46f28-602c-4965-f18f-ad23385773c8.png)

![acr_rdp5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/85e438f6-6062-ba8b-f44a-a89137b10222.png)

- デプロイされた ACR-VM のプライベート IP アドレス宛に RDP 接続できることを確認します。
    - デプロイされた ACR-VM にログインしてコマンドプロンプトを起動し、`ipconfig` コマンドを実行して、プライベート IP が `192.168.2.x` (ここでは `192.168.2.4`) となっていることを確認します。
    - ACR-VM から拠点ネットワークのマシンにプライベート IP アドレスで Ping が通ることを確認します。
    - 下図は、疑似的な拠点ネットワーク上の Azure 仮想マシンから ACR-VM に対して、プライベート IP を利用してサイト間 VPN セキュア トンネルを介した RDP 接続が実現されている様子を示しています。

![rdpconn_toacrvm_privateip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3337440/208cf1cd-b78a-fdc0-ed7d-b30c5cbcb997.png)

:::note warn
Azure 側で ICMP 通信が遮断される仕様のため、UiPath が管理する Azure 環境で稼働している Automation Cloud Robot - 仮想マシン (略: ACR-VM) に通常の Ping は通りません。
:::

# 終わりに

今回は拠点ネットワークと Automation Cloud Robot - 仮想マシン (略: ACR-VM) の間にサイト間 VPN セキュア トンネルを構築し、双方のプライベート IP アドレスを利用した双方向の VPN 接続を確立しました。拠点ネットワークとして本記事では Azure の VPN サービスを利用しましたが、必要な設定情報は他の VPN アプライアンスでも大差は無い為、本記事は参考としてご利用いただけます。

ACR-VM に必要なソフトウェアをインストールする際に、パブリック IP アドレスを利用したインターネット経由の RDP 接続を利用することが、セキュリティ ポリシーの観点で許容されない場合もあります。その際は本記事のような UiPath VPN ゲートウェイの利用が有効です。当然ながら本設定によって、ACR-VM 上の UiPath Studio または Robot から拠点ネットワーク内のシステムにアクセスすることができる為、ACR-VM による自動化範囲が拡張されます。

---

以上です。