Google Cloud のセキュリティ サービスに 機械学習APIのData Loss Prevention API(DLP API)が追加されたので試してみた

2018年4月にセキュリティ サービス、Cloud Data Loss Prevention API(DLP API)がGCPのサービスとして正式リリースされました。

セキュリティサービスに分類されますが、いわゆるインフラセキュリティの類のサービスではなく、データの中に個人情報に関連する内容が含まれていないかを分類/検出を行う広義でのセキュリティサービスとなります。
セキュリティ対策として侵入検知やアクセス制限は一般的に実施されておりますが、
担当者がデータの内容を意識しないまま情報を流出させてしまうケースも多くあります。
今後は、どのデータを個人情報として扱うのかを検出/分類を機械学習に任せて自動化するこれらのサービスが情報漏洩対策として必要になってきます。

実際に少し触ってみて、企業での使いどころについて考えてみました。
今回はGoogleのチュートリアルにあるサンプルコードを使いながら「Cloud Storage」,
「Cloud Functions」,「Cloud Pub/Sub」を利用してCloud DLP API を試してみます。

1. 構成概要

今回はCloudStrageにアップロードされたファイル内に任意の個人情報に該当するデータが含まれているかどうかをDLP APIで検出を行います。
さらに、

  • 該当データが含まれていれば「個人情報バケット」にファイルを移動する。
  • 該当データが含まれていなければ「一般情報バケット」にファイルを移動する。

該当データの検出、ファイル移動を自動で行うことで、ユーザはファイル内容を意識せずに保存先のバケットを自動振分けするモデルを構築します。

以下の環境を構成していきます。

実施内容

  1. PCから検疫用バケットにファイルをアップロードする
  2. 「Cloud Function」が呼び出されて「DLP API」によるデータ検出を行う。
  3. ファイル内の個人情報の有無により該当ファイルを”個人情報バケット”または ”一般情報バケット”へファイルを移動する。

2. APIの有効化

デフォルトでは無効になっていますので、使用するAPIをそれぞれ有効化します。

  • Cloud Functions
  • Cloud Pub/Sub
  • Cloud Data Loss Prevention (DLP)

3. サービスアカウントの権限追加

コンソールの「IAMと管理」から下記のデフォルトのサービスアカウントに対して
今回使用するDLP関連の権限を追加します。

コード
 ”my-project-xxxxxx@appspot.gserviceaccount.com”

役割の追加

  • Cloud DLP > DLP管理者
  • サービス管理 > DLP API サービスエージェント

4. Cloud Storageバケットの作成

構成概要のとおり、3つのバケットを作成します。

  • バケット1:検疫用バケット バケット名/ [quarantine-2018demo ]
  • バケット2:個人情報バケット バケット名/ [sensitive-2018demo ]
  • バケット3:一般情報バケット バケット名/ [nonsensitive-2018demo ]

5. Cloud Pub/Subのトピックとサブスクリプションの作成

DLP APIジョブの完了通知を受け取って、処理制御を行うためPub/Subのトピックとサブスクリプションを作成します。
Pub/Subコンソール画面から作成します。

  • トピックの作成
    トピック名/ [demo2018topic]
  • 作成したトピックの「新しい登録」からサブスクリプションの作成
    サブスクリプション名/ [demo2018sub]

6. Cloud Functionの作成

Cloud Functionのコンソール画面からFunctionを作成します。
※今回 index.js と package.js はチュートリアルのスクリプトをそのまま使用します。

  • 名前 :dlpQuarantineGCS
  • 割り当てられるメモリ :256MB
  • トリガー :Cloud Storage バケット
  • イベントタイプ :ファイナライズ/作成
  • バケット :quarantine-2018demo
  • ソースコード :インライン エディタ
  • index.js :gcs-dlp-classification/src/index.js
  • package.js :gcs-dlp-classification/src/package.json
  • 実行する関数 :dlpQuarantineGCS


・index.js の以下項目をそれぞれ作成した内容に修正
[YOUR_QUARANTINE_BUCKET] ⇒ quarantine-2018demo
[YOUR_SENSITIVE_DATA_BUCKET] ⇒ sensitive-2018demo
[YOUR_NON_SENSITIVE_DATA_BUCKET] ⇒ nonsensitive-2018demo
[PROJECT_ID HOSTING STAGING_BUCKET] ⇒ my-project-xxxxxx
[PUB/SUB TOPIC] ⇒ demo2018topic
[PUB/SUB SUBSCRIPTION] ⇒ demo2018sub

・DLP-APIの検出項目(INFO_TYPES)は以下となります。
‘PHONE_NUMBER’
‘EMAIL_ADDRESS’
‘US_SOCIAL_SECURITY_NUMBER’

とりあえず検出項目はそのままで試してみますので上記内容でデプロイします。

7. 検証用サンプルデータをコピーして検出/分類の実行

検証用のサンプルデータをコピーしてきます。
サンプルには個人情報が含まれているデータと含まれないデータがあります。

  1. GCPコンソールから「Cloud Shell」を起動する。
  2. チュートリアルのサンプルデータディレクトリに移動
    コード
    cd ~/dlp-cloud-functions-tutorials/sample_data/
  3. 作成した検疫用バケットにサンプルデータをコピーする。
    コード
    gsutil -m  cp * gs://quarantine-2018demo/

上記実行によりサンプルファイルが検疫用バケットにコピーされて、それらファイルに対するDLP APIによる検疫が実行されます。※サンプルファイルは40ファイル程あります。

検疫用バケットを見ると、一旦40ファイル程が保存されます。

処理されるたびに検疫用バケットから個人情報バケットまたは一般情報バケットに振り分けられます。
ファイルサイズにもよるかと思いますが1ファイルに数秒~10秒程度の時間がかかっているようでした。

個人情報バケット

Functionのログには検出項目にmatchしたinfoTypeが出力されます。

振分けが完了してそれぞれのバケットを確認すると意図したとおり「電話番号」
「メールアドレス」が含まれるファイルと含まれないファイルで振分けされておりました。
今回は下記のような日本語も含まれるファイルですが「電話番号」部分を検出できました。
※架空サンプルデータ

8. まとめ

DLP APIの検出に関して、文字列の検出は現状英語のみの対応となっておりますので
名前や住所関連の日本語の検出はできません。
ただ、「PHONE_NUMBER」については日本の桁数の電話番号でも検出はされており、
言語に関わらない infoTypeも多くあります。
(AGE、EMAIL_ADDRESS、CREDIT_CARD_NUMBER、IP_ADDRESS、MAC など)

日本固有の infoTypeとしては「マイナンバー」と「日本パスポート番号」が用意されております。
※infoTypeリファレンス
https://cloud.google.com/dlp/docs/infotypes-reference?hl=ja

最後に使いどころですが、すぐに思いつくところとしてはプライバシーマーク(Pマーク)取得会社における文書保管でディレクトリ内にあるファイルを一括検索させるとか
文書保管するときはDLP APIを通して、不特定多数のメンバがアクセスできるフォルダには保管できないようにするといった感じですね。

個人情報の観点以外にもIP_ADDRESSやMACアドレスなどの infoTypeもありますので、
FWのACLやルータのConfigファイルを同じく、不特定多数のメンバがアクセスできるフォルダには保管できないようにするといったこともできそうです。
日本語検出ができるようになればおそらく日本固有の infoTypeも増えて使いどころの幅も広がると思いますので日本語対応された際にまた試したいと思います。

次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます