Cloud DLPメモ


Cloud DLPは、2つの機能があります。
機密データの「検査(Inspection)」と検出した機密データの「変換」が可能です。変換は「削除/置換」と「匿名化」の2種類に分類できます。

検査については、機密データを検出するためにInfo Typeと呼ばれる検出ルールが組み込みで準備されています。
また、組み込みのInfo Typeに加えてカスタムのInfo Typeを作成することが可能です。

#使い方
検査の方法は、データを指定してAPIをCallするか、データが保持しているストレージに対してのDLPのスキャンを実施し機密データの検出が可能です。
削除や匿名化は、APIをCallすることで実施可能です。

#Info Type
2020/6現在、139個準備されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/42686d3e-facc-af27-795a-1c328f1aedee.png)

組み込みのInfo Typeの例としては、電話番号、Emailアドレスなど基本的な情報に加えて日本のパスポート番号やマイナンバーカード番号など各国に特化したルールも準備されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/8a57d188-155c-d21b-9bf1-fda35d192757.png)

また、任意の単語を検出から除外することも可能です。

>除外ルールを使用すると、組み込みまたはカスタム infoType 検出器にルールを追加することで、返される結果の数を減らせます。

https://cloud.google.com/dlp/docs/deidentify-sensitive-data?hl=ja

マニュアルにある以下の除外ルールの例は、「example@example.com」との一致を避けることが出来ます。

```
...
    "inspectConfig":{
      "ruleSet":[
        {
          "infoTypes":[
            {
              "name":"EMAIL_ADDRESS"
            }
          ],
          "rules":[
            {
              "exclusionRule":{
                "dictionary":{
                  "wordList":{
                    "words":[
                      "example@example.com"
                    ]
                  }
                },
                "matchingType": "MATCHING_TYPE_FULL_MATCH"
              }
            }
          ]
        }
      ]
    }
...
```

https://cloud.google.com/dlp/docs/creating-custom-infotypes-rules?hl=ja#exclusion_rule_example_scenarios

#カスタムInfo Type
組み込みInfo Typeで要件が満たせない場合は、カスタムInfo Typeを作成することができます。カスタムInfo Typeは以下の4種類です。

Regular expression
List of words or phrases
Small custom dictionary
Large custom dictionary

Regular expressionは正規表現で検出するパターンを定義できます。
それ以外はカスタムの辞書登録で、それぞれ指定できる辞書のサイズや格納先のストレージが異なります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/985cd8b0-5736-3099-7b4f-55f2c55868d9.png)

#ストレージに対してスキャンを実施し機密データの検出
ストレージに対してのスキャンは、GCS/Datastore/BigQueryに対して行うことができます。
データの総量が巨大な場合にすべてのデータを検出対象にすることは現実的ではないこともありますので、一部データをサンプリングしてスキャンすることができます。サンプリングは総データ量のうち何割をスキャン対象にするかを指定します。

検出の正確性についても設定可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/dff4463b-2ef9-976a-a1d0-c1558e06c75b.png)

#検出した機密データの変換
検出した機密データを変換することが可能です。変換は「削除/置換」と「匿名化」の2種類に分類できます。
変換方法については以下のマニュアルに記載があります。
https://cloud.google.com/dlp/docs/transformations-reference

###変換方法一覧
削除
置換
Info Typeでの置換
マスキング
暗号ベースのトークン化(仮名化)変換 - 暗号ハッシュ
暗号ベースのトークン化(仮名化)変換 - フォーマット保持暗号化
固定サイズのバケット化
カスタマイズ可能なバケット化
日付シフト
時間データの抽出

それぞれの方法について整理すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/60980fc9-051b-b313-d8bd-4c20783a0144.png)

ここからいくつかの変換方法について見ていきたいと思います。
まずは、「削除(RedactConfig)」です。以下の例では、Emailアドレスである「aabernathy@example.com」を削除しています。こちらのJSONをBodyとして「https://dlp.googleapis.com/v2/projects/[PROJECT ID]/content:deidentify」にPOSTすることより、「"value": "My name is Alicia Abernathy, and my email address is ."」という形でレスポンスを受け取れます。

```
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
  },
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"EMAIL_ADDRESS"
            }
          ],
          "primitiveTransformation":{
            "redactConfig":{

            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"EMAIL_ADDRESS"
      }
    ]
  }
}
```

以下の例は、「置換(ReplaceValueConfig)」の例です。「aabernathy@example.com」を「[email-address]」に置換します。
https://cloud.google.com/dlp/docs/redacting-sensitive-data

```
{
  "item":{
    "value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
  },
  "deidentifyConfig":{
    "infoTypeTransformations":{
      "transformations":[
        {
          "infoTypes":[
            {
              "name":"EMAIL_ADDRESS"
            }
          ],
          "primitiveTransformation":{
            "replaceConfig":{
              "newValue":{
                "stringValue":"[email-address]"
              }
            }
          }
        }
      ]
    }
  },
  "inspectConfig":{
    "infoTypes":[
      {
        "name":"EMAIL_ADDRESS"
      }
    ]
  }
}
```

また、上記のテキストに加えてイメージの置換も可能です。
https://cloud.google.com/dlp/docs/redacting-sensitive-data-images
上記、マニュアルに記載がありますが以下のようなイメージで置換できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/51a1ef48-29b8-24f3-6995-e419f8c01152.png)