Automation Anywhere でログイン情報を安全に保存する標準の方法 (Credential Vault)

# 概要
RPAで本番環境でシステムを運用する場合、よくあるのが連携するシステムへのログオン作業です。この際、アカウント情報を安全なところに保持しておき、必要な時に情報をひっぱってきて利用する、という運用が望ましいです。間違ってもローカルPCに情報を保管したり、ボットのコードの中に埋め込んだりしてはなりません。

Automation Anywhere Enterpriseでは、Credential Vaultという標準機能で実現できるので、これを使ってみました。

対象

* Automation Anywhere Enterprise 11.3.2
* Automation Anywhere Enterprise A2019
* Automation Anywhere Community Edition A2019
* ([V11 Community Editionは不可](https://qiita.com/RPAbot/items/8d9b14a8b779d1d305e4#community-edition%E3%81%AE%E6%A9%9F%E8%83%BD%E7%9A%84%E5%88%B6%E9%99%90))

### Credential Vaultを利用できるコマンド
[公式ドキュメント](https://docs.automationanywhere.com/bundle/enterprise-v11.3/page/enterprise/topics/aae-client/bot-creator/using-variables/credential-variables.html)によると、以下のコマンドで利用可能とのことです。

* Active Directory
* Database
* Email Automation
* Excel
* FTP/SFTP
* Insert Keystrokes
* Manage Windows Controls
* Object Cloning
* PDF Integration
* PGP
* REST Web Services
* SOAP Web Services
* Terminal Emulator
* Web Recorder

# 事前準備: ロッカーと資格情報の準備

### ロッカーとは？資格情報とは？その概念
最初に覚えておかないといけないのが、Automation Anywhere で使われる各種オブジェクトの名前、概念です。「**ロッカー (Locker)**」「**資格情報 (Credential)**」「**属性 (Attribute)**」の3つの概念が出てきますので、図でまとめてみます。
![aa-locker-credential-attribute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/54093d5a-6736-b035-b21e-61ea00d2bae3.png)

|オブジェクト|説明|
|:--|:--|
|ロッカー (Locker)|資格情報をしまっておくための場所。**所有者 (Owner)**、**管理者 (Manager)**、**参加者 (participant)**、**コンシューマー (Consumer)**という種類のユーザーがいる。|
|資格情報 (Credential)|大事なユーザー名とパスワード (=属性)を入れておくための封筒のようなもの。複数の属性をいれておくことができる。1属性=一つの文字列なので、通常は属性1つ目=username、属性2つ目=Passwordとして運用する。|
|属性 (Attribute)|ユーザー名やパスワードなどの文字列。ユーザーが自分で記載するのか、管理者が用意するのかを選ぶことができる。|

それぞれの種類のユーザーができることは以下の通りです。

* **所有者 (Owner)**: ロッカーを所有するユーザー。ほかの所有者や管理者を自由に追加/削除できる。1名以上を割り当て可能。最低1名は所有者が必要。
* **管理者 (Manager)**: 他の所有者または管理者を追加できない以外は全ての権限を保有しています。
* **参加者 (participant)**: ロッカー参加者はロッカーを表示することができます。ロッカー参加者は自らの認証情報をこのロッカーに追加できます (削除はできません)。ロッカー参加者は、ロッカーにある自らの認証情報を表示できますが、他の認証情報は表示できません。ロッカー参加者は、ロッカー コンシューマーでなければ 、Botを実行する際に自らの認証情報を使用できません。
* **コンシューマー**: ロッカーコンシューマーはロッカーを表示することができます。ロッカーコンシューマーは、ロッカーにある自らの認証情報を表示できます。ロッカーコンシューマーには、2 つの追加のアクセス権限があります。1) ロッカーコンシューマーは、ユーザー指定の属性を持つユーザー指定の資格情報を利用して、その情報を入力できます。2) ロッカーコンシューマーはBot実行時、このロッカーの認証情報を使用できます。‎

各種類のユーザーですが、所有者、管理者、参加者はユーザー単位で権限を選択します (つまりそんなに多くのユーザーを割り当てることは想定していない)。コンシュマーだけは、多くのユーザー/デバイスに割り当てる可能性があるため、ロールベースで (カスタムロールを作って)指定します。

### 想定される管理シナリオ
資格情報の管理シナリオには、大きく分けて3つのパターンが存在します。

|ロッカーの管理|資格情報|利用者|説明|
:--|:--|:--|:--|
|管理者|管理者が登録|管理者自身 (1人だけ)|基本、自分のために使うロッカーに自分の情報をしまって一人だけで使うパターン。|
|管理者|管理者または参加者が登録|資格を持ったConsumer (複数)|たとえば、集中管理された万人共通の1種類のユーザー名/パスワードを使って複数のボットにサインインしてもらうパターン。|
|管理者|各Consumerが登録|登録した各Consumer (複数)|管理者は場所だけ提供して、各自がそれぞれのアカウント情報をしまっておき、必要に応じて取り出すパターン。|

2番目のパターンの運用イメージ
![aa-credential-scenario01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0820c86c-ca20-96d3-3628-4bb6bb1677c0.png)


3番目のパターンの運用イメージ
![aa-credential-scenario02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/cf7a38cf-2690-3241-7f9e-28f873a71d25.png)


「権限なし」と「権限あり」の場合の画面の違い (コマンドのダイアログボックスの中で`F2`を押して変数ダイアログボックスを表示させたとき)
![aa-credential-has-privilege.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/16a818fa-b381-5877-b183-194317c83226.png)



### Control Roomでの管理画面
通常の管理者としてControl Roomにログインすると、「Bots/**資格情報**」で、閲覧権限がある資格情報とロッカーの一覧を見ることができます。そして、資格情報の新規作成ができます。
![aa-credential01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/d3401d00-f257-0dfd-0ac6-dd62391a50e6.png)
![aa-credential02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/efe81133-8b44-b894-fdee-f9465b189dc6.png)

### 管理に必要なロールと注意点
ただし、注意していただきたいのが、メニューのどこにもロッカーを作成するメニューがないということです。実は、ロッカーの作成は通常の管理者 (AAE_Admin)ロールでは権限がなく、別途**ロッカー管理者 (AAE_Locker Admin)の権限が必要**になります。

しかし、管理者は自分自身の権限編集ができないので、最初の管理者にAAE_Locker Admin権限は付与できないため、**別途ロッカー管理者のユーザーを作成する必要があります**。


### 必要なロール、ユーザー、ロッカー、資格情報の作成
ここまで来たら、必要なロール、ユーザー、ロッカー、資格情報が作成できると思います。

ロールとしてコンシュマーロール (Locker_Consumer、権限の中身はデフォルトのまま)、ロッカー管理者 (lockeradminにAAE_Locker Adminを付与)、ロッカー (Locker01)、資格情報 (Cred01)を作成しましょう。

まず、通常の管理者としてControl Roomでコンシュマーロールを作成します。
![aa-credential12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/be30727b-05fb-3f25-c2d5-238199930a32.png)


その後、ロッカー管理者としてControl Roomにログインすると、以下のようにロッカーが作成可能となります。
![aa-credential03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/99b3566b-635e-573e-26b2-e4bc2bb3b024.png)

ロッカーを作成します。ロッカーの名前を入力後、「コンシューマー」のセクションをクリックして、必須の入力になっているコンシューマーのロール選択の画面に移ります。
![aa-credential04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/def60843-bb6c-2b5c-9d99-58dce3c1c7e4.png)

ロール選択の画面では、左側の「利用可能なロール」から選択して、右側の矢印ボタンをクリックして選択済みに移動させます。
![aa-credential05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/74d995fe-edcb-0be3-4b06-aeeb491aad88.png)

これで「ロッカーを作成」ボタンが押せるようになるので、クリックすればロッカーが作成されます。
![aa-credential06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/225a5350-90a0-87a1-fca0-fd776e191624.png)



その後、資格情報の作成を行います。名前を入れて、先ほど作成したロッカー Locker01を選択して矢印ボタンで右側に移動します。
![aa-credential07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/64dad30e-57b7-545c-8213-b8b3ab4a307c.png)

ロッカーが選択済みになったら、下の属性画面に移動します。
![aa-credential08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/d57fa825-95fd-fe95-6060-ef9c884ee8de.png)

属性はusernameとpasswordを作成、入力=標準にして、値をそれぞれ入力します。
![aa-credential10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5b7a935c-0760-e153-b099-f30b5b4ab7e3.jpeg)


最後に画面右上の「資格情報を作成」ボタンをクリックすれば完了です。
![aa-credential11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/091dbaff-d236-ce46-565e-98b6d6e223dd.png)




# サンプル: Control Room への自動ログインボットでのCredential Vaultの利用
作成した資格情報を使って、Control Roomにログオンするボットを作成してみましょう。

ターゲットとなるのは以下のログイン画面です。(英語を想定しています)
![aa-credential12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/1939b83f-8e6a-b120-89aa-5705a42c8cf6.png)

Locker_Consumerロールが割り当てられたBot CreatorロールでログインしたClientで、「Web Recorder」の「**Open Browser**」コマンドで対象となるログイン画面を開いた後、「**Manage Web Controls**」コマンドで、ユーz－あ名とパスワードを入れるウェブフォーム上のコントロールをキャプチャーします。まず、「**Manage Web Controls**」コマンドを左の一覧からアクションリストにドラッグ＆ドロップしてダイアログボックスを開きます。「**ページを選択**」で既存のInternet Explorer画面一覧から大正のものを選び、「**キャプチャ**」をクリックします。
![aa-credential13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/876539d8-d03a-9fcd-b27b-1f0ebaa0751f.png)

ブラウザー上で、usernameのテキストボックスのところでクリックします。そのあとダイアログボックスに戻って「**詳細ビュー**」ボタンをクリックします。
![aa-credential13-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/e618165b-3a8a-102b-da4b-e46fe801659f.png)

usernameという名前のテキストボックスがキャプチャされたことが確認されたら、右側の画面の「**アクションを選択**」で「**Set Text**」を選択、「**設定するテキスト**」のボックスで`F2`を押して変数の挿入ダイアログボックスを表示します。リストの一番上の`$Credential Locker$`の下に、先ほど作成したLocker01が表示されます。
![aa-credential14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7d0567bd-a4ea-0b3e-4d39-c263a17249b0.png)

Locker01を選択すると、Lockerの中の資格情報とその属性を選択する画面が表示されるので、Cred01のusernameを選択します。
![aa-credential15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/c884c873-b074-c1cf-84ed-a83a0b698145.png)

元の画面に戻ると、必要事項がすべて入力されていることがわかります。「**保存**」をクリックして閉じます。
![aa-credential16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/1e3f6d86-2d57-e23a-2aba-c6031faeacde.png)

コマンドが一行追加され、プレビューのスナップショットも右下に表示されます。
![aa-credential17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/24cab9fe-c832-0e7a-1837-0f6b995e4da8.png)

passwordについても同様の操作でテキストボックスをキャプチャして、入力したい資格情報を選択して指定してください。

最後のログインボタンクリックは、キャプチャ後の画面がちょっとだけ異なります。アクションとして「**Perform OnClick**」を選択して保存します。
![aa-credential18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/34647e75-d8fe-a4b9-fd44-b6951b00fed1.png)

以上で作成終了です。以下のようなアクションリストができました。
![aa-credential19.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/98ef0f8c-8bd0-ec21-9d45-dc44fdd0b80e.png)

これを実行すると、Internet Explorerが起動してControl Room のログイン画面が表示され、ユーザー名とパスワードが自動入力されてログインボタンが押され、ログインできることが確認できます。

最後までお読みいただきありがとうございました！