IQ Bot：RBAC設定をしてみよう！（経理部の帳票は経理部、人事部の帳票は人事部しか見られないようにする）

「IQ Botを使うにあたって、経理部の帳票は経理部、人事部の帳票は人事部でしか見られないようにしたいです。それってサーバー分けなきゃだめですか？」という質問をよくもらいます。

結論からいうと、「サーバー分けなくてもOK」です。

この記事では、サーバーを分けずにアクセス権限を切り分ける、RBAC設定のやりかたを説明します。

#そもそも、RBACって？

**R**ole　　　：　役割に
**B**ase　　　：　基づいて
**A**ccess　　：　アクセスを
**C**ontrol　　：　制御する

という意味です！

#具体例で見てみよう　

今回は、以下のような４人のユーザーにそれぞれアクセス権限を振り分けることを考えてみます。

|名前|所属|役割|
|:-----------------|:------------------|:------------------|
|鈴木|経理部|経理部のRPA推進担当。<br>経理部用のBotの開発や、経理部で使っている帳票（例：決算資料など）のIQ Botの設定を行う。|
|田中|経理部|経理部の事務担当。<br>誤りを検知した帳票の検証を行う。|
|佐藤|人事部|人事部のRPA推進担当。<br>人事部用のBotの開発や、人事部で使っている帳票（例：年末調整の申請書類等）のIQ Botの設定を行う。|
|山田|人事部|人事部の事務担当。<br>誤りを検知した帳票の検証を行う。|

#４人に割り当てるロール

上記の例では、４人のメンバーにそれぞれ以下のロールを割り当てます。
（ロールはいずれもカスタムロールで、作り方は後で詳述します）

|名前|所属・担当|付与するロール|
|:-----------------|:------------------|:------------------|
|鈴木|経理部開発担当|iq_keiri_admin<br>iq_keiri_val|
|田中|経理部事務担当|iq_keiri_val|
|佐藤|人事部開発担当|iq_jinji_admin<br>iq_jinji_val|
|山田|人事部事務担当|iq_jinji_val|

これによって、以下の制御を実現できます。

- 経理部開発担当の鈴木さんは、自分が作ったインスタンスだけを参照・開発できる
- 経理部事務担当の田中さんは、鈴木さんが作ったインスタンスだけを参照して事務作業ができる

- 人事部開発担当の佐藤さんは、自分が作ったインスタンスだけを参照・開発できる
- 人事部事務担当の山田さんは、佐藤さんが作ったインスタンスだけを参照して事務作業ができる

上記はわかりやすくするために、「自分が作ったインスタンスを～」とか「鈴木さんが～」などと書いていますが、実際には「鈴木さんと同じ役割を持った人」など役割ベースのアクセス制御になっています。

また、田中さんや山田さんがする「事務作業」というのは、[IQ Botの利用フロー](https://qiita.com/IQ_Bocchi/items/4e220a9bd6e337de4508#iq-bot%E3%81%AE%E8%AA%A4%E3%82%8A%E6%A4%9C%E7%9F%A5%E3%81%A8%E3%81%AF)における⑥の「検証」の作業のイメージです。
（IQ Botが読み取った結果を確認したり、訂正したりする作業）

##役割べースのアクセス制御をもっとわかりやすくするために

上記の説明で分かった人は、この項目は飛ばして大丈夫です。
頭に「？」が浮かんだ人のために、もうちょっと詳しく解説。

上記の４人の表では、同じ役割の人がそれぞれ１人ずつしかいないですが、例えば以下のような状況を考えてみましょう。

- 経理部は帳票の種類がたくさんあるので、開発者がもう一人必要になった！　→　開発者に小林さんを任命した！
- 人事部は運用局面で帳票の検証をたくさんするので、事務担当がもう一人必要になった！　→　事務担当に高橋さんを任命した！

この場合は、計６人の役割は以下のようになります。

|名前|所属・担当|付与するロール|
|:-----------------|:------------------|:------------------|
|鈴木|経理部開発担当|iq_keiri_admin<br>iq_keiri_val|
|小林|経理部開発担当|iq_keiri_admin<br>iq_keiri_val|
|田中|経理部事務担当|iq_keiri_val|
|佐藤|人事部開発担当|iq_jinji_admin<br>iq_jinji_val|
|山田|人事部事務担当|iq_jinji_val|
|高橋|人事部事務担当|iq_jinji_val|

経理部開発担当の鈴木さんと小林さんは役割が同じです。

なので、鈴木さんは自分が開発したインスタンスも、小林さんが開発したインスタンスも、同じように参照できて開発できます。
小林さんも、自分が開発したインスタンスも、鈴木さんが開発したインスタンスも、同じように参照できて開発できます。

田中さんは、鈴木さん・小林さんが開発したインスタンスを参照して事務作業ができます。

一方、人事部には開発者が一人しかいないので、人事部の帳票を開発できるのは佐藤さんだけです。

ですが、山田さんと高橋さんはどちらも、佐藤さんが作ったインスタンスを参照して事務作業ができます。

#RBACの設定方法

それでは、RBACの設定方法を順を追って見ていきましょう。

##１：経理部開発担当のロールを作る

###1) Control Roomの「設定」→「ロール」タブから「新しいロールを作成」をクリックします。

![06_CreateRoleAgain.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/052f38ac-6983-a23b-2ed4-ca6f8bc7bf7f.jpeg)

###2) ロール名をつけ、必要な役割をチェックしていきます。
ロールの名前は任意ですが、**日本語は使えません。** (作成はできてしまうが、付与した後でログインエラーになる)
ここでは「iq_keiri_admin」としておきます。
![01_iq_keiri.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/04cc5b49-ced7-fb47-acef-09473ad63377.jpeg)

###3) 役割のチェックではここに注意！！
役割は必要に応じてチェックしていけばよいのですが、「IQ Bot」配下の「すべてのラーニングインスタンスを表示」にだけはチェックを**入れない**ようにします。
![03_チェックを外す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/50d76b29-4906-dfb2-39a3-8f1f22009cfa.jpeg)

###4) 役割のチェックが終わったら、画面右上の「ロールを作成」をクリックします。
![04_createRole.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/e8e3503c-36ad-47b3-218c-f3e5865073a4.jpeg)

###5) 経理部の開発者用のロールができました！
![05_RoleCreated.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/e15a4118-e292-b0c2-5eb7-e93e179a8d25.jpeg)

##２：経理部事務担当のロールを作る

###1) ふたたび「新しいロールを作成」をクリックします。
![06_CreateRoleAgain.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/052f38ac-6983-a23b-2ed4-ca6f8bc7bf7f.jpeg)

###2) ロール名をつけます。
ここでは「iq_keiri_val」という名前にします。
![07_iq_keiri_val.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/4d508037-fb72-61b9-11ad-1f0f4115fc50.jpeg)

###3) 役割をチェックします。
こちらは開発をしないロールなので、「IQ Bot」配下の**「同一ロールからラーニングインスタンスを表示」および「検証ツールを起動」だけ**にチェックをします。
![08_keirival_role.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/7c9eac83-7f10-19ee-ae80-3fad48dceeb6.jpeg)

###4) 完了後、画面右上の「ロールを作成」をクリックします

##３：人事部の開発者および事務担当のロールを作る

上記と同じ要領で、人事部の開発者および事務担当のロールも作ります。

上記の流れで、ロール名につけたkeiriをjinjiに変えて同じことをするイメージです。

最終的に、このような４つのロールができていればOKです。
![09_4Roles.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/7bb4d854-a526-eb56-eaa7-efd8d081ae00.jpeg)

##３：鈴木さんに経理部開発者の役割を割り当てる

###1) ユーザー作成画面の起動

Control Roomの「設定」→「ユーザー」タブから「新しいユーザーを作成」をクリックします。

###2) 必要情報を入力し、ロールを割り当てます。

ユーザー名、パスワード、メールアドレスなどの必要情報を入力します。
「ロールの選択」欄では、**iq_keiri_admin(経理部の開発者用のロール)とiq_keiri_val（経理部の事務担当者用のロール）のふたつだけ**をアサインします[^1]。
**AAE_Basicなどの既存ロールを選択してはいけません**[^2]。
![10_suzuki_keiriAdmin.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/8674b78c-00cc-a9ba-7ff9-cc6b568ea671.jpeg)

###3) ロール選択完了

このようになっていればOKです。
（カスタムで作成した２つのロールだけが選択され、AAE_Basicなどの余計なロールが選択されていない）
![11_suzuki.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/0040ca77-7317-f8c1-80ba-9698d07f8094.jpeg)

###4) デバイスライセンスの割り当て

鈴木さんは開発担当者なので、BotCreatorのライセンスを割り当てます。
![12_suzuki_device.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/0cdef9a0-f780-f5ae-6159-4190e572b519.jpeg)

###5) ユーザー作成

以上の設定を実施後、画面右上にある「ユーザーを作成」ボタンをクリックします。
![13_createUser.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/1f4b2052-7127-b1c9-1f65-28b5c72128e1.jpeg)

##４：田中さんに経理部事務担当の役割を割り当てる

上記の要領で、田中さんにも役割を割り当てていきます。

###1) ロールの割り当て

田中さんは事務担当なので、iq_keiri_val（経理部の事務担当者用のロール）**だけ**を選択します。
![14_tanakaRole.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/02441145-3e73-8ca4-af04-ef952a2dd465.jpeg)

###2) デバイスライセンスの割り当て

田中さんは事務担当で開発をしないので、デバイスライセンスは「なし」のままでOKです。
![15_tanakaDevice.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/63ff0df3-f66e-adb4-af0f-7f4bb2fcd310.jpeg)

この状態で画面右上の「ユーザーを作成」ボタンをクリックします。

→　これで鈴木さんと田中さんのユーザーができました。
→　鈴木さんはクライアントにログインできますが（Bot Creatorの権限を持っているから）、田中さんはクライアントにログインできません（Bot Creatorの権限を持っていないから）。

＜参考：田中さんでクライアントにログインしようとするとこうなる＞
![13_田中はくらいあんとにログインできない.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/22637308-03c4-dbff-5fd3-3fe12c94b015.jpeg)

##５：人事部の佐藤さん・山田さんにも役割を割り当てる

上記と同様の要領で、人事部の佐藤さん・山田さんにも役割を割り当てていきます。

佐藤さんは開発者なのでiq_jinji_admin(人事部の開発者用のロール)とiq_jinji_val（人事部の事務担当者用のロール）を選択して、デバイスライセンスではBot Creatorを割り当てます。
![16_sato.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/c321d051-1b20-64ce-d0c3-1c8375aeaedd.jpeg)

山田さんは事務担当なのでiq_jinji_val（人事部の事務担当者用のロール）だけを選択して、デバイスライセンスは「なし」とします。
![17_sato.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/568db425-ce1f-3457-5ee1-0e6631d90fe2.jpeg)

##６：ユーザー作成完了

すべてのユーザーを作成し終えると、このようになります。
![18_alluserCreated.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/0c1d019c-5684-545c-e011-4224d4db606c.jpeg)

#RBACを設定した状態でIQ Botのインスタンスを作ってみると……

##１：開発者の場合

以下は、佐藤さん（人事部の開発担当）が人事部用のインスタンスを作ったところです。
![20_佐藤が人事の帳票を作ったところ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d4714dd4-a122-2cf2-47e1-54ec14f38f69.jpeg)

この状態で、鈴木さん（経理部の開発担当）がIQ Botを開いても、インスタンスは何も表示されません。
（人事部のインスタンスは、鈴木さんからは参照できないため）
![21_鈴木が開いても帳票は参照できない.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d9b27269-bf10-1be1-c056-7b94d27e539c.jpeg)

鈴木さんは鈴木さんで、経理部用の帳票を作り……
![22_鈴木が経理部用の帳票を作った！.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/b57f5f69-c8c4-df86-f230-304ec6111aed.jpeg)

さらにクライアントにログインします。
![23_x_鈴木でクライアントにログイン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/cfa9b106-da2e-2e27-f6e8-471d586f3679.jpeg)

IQ Botコマンドを起動すると、鈴木さんが参照権限を持っている経理部のインスタンスだけが一覧に表示されます。
![23_鈴木のクライアント‗経理部用の帳票しか表示されない.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/727500bf-567e-f3e6-2cc2-68f30ccfc71f.jpeg)

今度は佐藤さんがクライアントにログインすると……
![24_佐藤でクライアントにログイン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/fa210b9c-baf2-a3c4-8f23-d19309260722.jpeg)

佐藤さんには、佐藤さんが参照権限を持っている人事部のインスタンスだけが表示されます。
![25_佐藤には人事部の帳票しか参照できない.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/1daa40e0-0d2c-4335-83b5-1dfaba4e5012.jpeg)

##２：事務担当者の場合

上記のTaskBotを使ってそれぞれ帳票を処理し、検証に回ったところを見てみましょう。

まず、経理部の田中さんが検証画面を起動すると、検証者用の画面に経理部用のインスタンスだけが表示されています。
![26_経理部田中の検証画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/ce202d6c-e925-c880-59b1-15d3f9f1bcd7.jpeg)

田中さんは、上記の矢印で示されたアイコンから検証画面を起動し、帳票の読み取り結果を確認・修正していきます。
![27_田中@検証中.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/01383805-7db2-59bc-6883-5631e4e8dd38.jpeg)

次に人事部の山田さんが検証画面を起動すると、検証者用の画面に人事部用のインスタンスだけが表示されています。
![28_山田で入る.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/d0fe5f1d-0e01-fe6d-583f-8eb3d602d4d1.jpeg)

山田さんは、上記の矢印で示されたアイコンから検証画面を起動し、帳票の読み取り結果を確認・修正していきます。
![29_山田@検証中.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/4412e69b-d83a-f2ff-b780-291434fcfe56.jpeg)


#まとめ

IQ BotのRBAC設定のやりかたは以上です。

具体例を交えながら説明したので少し長くなりましたが、ポイントは以下です。

- ロールの選択のところで「すべてのラーニングインスタンスを表示」のチェックを外し、「同一ロールからラーニングインスタンスを表示」をチェックしたロールを必要な部門の数&役割の数だけ作ること
- 開発者と事務担当で役割を切り分ける場合は、開発者のユーザーには事務担当者用のロールも付与しておくこと

適切に役割を設定して、組織のポリシーに即した参照権限の切り分けをしていきましょう！


[^1]: このとき、開発者用のロールだけを選択して事務担当者用のロールを選択しないと、開発者が作成したインスタンスを事務担当者が参照できなくなってしまいます。

[^2]: AAE_Basicなどの既存ロールを選択してしまうと、AAE_Basic権限を持っている人同士がお互いのインスタンスを参照できるようになってしまうためです。