Watson Knowledge Catalogで機密データ(メールアドレス)を匿名化してみる

[Watson Knowledge Catalog](https://www.ibm.com/watson/jp-ja/developercloud/watson-knowledge-catalog.html) で機密データが匿名化できるみたいなので、試してみました。

Watson Knowledge Catalogが初めての方は、下記のブログがわかりやすかったので、こちらを読んでみてください。
　★IBM Cloud Blog：Watson StudioとKnowledge Catalogを使ってデータレイクを作成してみよう
　　[第1回　概要](https://www.ibm.com/blogs/solutions/jp-ja/create_datalake1/)
　　[第2回　データを登録してみよう](https://www.ibm.com/blogs/solutions/jp-ja/create_datalake2/)
　　[第3回　Knowledge Catalogの便利機能](https://www.ibm.com/blogs/solutions/jp-ja/create_datalake3/)

## 0. 匿名化の種類の検討
Watson Knowledge Catalogで設定できる匿名化の種類は、下記の3種類になります。
下段のAfterの出力イメージを参考に、どのタイプの匿名化を設定するのかを検討します。
![catalog13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/6b853dd9-f21b-3489-cda7-b6cd4de12790.png)


## 1. データの準備
ここでは、メールアドレス部分を匿名化できるか検証しようと思うので、メールアドレスを含むCSVファイルを用意します。(必ずエンコードはUTF-8にしてください。)

| email            | customerid | rank   | country |
|:-:|:-:|:-:|:-:|
| aaa@gmail.com    | A001       | Gold   | Canada  |
| bbb@hotmail.com  | A002       | Silver | Japan   |
| ccc@yahoo.co.jp  | A003       | Gold   | Japan   |


## 2. Policy Manager の設定
Policy Manager では、下記3つを作成します。
・ Category
・ Policy
・ Rule

### 2.1. Category の作成
まずは、大きな枠となるカテゴリーを作成します。ここは、基本的に名前をつけるだけです。

1.左側のナビゲーションメニューの「Catalog」を展開し、「Policy Manager」をクリックします。
![catalog1.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/bc1f7dd5-4b17-f370-714d-360f91b41930.png)

2.右上の「Add」から「Category」を選択します。
![catalog3.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/e1486623-9708-0336-e2e6-92fd537970f9.png)

3.Name欄にカテゴリー名(ここでは、Data Protection)を入力し、「Create」をクリックします。

|![catalog4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/069af244-1af6-57ba-a71f-0db6d0f733e3.png)|
|:-:|

以上で、カテゴリーが作成されました。

|![catalog5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/d560811a-2d54-deb6-d2a5-dce36d750221.png)|
|:-:|

### 2.2. Rule の作成
次に、具体的なルールを作成します。
ルールでは条件とアクションを定義します。

1.右上の「Add」から「Rule」を選択します。
![catalog20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/44b936cd-c29f-2369-4aae-7b8a7adbd3c1.png)

2.左側でルールについての詳細情報を定義します。
 2-1. Name欄にルール名(ここでは、Mask email)を入力します。
 2-2. Type欄は、現時点ではAccessしか選択肢がありませんので、そのままとします。
 2-3. Business definition欄に、簡単な説明を入力します。

|![catalog8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/3a466803-2ae3-d72d-6144-59a6e2a39d41.png)|
|:-:|

3.右側で条件とアクションを定義します。
 3-1. 今回は条件として、「Data class に Contact Data が含まれている場合」と設定したいので、「If Data class contains any Contact Data」と設定します。
 ※複数の条件を設定する場合は、「＋」マークをクリックして条件を追加します。

|![catalog9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/509c3594-2b87-0b74-fd95-c5686a78f89a.png)
|:-:|

 3-2. アクションとしては、「Contact Detailsが含まれているカラムを匿名化する」と設定したいので、「anonymize data in columns containing Contact Details」と設定します。

|![catalog11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/86d37769-04f7-3d52-d304-d86c64eb9ddf.png)|
|:-:|

3-3. どのように匿名化するのかの設定は、3つの中から「Mask」を選択して、「Create」をクリックします。

|![catalog12.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/a4a1a2e5-dea6-e98e-51f2-dc2aacc73e03.png)|
|:-:|

### 2.3. Policy の作成
作成したルールを含むポリシーを作成します。

1.右上の「Add」から「Policy」を選択します。
![catalog6.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/b951bf07-225f-b457-c28a-0087dec82d4d.png)

2.左側でポリシーについての詳細情報を定義します。
 2-1. Name欄にポリシー名(ここでは、Data Anonymization)を入力します。
 2-2. Type欄は、現時点ではAccessしか選択肢がありませんので、そのままとします。
 2-3. Description欄は任意ですので、今回は省略します。

|![catalog14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/494556f8-6d23-9983-4feb-84bff31e02d8.png)|
|:-:|

3.右側でルールを定義します。
 3-1. 右上の「Add」展開して「Existing rules」をクリックします。

|![catalog15.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/5209eb28-38e5-78ed-d409-8020772ac265.png)|
|:-:|

3-2. 手順2.2で作成した「Mask email」を選択して、「Add」をクリックします。

|![catalog16.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/45c503c8-df96-37b7-36c3-8219096f22c1.png)|
|:-:|

4.右下の「Publish」をクリックします。

|![catalog17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/683e7d3e-e8eb-f3b0-a0b8-fa133b306e0c.png)|
|:-:|

5.Attentionボックスが表示されるので、内容を確認して「Publish」をクリックします。
![catalog18.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/ca821d91-0ddb-fb4d-5bf2-9743725d15ba.png)

以上で、匿名化に必要なカテゴリー、ポリシー、ルールの定義ができました。

|![catalog19.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/f9d2ae1a-c379-7204-5726-68b2fe6121f7.png)|
|:-:|

## 3. Catalogの作成
ここでも、まずは大枠となるカタログを定義します。こちらも基本的には名前をつけるだけです。
既にカタログが作成済みの場合は、この手順を飛ばして、4.Assetの登録に進んでください。

1.左側のナビゲーションメニューの「Catalog」を展開し、「View All Catalogs」をクリックします。
![catalog21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/6f9055df-6f23-887d-af60-2a7351aba875.png)

2.右上の「New Catalog」を選択します。
![catalog22.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/b93586b4-9dc5-6b42-a3fd-97f924550ae7.png)

3.Name欄にカタログ名(ここでは、Catalog01)を入力して、「Enforce data policies」にチェックを入れます。
**※「Enforce data policies」の設定はカタログ作成時にしかできません。カタログ作成後の変更はできませんので、ご注意ください。**

|![catalog23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/a09fae30-1913-6732-f070-ad66fd1e375a.png)|
|:-:|

4.確認画面が表示されるので、「OK」をクリックします。

![catalog24.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/6ff0276f-08b4-e2e1-3581-94e01e71f952.png)

5.もとの画面に戻って、右下の「Create」をクリックします。

以上で、カタログが作成されました。

|![catalog25.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/3cc3d7c5-84a2-c726-2234-3c656c224ee1.png)|
|:-:|

続いて、カタログの利用者をCollaboratorとして追加しておきます。
6.カタログの「Access Control」タブを開き、「Add Collaborator」をクリックします。

|![catalog32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/1e91b3e5-d7da-2565-d83f-47b4a0b7ceeb.png)|
|:-:|

7.Collaborators欄に追加したいメールアドレスを入力して、Roleを設定(今回はEditor)して、「Add」をクリックします。
![catalog33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/eabae9d5-963a-245a-a2d8-e51d6e5b934e.png)

Collaboratorが追加されました。

|![catalog34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/097adcf4-2c97-b812-60b0-abc83e7165ad.png)|
|:-:|


## 4. Assetの登録
手順1で用意したCSVファイルをPCローカルからCatalogに登録します。

1.右上の「Add to Catalog」から「Local files」をクリックします。
![catalog26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/ec264f46-2dc4-6489-ac29-60852dde8292.png)

2.Select File欄にCSVファイル(ここでは、maillist.csv)をドラッグ&ドロップします。

|![catalog27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/afc6cd47-0547-047a-fe35-252aa8588337.png)|
|:-:|

3.そのほかの設定は任意なので、今回は特に設定せずに、右下の「OK」をクリックします。

|![catalog28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/3682b6bc-1c0f-cb44-794e-cc6e299f4494.png)|
|:-:|

※アップロード中は右側に進行状況が表示されます。

|![catalog29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/5feaa4d6-e4f8-6d06-5726-f5d5b7c0edbf.png)|
|:-:|

以上で、メールアドレスを含むCSVファイル(ここでは、maillist.csv)のAssetとしての登録が完了しました。

|![catalog30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/60bc40d7-b456-6995-9403-3307c9091eb2.png)|
|:-:|

## 5. 匿名化の確認
まず、登録した所有者本人のOverview画面を見ると、メールアドレスの値は匿名化されていません。

|![catalog31.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/83060a53-9d35-6aa4-72d5-2484168c0f7b.png)|
|:-:|

次に、他のユーザーでログインして登録したAssetのOverview画面を見ると、期待したとおりにメールアドレスの値が匿名化されていることがわかります。
今回は、「Mask」を設定したのでランダムな文字列に置き換わっています。

|![catalog35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305774/458b1c07-b9d8-1ab4-a1d0-7a5471d9637d.png)|
|:-:|

そして、countryの値も匿名化されているので、Contact Detailsに含まれいたということがわかりました。

マニュアルを見てみたら、メールアドレス以外にも住所や郵便番号、電話番号なども対象みたいですが、US Phone Number、US Street Nameのようになっていたので、日本はまだ対象外のようです。
でも、目的のメールアドレスは匿名化されましたので、OKですね。
[Classifier groups for data policies](https://dataplatform.cloud.ibm.com/docs/content/wsj/governance/dmg28.html?audience=wdp&linkInPage=true)

## 感想
全体的に右下のボタンをクリックしようとすると、「Cookie Preferences」の箱が邪魔でボタンがクリックしにくい&見えにくいのがちょっと残念でした。改善されるとよいのですが。。