MFAが設定されているサービスを自動化する方法

:grey_question: Question

MFA(多要素認証)が設定されているWebサービスがあります。
このサイトの自動化をMFAが設定された状態のまま行う方法はありますか?

:bulb: Answer

以下のような方法で、MFAを設定したまま自動化することができます。

方法A: ユーザーによるログインとは異なる方法で認証を行いWeb APIを使用する方法

ログイン時にはMFAが必要であっても、対象サービスがWeb APIを提供している場合、ユーザーによるログインの代わりとなる何らかの認証を行うことでAPIを利用できることがあります。

ご利用のサービスが提供するAPIおよび認証方法を使用して自動化したい内容を実現できるかをご確認ください。

ケース1: 専用アクティビティを利用する

様々なサービス専用のアクティビティパッケージが存在します。

たとえば「UiPath.MicrosoftOffice365.Activities」パッケージを利用すると、MFAが設定された状態であってもMFA以外の方法を用いて認証することができます。
「Microsoft 365 アクティビティへの接続方法」

認証方法の一つとして、Integration Serviceという方法は特に簡単です。Integration Serviceは、Automation CloudまたはAutomation Suiteをご利用のお客様がお使いいただけます。
「Integration Service ユーザー ガイド」

Studio「アクティビティパネル」の検索欄で、対象サービスの名前などをキーワードにアクティビティを検索してみてください。「利用可能」フィルターが有効な場合には、インストールしていないパッケージのアクティビティも検索できます。

専用アクティビティパッケージの中に利用したいAPIが登録されていない場合は、Integration Serviceのコネクタビルダーにより、利用したいAPIをアクティビティとして登録することもできます。
「コネクタ ビルダーについて」

ケース2: 汎用アクティビティを利用する

「UiPath.WebAPI.Activities」パッケージに含まれる『HTTP 要求』アクティビティは、HTTPリクエストを実行する汎用的なアクティビティです。自由にカスタマイズしてWeb APIを送信できます。

またWeb APIを送信するPowerShellスクリプトを用意し、『PowerShell を呼び出し』アクティビティでそのスクリプトを実行する方法もあります。

ケース3: コード化されたオートメーションを利用する

プログラミング言語の「C#」を利用できる方はWeb APIを送信するプログラムをC#で開発し、アクティビティの代わりに、コード化されたワークフローを利用することもできます。

「コード化されたオートメーション > クイックスタート ガイド」

  • 特定Webサービス専用の.NETライブラリが存在する場合、そのライブラリが提供するAPIを利用できます。
    OpenAIのAPIを利用する例:「コード化されたオートメーション > チュートリアル > OpenAI とコード化されたワークフローの統合」
    Studio - Integrating OpenAI with Coded Workflows

  • 汎用的に利用できる「System.Net.Http」を使うと、特定WebサービスのAPIに限らず、自由にカスタマイズしてWeb APIを送信できます。
    「マイクロソフト社ガイド > HttpClient クラス」
    HttpClient クラス (System.Net.Http) | Microsoft Learn


方法B: ユーザーがMFAでログインする方法

ケース1: UiPath Assistantから有人実行する

UiPath Assistantから有人実行し、ログイン画面になったら人間がMFAでログインします。

ケース2: 無人実行し、ログイン時のみ人間が操作する

UiPath Action Centerを利用することで、ログイン時のみ人間がMFAでログインし、その他の部分を無人実行で処理することができます。

  1. Orchestratorからの指示により、ロボットが無人実行を開始する
  2. ログイン操作が必要になった時、ロボットによるジョブ実行を停止し、Action Centerで人間による操作を待つ(※待機中、ロボットは他のジョブを実行できます)
  3. 人間が任意のタイミングで認証コードを発行し、Action Centerから認証コードをロボットに連携する
  4. Action Centerで人間の操作完了後に、ロボットが残りの処理を自動で再開する

方法C: ロボットがMFAでログインする方法

ロボットでMFAを突破してセキュリティ観点から問題ないか、お客様内にて十分ご検討ください。

ケース1: 二段階目で知識情報を利用する

1-A:秘密の質問を利用する

2段階目の認証として「秘密の質問」を利用する場合には、あらかじめ質問と回答のペアを用意しておき、質問に対応した回答を『文字を入力』アクティビティで入力することで突破できます。

1-B:バックアップコードを利用する

MFA設定時に、2段階目の認証手段を紛失した時用にバックアップコードを生成できる場合、バックアップコードを利用してログインできます。
留意点として、同じバックアップコードは繰り返し利用できないため、使い切ったらバックアップコードを補充する必要があります。

ケース2: 二段階目で認証アプリを利用する

Google Authenticator、Authy、1Passwordなど、時間ベースのワンタイムパスワード(TOTP)認証アプリを利用する場合には、以下の方法が考えられます。

2-A:ロボットがワンタイムパスワードを生成する

認証アプリ登録時のQRコード画面に表示されるシークレットキーを利用し、ロボットがワンタイムパスワードを生成することもできます。『テキストを取得』アクティビティよりもUI変更に強く、安定しています。

簡単にご利用いただけるソリューションとして、「UiPathTeam.TwoStepAuthentication.Activities」パッケージが公開されております。
「Two-Factor Authentication Activities」

本パッケージはUiPathが公式にサポートするアクティビティではありませんので、ご不明点があった際には上記ページ内の「Q&A」タブ、もしくはUiPath Forumでご質問ください。

上記パッケージと同様のワークフローを、お客様ご自身で開発いただくことも可能です。
「コード化されたオートメーション内で 2 要素認証を使用する」

2-B:ロボットマシンから認証アプリにアクセスする

Authyや1PasswordなどPCからも利用できる認証アプリであれば、ロボットマシンから認証アプリにアクセスして『テキストを取得』アクティビティでワンタイムパスワードを取得することもできます。

ケース3: 二段階目でSMSを利用する

ワンタイムパスワードをSMSで受信する場合には、受信したメッセージ内から正規表現などでワンタイムパスワードを抽出します。

3-A:APIでSMSを受信する

一部のVoIPサービスでは、APIを使ってSMSを受信することもできます。
『テキストを取得』アクティビティよりもUI変更に強く、安定しています。

3-B:ロボットマシンでSMSを受信する

PC版GoogleメッセージなどのPCからSMS受信できるサービスを利用し、ロボットマシンからSMSサービスにアクセスして『テキストを取得』アクティビティでSMSを受信することもできます。

3-C:スマートフォンでSMSを受信する

モバイルオートメーションアクティビティを使ってロボットがスマートフォンにアクセスし、スマートフォンで受信したSMSを『テキストを取得』アクティビティで取得することもできます。
「モバイル デバイス オートメーション」