[UiPath]非推奨化のリストから。マシンキーが2022年10月から非推奨化される？

こんにちは。[UiPath Friendsコミュニティ](https://uipath-friends.doorkeeper.jp/)運営メンバの @masatomix です。
2022/5に、

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">クラシックフォルダやマシンキー認証など、今後非推奨化されていくものリスト。<br><br>UiPathが個々の技術要素について、どういう扱い(やめちゃう、つづけるなど) としているかなどの思想を読み取れそうです。<a href="https://t.co/jMKkYYnkQL">https://t.co/jMKkYYnkQL</a><a href="https://twitter.com/hashtag/UiPathFriends?src=hash&amp;ref_src=twsrc%5Etfw">#UiPathFriends</a></p>&mdash; Masatomi KINO (@masatomix) <a href="https://twitter.com/masatomix/status/1526454825872896000?ref_src=twsrc%5Etfw">May 17, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

なんてつぶやいていたのですが、非推奨化されていくもののうち、とくに「**マシンキーの非推奨化**」について、備忘として記事にしておきます。


## TL;DR

見かけ的には、Studio/AR/UR問わず、マシンキーを入れるっていう従来の運用は廃止。
代替案ですが、[今後の非推奨化予定](https://docs.uipath.com/overview-guide/lang-ja/docs/deprecation-timeline#upcoming-deprecations) の備考にもあるとおり、

- Studio/Attended Robot(以下AR)は対話型サインインをつかってね
- Unattended Robot(以下UR)はクライアント資格情報(=ClientID/ClientSecretのこと)で接続してね
  - しかしOrchestrator(以下OC)でマシンテンプレートを発行すると、ClientID/ClientSecretのペアも発行される。
  - さらにはマシンキー=ClientIDなので、実質マシンキー運用とあまりかわらない[^1]

といえそうです。ものすごい大きな変更ではなさそうで、なんだか安心しましたね。

[^1]: 実際は、Client Secretは一度画面を閉じたら二度と表示できないので、そこだけ注意ですね。接続時にSecretは毎回再発行するとか幾分運用は気をつけた方が良さそうです。



参考: マシンテンプレートを発行している図

<img src="https://pbs.twimg.com/media/FVr9q5PUcAAICqk?format=jpg&name=medium" style="zoom:67%;" />

参考: PC側で、クライアント資格情報(ClientID/ClientSecret)をセットしている図(公式より)
![](https://files.readme.io/49012a0-assistant_client_creds.png)






## そもそも「非推奨化」の意味は

「[非推奨化のタイムライン](https://docs.uipath.com/overview-guide/lang-ja/docs/deprecation-timeline)」のページに

- 非推奨: 機能がより優れた代替機能に置き換えられている段階。**機能自体はサポート**されている
- 削除: **機能が削除されサポートされなく**なる状態

なるほど。機能がより優れた代替案があるってことですね。機能自体もサポートされているってことなので**非推奨化だからって大騒ぎする必要はない**ようです。が、非推奨化された機能はそのうち削除されるので「あ、そーなんだ」くらいにはとらえておきましょう。まあ、クラシックフォルダみたいに**なくなるといいながら何度か延命**しているのものもありますし:-)。


## マシンキーってどっちの意味？

ところで一言で**マシンキー**って言ったとき、文脈や表示箇所によって以下の二種類の意味がありそうです。

- クラシックフォルダでのみ使う「マシンキー」の意味か、(つまりマシンテンプレートは含まずの狭義の意味)
- PC側で「マシンキーをセットしてね」っていう広義のマシンキー(これはマシンテンプレートも含めた意味ですね)

今回の非推奨化ってどっちのこと？って話ですが、**クラシックフォルダも標準マシンも非推奨化リストにある**事から、後者の**広い意味でのマシンキーが非推奨化される**って考えるのが妥当ですね。

したがって**OC全体として今後マシンキーが非推奨化・廃止される**ってとらえた方がよさそうです。
とくにURはマシンキーでフォルダとの紐付けを行っていたわけで、その辺がどうなっていくか気になりますね。



## マシンキーの今後。機能がより優れた代替案とは

ST/ARはずいぶん前から対話型サインインというのが出てきているので、今回は割愛します。
さて、本日時点(2022/06/21)のOCの直近LTS [2022.4 のリリースノート](https://docs.uipath.com/orchestrator/lang-ja/docs/release-notes-2022-4-0#oauth-20-based-framework-for-robot-authentication)を見てみると、URの接続方法の説明がありました。

> Unattended ロボットが Orchestrator に接続する際に、マシン テンプレート オブジェクトを介して生成されたクライアント  ID とクライアント シークレットのペアを使用することができます。クライアント ID とクライアント  シークレットのペアで生成したトークンによって接続が認可され、Orchestrator リソースへのアクセス権がロボットに付与されます。

サイトの説明もありましたが、この**クライアントID/クライアントシークレットは 、認可の仕組みのOAuthでよく出てくる用語**で、その人が誰かってのを認証するためのID/パスワードみたいなもんです。冒頭にも書きましたが、マシンテンプレートを生成するときに、それらも一緒に払い出される仕組みになっています。なるほど。



## やってみる

簡単にですがやってみたときのキャプチャを貼っていきます。環境はクラウドOCのコミュニティ版(22.6.18-release.4[^2])、PC側のAssistantは、2022.4.3です。


[^2]: 左下に バージョン 22.6.18-release.4ってでてたけどバージョンはコレでいいのか？？)



### まずは マシンテンプレートを発行

まずはOC側。テナント>>マシン>>マシンを追加>> マシン テンプレート で名前を適当にいれて、プロビジョニングをクリック。

![002](https://imgur.com/yo3bm0D.png)



マシンテンプレートが作成されました。たしかに一緒にクライアントIDとクライアントシークレットが発行されていて、クライアントIDとマシンキーは同じモノになっているようですね。

### Assistant から接続してみる


つづいてPC側。Assistantを起動して、OCの設定を開きます。2022.4のAssistantから**接続の種類に「クライアントID」という新項目があります**のでそれを選択、クライアントIDとシークレットを先ほどの入力して、接続すると、、、

![003](https://imgur.com/NcgADLL.png)

つながりましたね。

![004](https://imgur.com/DlVFrP2.png)

ライセンスを取得できないって言われますが、いったんムシしてOKです。


> 参考:
> なんでムシしてOKなんだよって気になる方のために。ちゃんと書くと、、ちょっと前までのバージョンのAssistantは「**いまWindowsにログインしているアカウントでロボットを探しに行き、なかったらライセンスなし**」ってなっていたのですが、いつかのバージョンから、今ログインしているWindowsアカウントはムシされて「**Assistantから対話型サインインしたときのアカウントでロボットを探しに行く**」仕様に変更されました。実際Assistant上もサインインするか、OCでトラブルシューティングセッションを有効化してくれ、と書いてあります。
>
> なのでサインインしていない限り、ライセンスの状態は不定ってことになるわけですね。
> ちなみにURとしてジョブ実行する際は、フォルダに紐付いたアカウントを指定しながら実行するので、この時点でAssistant上でライセンスなしでも問題ありません。

>トラブルシューティングセッションってなんだろ、、たぶん[これ](https://docs.uipath.com/orchestrator/lang-ja/docs/managing-robots-modern-folders#debugging-unattended-processes)ですね。ここを見ると、OC上で「トラブルシューティングセッションを有効化」することで、旧バージョンの「**いまWindowsにログインしているアカウントでロボットを探しに行き、なかったらライセンスなし**」の方法で、ロボットを探しにいくようになりました。
>
>![005](https://imgur.com/RDvXtkJ.png)


このさきは、フォルダにユーザとマシンを紐付けて、、、ってやってジョブ実行するのですが、今回は割愛します。
最新バージョンではないですが、URを実行するまでのオペを動画にまとめたことがあるので、ご興味があれば見てみてください。

https://www.youtube.com/watch?v=cbYDwK4AArg&list=PLa6DCBgbi2crKzli4ddRwwhkuo4ldJVv5


というわけでマシンキーが非推奨化ってことで、URに関する「機能がより優れた代替機能」はClientID/ClientSecretを用いた接続、ってコトが分かりました。お疲れさまでした。




## すこし技術的なはなし

話をシンプルにしていくと「**なんか追加でClient Secretとやらを入れさせられるけど、ほとんど今までとおなじ**」って思える仕様変更ですが、公式の説明にもあるとおりこの接続方式は、技術的には「[OAuthのClient Credentials Flow](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4)」でアクセストークンを取得する方式となっています。

通常、Client Credentials Flowで接続する場合は、そのClientIDが利用可能なスコープを設定しておいて、接続時に必要なスコープを持ったトークンを要求するってやるんですが[^3]、マシンテンプレートを発行する際にスコープとかは定義しなかったし、実際OCからのジョブ実行時も「実行するWindowsアカウント」によって権限が決まっているように見えます。ちょっと調べた感じだと、権限の設定方法などは仕様変更されたって記述は見つけられませんでした、、。もしかしてOAuthによる接続方式は権限(ロール)もマシン単位とかになるのかな？とか思いましたが、、そうではなさそうですね、、、。

この辺はまだ分からない事も多いので、Fiddlerつかって通信を見てみるとか、もうすこし調べてみる必要がありそうです。



## 最後に 

仕様変更による、目に見えてよさげなところは、マシンキー(ClientID)を共有してるPCたちでClient Secretだけを別々にしておけば(あ、同じマシンキーにClient Secretは複数発行可能でした) Client Secretを削除することでPC単位で接続を無効にできる、とかがありそうです。
逆に目に見えて分かるめんどくさそうなところは、Client Secretは一度画面を閉じたら再表示ができないので、あとで別のヒトが画面からマシンキー(ClientID)は取り出せても、Client Secretは取り出せないところですね、、、。
OC画面で誰かがあらかじめマシンキーを発行しておいて、PCを操作する人達に「マシンキーはOC画面から自分のを取得してセットしてね」とかやってる方は注意が必要です。



以上、おつかれさまでしたー。

[^3]: API利用の際にやったことがあるヒトもいると思います。。



## 関連リンク

- ロボットの認証について詳しくは、[こちら](https://docs.uipath.com/orchestrator/lang-ja/docs/robot-authentication)をご覧ください。
- クライアント資格情報の管理方法 (新しい資格情報の作成、アクセス権の取り消し) については、[こちら](https://docs.uipath.com/orchestrator/lang-ja/docs/robot-authentication-with-client-credentials)
- RPA 開発者および有人オートメーションを使用するユーザー向けの、Robot を Orchestrator に接続する手順について詳しくは、[こちら](https://docs.uipath.com/orchestrator/lang-ja/docs/connecting-robots-to-orchestrator)