Zoho Vault のパスワードを RPA フローで使用する方法

Zoho Vault のパスワードを RPA フローで使用する方法

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

このチュートリアルでは、Zoho Vault から暗号化されたパスワードを安全に取得し、RPA フロー内で利用する手順を説明します。
内容は次の 2 セクションに分かれます。
初期設定とマスターキーの生成:Zoho Vault で安全な API アクセスに必要なマスターキーを生成するための初期手順です。
RPA フローの設定: RPA フロー内でユーザー名とパスワードを使用する方法の手順です。
前提条件
対応 RPA エージェント プラットフォーム: Windows
必要な Zoho アカウント: Zoho Flow、Zoho Vault
必要なソフトウェア: Windows PowerShell

初期設定とマスターキーの生成

これは一度だけ実施する必須の構成プロセスです。ここでの主な目的は、資格情報を安全に復号して RPA フローで使用するために必要となるマスターキーを生成することです。

API クライアントを登録する

マスターキーを生成するには、まず Zoho Vault に対して認可済みの API リクエストを送信する必要があります。このリクエストは Postman など任意のサービスから送信できますが、ここでは Zoho RPA のカスタム関数機能を使用します。
そのためには、Zoho Developer コンソールで API クライアントを設定します。API クライアントとは、API リクエストを安全に認可するための認証情報(クライアント ID とシークレット)のセットであり、Zoho Vault と通信するために必要なアクセス権限を付与します。

API クライアントを作成・登録するには、次の手順に従います。
  1. 移動先のデータセンターに対応する URL を使用して Developer コンソールを開きます。
    https://api-console.zoho.<replace_data_center>/
    データセンター: US は .com、インドは .in、ヨーロッパは .eu を使用します。
  2. コンソールへ初めてアクセスする場合は、Get Started をクリックします。既に利用している場合は、Add Client をクリックします。
  3. クライアントタイプとして Self Client を選択します。(メモ: すでに設定済みの Self Client がある場合は、それを利用してもかまいません。)
  4. 必要なスコープを定義します。スコープは、このクライアントに付与する正確な権限を指定します。次のスコープを使用します:ZohoVault.secrets.READ, ZohoVault.user.READ
  5. クライアントのコード有効期限(例: 10 分)を設定し、Generate をクリックします。
  6. 生成されたコードをダウンロードします。

SALT、共有キー (K)、秘密キー (P) を生成する

次に、マスターキーを導出するために必要な SALT、共有キー、秘密キーを生成します。
1. RPA アカウントでカスタム関数を作成し、次のコードを貼り付けます。カスタム関数の作成方法
  1. void fetchOnetimeVaultKeys(string code, string client_id, string client_secret, string dc)
  2. {
  3. refreshTokenResponse = invokeurl
  4. [
  5. url :'https://accounts.zoho.'+ dc + '/oauth/v2/token?code=' + code + '&client_id=' + client_id + '&client_secret=' + client_secret + '&grant_type=authorization_code'
  6. type :POST
  7. ];
  8. token = refreshTokenResponse.get('access_token');
  9. headers = Map();
  10. headers.put('Authorization','Zoho-oauthtoken ' + token);
  11. getLoginResponse = invokeurl
  12. [
  13. url :'https://vault.zoho.'+ dc + '/api/json/login?OPERATION_NAME=GET_LOGIN'
  14. type :GET
  15. headers:headers
  16. ];
  17. info 'SALT : ' + getLoginResponse.get('operation').get('details').get('SALT');
  18. openVaultResponse = invokeurl
  19. [
  20. url :'https://vault.zoho.'+ dc + '/api/json/login?OPERATION_NAME=OPEN_VAULT'
  21. type :GET
  22. headers:headers
  23. ];
  24. info 'PRIVATE KEY : ' + openVaultResponse.get('operation').get('details').get('PRIVATEKEY');
  25. info 'SHARING KEY : ' + openVaultResponse.get('operation').get('details').get('SHARINGKEY');
  26. }
2. 前の手順で取得したキー(クライアント ID、シークレット、コード)を使用して関数を実行します。関数に渡すデータセンター (DC) の値(例: .com、.in、.eu)が正しいことを確認してください。
Notes
メモ: エラーが発生した場合は、認可コードの有効期限が切れている可能性があります。Developer コンソールでコードを再生成し、再度関数を実行してください。
3. 関数が正常に実行されると、3 つの重要なキーが生成されます。Info タブをクリックし、キー(SALT、秘密キー、共有キー)をコピーして一時的に保存します。


マスターキーと ORG キーを導出する

前の手順で生成したキー(SALT、秘密キー、共有キー)を使用して、マスターキーを導出します。
  1. Zoho Vault キー導出用 HTML ファイルをダウンロードし、お好みの Web ブラウザー(例: Ulaa、Chrome、Firefox)で開きます。
  2. フォームの入力欄を埋めます。マスターキーパスワードを入力し、前の手順で生成したキー(SALT、秘密キー、共有キー)も入力します。
  3. 入力が完了すると、マスターキーと ORG キーが生成されます。[Decryption] セクションから生成されたキーをコピーします。ORG キーが生成されない場合は、マスターキーのみで問題ありません。これらのキーは次の手順で使用します。

PowerShell 復号スクリプトを作成する

このセットアップの最終ステップとして、先ほど生成したキーを使用して復号スクリプトを作成します。
1. RPA ワークフローを実行するデスクトップマシンで、この PowerShell スクリプトファイルをダウンロードします。このファイル名を DecryptVault.ps1 に変更します。
コード内の ORG キーとマスターキーを必ずご自身の値に置き換えてください。
  1.  /* ORG キー / マスターキーを変更する必要があるコードの参照 */
  2. $masterKey = '<replace_here>'
  3. $orgKey = '<replace_here>'
Notes
メモ:ORG キーにシングルクォート (') が含まれている場合は、PowerShell スクリプト内でその文字をエスケープするために、シングルクォート (') の前にバッククォート (`) を必ず付けてください。
2. ファイルを保存します。ファイル名を変更し (例: DecryptVault.ps1)、必要な場所に配置します。

RPA フローの設定

このセクションでは、Zoho RPA フローを設定して Zoho Vault からパスワードを安全に取得し、PowerShell スクリプト (DecryptVault.ps1) を使って復号し、Web ポータルやデスクトップアプリケーションに安全に入力する方法を説明します。

このフローの設定は、認証情報を実際にワークフローで使用する直前まで暗号化したまま保持することでセキュリティを維持するよう、複数の手順で構成されています。このプロセスでは、Zoho Vault から暗号化されたパスワードを取得し、ローカルの PowerShell スクリプトで復号し、システムのクリップボードを一時的かつ安全な入力手段として使用します。

まずフローで「パスワードの取得」アクションを使用して、暗号化された認証情報を取得します。次にカスタム関数を使用して、暗号化されたユーザー名とパスワードを解析して分離します。それぞれの出力 (ユーザー名とパスワード) ごとに、フローは「アプリケーションを開く」アクション経由で PowerShell スクリプトを実行し、復号用に暗号化データ文字列を渡します。スクリプトは復号したデータを直接クリップボードに配置します。その後、「ホットキー送信」アクションを使用して、アプリケーションに認証情報を貼り付けます。これらの手順をユーザー名とパスワードの両方に対して繰り返した後、最後に PowerShell コマンドを実行してクリップボードを即座にクリアし、機密データが残らないようにします。
このプロセスを具体的に実装する方法を見ていきましょう。

RPA フローを作成する

  1. 必要な RPA フローを新規作成するか、Zoho Vault からパスワードを取得したい既存のフローを開きます。このフローを実行するエージェントマシンに、PowerShell 復号ファイル (DecryptVault.ps1) が配置され、アクセス可能であることを確認します。
  2. Web または Windows アクション (Open Application を使用して invoicegenerator.exe を開く、または Open URL を使用して myportal.com を開く など) を使用して、目的のログイン画面まで遷移します。
  3. Click アクションを使用して、ユーザー名を入力したい対応する項目 (ユーザー名またはパスワード) を指定します。

Zoho Vault からパスワードを取得する

Apps セクションにある fetch password アクションをドラッグ&ドロップしてフローに追加します。設定ウィンドウで、Zoho Vault から取得したいパスワード名を正確に入力します。
次に、一連のアクションを使用して、Vault から暗号化されたパスワードを取得します。

暗号化されたユーザー名とパスワードを取得する

1. JSON 出力を解析して暗号化された認証情報を取得するカスタム関数を作成します。ロジックタブに移動し、カスタム関数の下で新しいカスタム関数を作成します。
  1. map parseVaultPassword(string secretData)

  2. {

  3. password = secretData.getJSON('password');

  4. username = secretData.getJSON('username');

  5. outputData = Map();

  6. outputData.put('username',username);

  7. outputData.put('password',password);

  8. return outputData;

  9. }

2. この関数をワークフロー内で使用し、入力としてパスワードデータがマッピングされていることを確認します。

この関数の出力として、暗号化されたユーザー名とパスワードがそれぞれ別の変数として取得されます。


ユーザー名を復号して入力する

ここでは、暗号化されたユーザー名と必要なパラメーターを PowerShell スクリプトに渡して復号します。
1. Windows App カテゴリにある Open Application アクションをドラッグ&ドロップしてフローに追加します。
2. 「画面上で指定」オプションを使用して、デスクトップマシン上の PowerShell アプリケーションを指定します。
3. Arguments 項目に、次のコマンドを入力します。必ずファイルパスを置き換え、実際のマシン上のパスを指定してください。

-- powershell.exe -NoProfile -NoExit -ExecutionPolicy Bypass -File <replace_file_path> -cipherText '${parseVaultPassword_2.username}' -isShared '${fetchPassword_1.isshared}' -displayValue 'NO'

各パラメーターの意味は次のとおりです。
<replace_file_path> - ローカルマシン上の DecryptVault.ps1 ファイルへのフルパス (例: C:\Users\Demo_user\Desktop\DecryptVault.ps1)
${parseVaultPassword.username} - parseVaultPassword カスタム関数から出力されるユーザー名。 (下のスクリーンショットを参照してください。)


${fetchPassword_1.isshared} - fetch password アクションから出力される isshared パラメーター。 (下のスクリーンショットを参照してください。)

4. Web または Windows カテゴリにある Send hotkeys アクションをフローに追加し、(Ctrl + V) を送信するよう設定して、入力項目に貼り付けます。
5. 「password」フィールドや「Next」ボタンをクリックするアクションなど、ログイン処理に必要な後続アクションを追加します。


パスワードを復号して入力する

必要な項目にパスワードを入力するため、ここまでの手順をすべて繰り返します。
1. Windows App カテゴリにある Open Application アクションをドラッグ&ドロップしてフローに追加します。
2. 「画面上で指定」オプションを使用して、デスクトップマシン上の PowerShell アプリケーションを指定します。
3. Arguments 項目に、次のコマンドを入力します。ファイルパスは必ずマシン上の実際のパスに置き換えてください。

-- powershell.exe -NoProfile -NoExit -ExecutionPolicy Bypass -File <replace_file_path> -cipherText '${parseVaultPassword_2.password}' -isShared '${fetchPassword_1.isshared}' -displayValue 'NO'

各パラメーターの意味は次のとおりです。
<replace_file_path> - ローカルマシン上の DecryptVault.ps1 ファイルへのフルパス (例: C:\Users\Demo_user\Desktop\DecryptVault.ps1)
${parseVaultPassword.password} - parseVaultPassword カスタム関数から出力されるパスワード。
${fetchPassword_1.isshared} - Fetch Password アクションから出力される isshared パラメーター。 (下のスクリーンショットを参照してください。)
4. Web または Windows カテゴリにある Send hotkeys アクションをフローに追加し、(Ctrl + V) を送信するよう設定して、入力項目に貼り付けます。
5. 「Login」ボタンをクリックするアクションなど、ログイン処理に必要な後続アクションを追加します。

クリップボードをクリアして続行する

セキュリティのため、パスワードを貼り付けた直後にクリップボードをクリアする必要があります。
1. Windows App カテゴリにある Open Application アクションをドラッグ&ドロップしてフローに追加します。
2. Arguments 項目に、次のコマンドを入力します。
-- powershell.exe -NoProfile -NoExit -ExecutionPolicy Bypass -File <replace_filePath> -clearClipboard YES
ここで、<replace_filePath> はローカルマシン上の DecryptVault.ps1 ファイルへのフルパスです。(例: C:\Users\Demo_user\Desktop\DecryptVault.ps1)

これで、残りの自動化フローの手順を続行できます。

以下の動画で、ボットの動作を確認できます。