CP4D版 Watson DiscoveryのBoxクロール方法

# 環境
IBM Cloud Pak for Data 4.5.0
Watson Discovery（以下WD）4.5.0
Box

# 注意点
- WDからBoxに接続するには、事前にBoxでカスタム・アプリケーションを作成する必要があります。
- Boxアカウントは2要素認証を有効にしておく必要があります。


# マニュアル
IBM Cloud Pak for Data データ・ソースの構成 > Box
https://cloud.ibm.com/docs/discovery-data?topic=discovery-data-connector-box-cp4d

# RSA鍵ペア作成
RSA鍵ペアを設定します。 自分で作成することも、Box.comに自動で鍵ペアを生成させることもできます。この記事では自分で作成する場合の手順を紹介します。

マニュアルに、鍵ペアを自分で作成する場合のコマンド例がありますが、このコマンドをそのまま実行すると、パスフレーズなしの秘密鍵が生成されます。CP4D版WDでBoxクロールを使用するには問題ありませんが、同じBoxカスタムアプリを使用してIBM Cloud版のWDでBoxクロールを行う予定がある場合は、パスフレーズありの秘密鍵を生成する必要があります。
なお、Boxで自動生成するとパスフレーズありの秘密鍵が生成されます。

マニュアルで紹介されている1つ目のコマンドで、`パスフレーズなし`2048bitの秘密鍵を生成しています（private-box.pemに保存）。
```
openssl genrsa 2048 > private-box.pem
```
パスフレーズありの秘密鍵を生成したい場合は、例えば次のようにします。

```
openssl genrsa -out private-box.pem -aes256 2048
```


2つ目のコマンドで、RSA秘密鍵から、RSA公開鍵を生成しています。
```
openssl rsa -in private-box.pem -pubout -out public-box.pem
```


# Boxの作業
### 1. BoxにログインしてDeveloper Consoleにアクセス
Developer Console
https://app.box.com/developers/console


### 2. 「アプリの新規作成」をクリック
![boxapp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/66ad8b36-67ba-65c1-7066-c2a89b3d16be.png)


### 3. 「カスタムアプリ」を選択
![boxapp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/e08a18a1-8a37-c578-c133-db781059cb22.png)

### 4. 「サーバー認証(JWT使用)」を選択してアプリ名を入力し、「アプリの作成」をクリック
![boxapp3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/76fbfb15-233e-b635-e0df-b5847a19b6b4.png)

### 5. 「構成」タブの「アプリアクセスレベル」で「アプリ＋Enterpriseアクセス」を選択
CP4D版ではこのアクセスレベルのみサポートされています。

![boxapp4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/46bd359b-8c16-39a7-a000-caf42194eb13.png)


### 6. 「構成」タブの「アプリケーションスコープ」で次のオプションを選択
- Boxに格納されているすべてのファイルとフォルダの読み取り
- Boxに格納されているすべてのファイルとフォルダへの書き込み
- ユーザーを管理する
- Enterpriseのプロパティーを管理する

![boxapp5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/cfdffe79-3daf-d9d3-4069-2d1b12ae8422.png)


### 7. 「構成」タブの「高度な機能」で次のオプションを選択

- as-user ヘッダーを使用してAPI呼び出しを行う
- ユーザーアクセストークンを生成する

![boxapp6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/ba5ff183-bb10-be85-a481-b139f7266618.png)

### 8. 「構成」タブの「公開キーを追加」で、public-box.pem の内容を入力
「公開キーを追加」をクリック
![boxapp7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/b6fa0dc3-941b-bbea-37d2-61d701c35f60.png)

公開キーの入力画面が出るので、`RSA鍵ペア作成`で生成したpublic-box.pemの内容を入力し、「確認して保存」をクリック
![boxapp8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/16542a7a-7449-d49b-2b4f-a4b5c0764d4f.png)

公開キーが追加されたことを確認し、「変更を保存」をクリック
![boxapp9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/76ad8c46-c2da-d66c-f046-a3fa36e34b21.png)


途中、2段階認証が求められたら、認証コードを入力
＊元の画面に戻ると、設定内容がクリアされていることがあるので要注意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248948/ac80d0d2-f602-4bae-d8e1-5247bb89a979.png)


### 9. 「承認」タブの「確認して送信」をクリック
![boxapp10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/7954ced6-0acf-d405-070f-1fb5dde2da9e.png)

「アプリの説明」を入力して「送信」をクリック
![boxapp11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/d0b30478-4ad0-8901-f09a-6fe5778cf536.png)


「承認ステータス」が表示される

![boxapp12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/765124ec-8842-3a42-fdef-88ebc7e81c3d.png)



### 10. アプリを承認する
管理者コンソールの「アプリ」から「カスタムアプリマネージャー」タブに移動し、該当アプリについて「アプリを承認」をクリック
![boxapp13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/5c9123f6-4d32-66df-f952-f65c7f6251a8.png)

情報を確認し、「承認」をクリック
![boxapp14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/7ef7b2bc-a2c8-6d2e-faab-b509620cc322.png)


### 11. アプリが「有効」になったことを確認する
Developer Consoleに戻り、「承認」タブで`承認済み`、`有効`となっていることを確認する
![boxapp15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/8bffe37d-dc9a-0772-c9d4-2db602bfea1f.png)


### 12. JSONファイルをダウンロード・編集する

「構成」タブから「JSONとしてダウンロード」をクリック
![boxapp16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/9091b979-f2e7-9c88-cdad-50b3ccf2ec87.png)


ダウンロードしたJSONファイルでは、appAuthセクションが空欄になっているので、次のとおり必要な情報を追加します。CP4D版WDではこのJSONファイルをアップロードすることで、構成情報を設定することになるため、必要な情報を網羅したJSONファイルが必要です。

- **publicKeyID**: `ステップ8`で追加した公開キーのIDを入力
- **privateKey**:　`RSA鍵ペア作成`で生成したprivate-box.pemの内容を入力。ただし、すべての改行を`\n`に置き換えて1行にする必要がある。
- **passphrase**: `RSA鍵ペア作成`で設定したパスフレーズを入力　

![configjson1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/369a8312-4291-6368-52c5-cd1eb47ac1a7.png)


# WDの作業
### 1. 管理画面からコレクションを作成

Boxを選択して「Next」をクリック
![boxcoll1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/34057477-0ae0-1576-dd09-cedc82477529.png)


### 2. 言語、クロール・スケジュールの設定
![boxcoll2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/d016cb97-7cc0-f3ae-c041-d577228a1910.png)


### 3. データ・ソースとするBox、クロール対象を指定

**Box JSON configuration**をクリックし、`Boxの作業`ステップ12で作成したBoxアプリのJSONファイルをアップロード

**Specify what you want to crawl**でクロール対象を次の形式で指定

- 全社レベルでクロールするには、box://app.box.com/ を入力 
- 特定のフォルダーをクロールするには、box://app.box.com/user/USER_ID/folder/FOLDER_ID/FolderName を入力
- 特定のユーザーをクロールするには、box://app.box.com/user/USER_ID/ 

![boxcoll3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/be779b4e-7181-593a-2b36-8c1e6fc250da.png)

＊各設定項目の詳細はマニュアルを参照ください。

「Finish」をクリックするとクロールとインデクシング処理が開始する