Cloud DLP を使って BigQuery の個人情報を検出してみた。

2021.06.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、みかみです。

やりたいこと

  • Cloud Data Loss Prevention(DLP)とはどんなものか、実際に触って確認してみたい
  • BigQuery に格納済みの個人情報を Cloud DLP で検出してみたい

DLP(Data Loss Prevention)とは?

DLP(Data Loss Prevention)とは、セキュリティを強化するためのシステムの一つであり、機密情報や重要データの紛失、外部への漏えいを防ぐシステムのことを指します。

近年特に重要視される個人情報などの機密情報を保護するための仕組みです。

Google Cloud の DLP(Data Loss Prevention)サービスである Cloud DLP では、 GCS や BigQuery、Datastore などに格納済みのデータに個人情報が含まれていないか監査したり、個人情報をマスキングすることができるそうです。 ( AWS でいうところの Macie に相当?

Cloud DLP の料金

Cloud DLP による検査は、基本的に月 1GB までは無料で利用できますが、検査対象のデータの格納場所やマスキングの実行有無により別途料金が発生します。 詳しくは公式ドキュメントをご参照ください。

Cloud DLP で BigQuery のテーブルデータから個人情報を検出

BigQuery に格納済みの以下のテーブルデータの個人情報を検出してみます。

なお、テーブルに格納済みのデータは下記テストデータ作成サイトで作成したサンプルデータで、実在の人物とは一切関係ありません。

ナビゲーションメニュー「セキュリティ」から「データ損失防止(DLP)」をクリックして、DLP 管理コンソールを表示します。

なお、初めて DLP を利用する場合は、Cloud Data Loss Prevention (DLP) API を有効にする必要があります。

画面上部の「作成」プルダウンから「ジョブまたはジョブトリガー」項目の「検査」をクリック。

「①入力データを選択」の項目で、「名前」に任意のジョブ名を入力し「リソース ロケーション」で検査対象の BigQuery テーブルがあるロケーションを選択します。 「場所」項目の「ストレージの種類」で「BigQuery」を選択し、「プロジェクト ID」「データセット ID」「テーブル ID」にそれぞれ検査対象のテーブル情報を入力します。 「サンプリング」欄では、テーブルデータ量に応じて検査対象データのサンプリング設定ができるそうですが、今回は対象データが少ないので「サンプリングなし」に設定しました。

「②検出の設定」では検査するデータタイプを指定でき、事前に準備したテンプレートを指定したり、「検査ルールセット」で検査対象をカスタマイズすることも可能とのことですが、今回はデフォルトのままで検証してみます。

「③アクションの追加」で、検査完了時に何をするか、以下のアクションの中から指定できます。

  • BigQuery に保存
  • PubSub に公開
  • Security Command Center に公開
  • Data Catalog に公開
  • メールアドレスで通知
  • Cloud Monitoring に公開

今回は「BigQuery に保存」と「メールアドレスで通知」のアクションを指定しました。

「④スケジュール」で検査を定期的に実行する場合のスケジュールを設定できますが、今回は試しに一度実行したいだけなのでスケジュール設定はせず、

最後に「⑤確認」で設定内容を確認して「作成」しました。

ジョブ作成後に自動遷移する「ジョブの詳細」画面でしばらく待つと、検査が完了したようです。

アクションとしてメール通知も指定したので、以下のメールが受信できました。

ジョブ詳細画面「結果を BIGQUERY で表示」ボタンから検査結果を確認してみます。

アクション設定で指定した BigQuery テーブルが新規作成されました。

テーブルデータを確認してみると

「メールアドレス(EMAIL_ADDRESS)」が個人情報として検出されました。 なぜか、テーブルには格納されていないはずの「スマートフォンの IMEI 番号(IMEI_HARDWARE_ID)」も1件だけ検出されてしまいましたが。。 (検出対象のデータタイプは絞った方が良いのかもしれません。

氏名も個人情報として検出したい!

先ほどのデフォルト設定では、メールアドレスは検出されていたものの、氏名のデータが検出されていませんでした。 なぜ?(やはり日本語には非対応?

と思って見直してみると、デフォルトでは氏名検出用のデータ型である PERSON_NAME が指定されていませんでした。

先ほどのジョブをコピーして、検出するデータ型を EMAIL_ADDRESSPERSON_NAME に変更して再実行してみると

日本語の氏名も検出できました!

やはり日本語のせいか(?)、漢字 or カタカナどちらかだけの検出結果も見受けられましたが、 漢字もカタカナも検出可能だったので、サンプリングデータ量を調節すれば BigQuery のテーブルのどのカラムに個人情報が入っている可能性があるか、特定するのに役立ちそうです。

まとめ(所感)

様々なデータが活用されるようになりビジネスメリットが増える一方、特に個人情報の管理には細心の注意が必要です。

Cloud DLP の検査ジョブは画面 UI から簡単に設定することができ、ジョブのスケジュール実行を設定しておけば、BigQuery に個人情報が格納されていないか定期的に確認することができて、メールなどによるリアルタイムの通知も可能なので、個人情報流出のリスク軽減のために非常に便利なサービスだと思いました。

参考