AWS Glue DataBrewで個人情報(PII)の検出とデータマスキング変換が出来るようになったようなので試してみた

2021.12.23

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

いわさです。

AWS Glue DataBrewで個人情報(PII)向けの機能が追加されていました。

AWS Glue DataBrew が、個人を特定できる情報 (PII) の検出とデータマスキング変換の提供を開始

このアップデートで何がどこまで出来そうなのか利用イメージを掴みたかったのと、Glue DataBrewを触る機会があれば試してみたいと思っていたので、ちょうど良い機会と思い試してみることにしました。

先にまとめ

  • Glue DataBrew使いやすい。すごい。
  • PIIの検出はデータプロファイルジョブで対応している
    • PIIのカテゴリについては現時点ではUS向けな印象を感じるが、Eメールや生年月日など一部国内でも活用できそうなカテゴリはある。(個人的にはMacieと同じ温度感)
  • PIIのデータマスキングはレシピジョブの変換機能で対応する形。
    • PIIに限らない汎用的なデータマスキングって感じなので国内でも全然使えそう
    • 一部PIIカテゴリを使った変換用のオプションがある

データプロファイルジョブ

データプロファイルジョブを実行するとGlue DataBrewで取り扱うデータセットに対して分析と行い、統計情報を作成することが出来ます。
詳しくは以前、しんやさんがご紹介されています。

今回、このデータプロファイルの設定オプションに個人情報(PII)がどの程度含まれているのか統計を行うための選択肢が追加されています。

ためしてみる

個人情報(ダミー)を含むCSVをS3へアップロードしデータカタログ作成しデータプロファイルジョブを作成してみましょう。

データプロファイルジョブ作成時の設定オプション内に、「データセットレベル設定」があり、デフォルトで重複した値が選択されています。
ここでPII statisticsを有効化し、カテゴリーを選択します。

このカテゴリーではPIIとして検出する対象のEntityTypesを選択します。

Building a profile job configuration programmatically in AWS Glue DataBrew - AWS Glue DataBrew

本日時点ではUSA向けのカテゴリが多い。
また、PII検出のたのサービスAmazon Macieよりはカテゴリがまだ少ないかなという印象を受けます。
このあたりは今後拡充を期待したいですね。

その中でも、EMAIL, IP_ADDRESS, MAC_ADDRESS, DATEあたりは国内でも使えそうかなと感じました。
今回のダミーデータにはIPアドレスとMacアドレスは含んでいなかったのでその2つは除外し、PERSON_NAMEは日本人の名前で利用出来るか少し怪しい気がしますが選択してみました。

データプロファイルの実行結果の概要ダッシュボードが以下となります。

今回のダミーデータだと漢字姓名とカタカナ姓名を含んでいたのですが、PERSON_NAMEはやはり検出出来ていないですね。ローマ字表記ならいけるだろうか。
Eメールや生年月日は100%で検出出来ています。

また、住所列が複数に分割されているダミーデータだったのですが、Address4列に日付データが少し含まれているようです。
0か1ではなくてこのあたりの傾向が検出出来るのも良いですね。
後ほどレシピジョブの際に少し触れますが、例えばデータにフリーテキスト列がある場合に、たまたま個人情報が含まれている場合でも検出が期待できそうです。

レシピジョブ

データプロファイルでPII列を特定出来たら、次はレシピを使ってPIIの変換・加工を行います。

Glue DataBrerにおけるレシピとは、データセットを集計・加工するための複数のステップから成る変換処理をセットを指します。
こちらもしんやさんが詳細な記事にてご紹介されていますのでご参照ください。

変換の追加とレシピ

コンソール上で変換処理がグルーピングされているのですが、SENSITIVEグループの変換処理を主に使用します。
PIIの変換には複数のオプションが用意されていて、以下でレシピステップが公開されています。

Personally identifiable information (PII) recipe steps - AWS Glue DataBrew

大きく分類すると、以下が案内されています。

  • 対象データをマスクあるいはハッシュ化する
  • ランダムな値や列内でのシャッフルを行う
  • 復号化がのちほど必要であれば暗号化する
  • 列自体を削除(PIIではなく基本レシピステップ)

今回は上記ドキュメントを参考に以下のように加工するレシピを作成してみました。

  • 姓名(漢字・カナ)の数文字をマスクする
  • 性別はシャッフルする
  • 電話番号は範囲内でランダムな値に
  • 住所とパスワードは削除
  • 生年月日は1950年1月1日から2000年12月31日の範囲でランダムな日付に
[
    {
      "Action": {
        "Operation": "MASK_RANGE",
        "Parameters": {
          "sourceColumns": "[\"Name1\",\"Name2\"]",
          "start": "1",
          "stop": "5",
          "maskSymbol": "#"
        }
      }
    },
    {
      "Action": {
        "Operation": "SHUFFLE_ROWS",
        "Parameters": {
          "sourceColumns": "[\"Sex\"]"
        }
      }
    },
    {
      "Action": {
        "Operation": "REPLACE_WITH_RANDOM_BETWEEN",
        "Parameters": {
          "sourceColumns": "[\"Tel\"]",
          "lowerBound": "11111111",
          "upperBound": "99999999"
        }
      }
    },
    {
      "Action": {
        "Operation": "DELETE",
        "Parameters": {
          "sourceColumns": "[\"Address1\",\"Address2\",\"Address3\",\"Address4\",\"Address5\",\"Password\"]"
        }
      }
    },
    {
      "Action": {
        "Operation": "REPLACE_WITH_RANDOM_DATE_BETWEEN",
        "Parameters": {
          "sourceColumns": "[\"Birth\"]",
          "startDate": "1950-01-01 00:00:00",
          "endDate": "2000-12-31 00:00:00"
        }
      }
    }
]

こちらをインポートしてみましょう。
インポート手順は以下でnayu.t.sさんがご紹介されています。

加工された様子がプレビュー表示されていますね。
この後はレシピジョブを作成し実行すれば良いです。ここは割愛します。

変換時のオプション

もうひとつ、PII向けのオプションとして変換処理の中でPIIカテゴリを検出して部分的に適用対象とするオプションが追加されています。(一部変換のみ)
こちらを利用すると、列の全体をマスクしたいわけではないが、PIIについてはマスクしたい場合にカテゴリ検出機能を使って該当部分のみマスキングなどの加工を行うことが出来ます。
ユースケースとしては、PIIが含まれる可能性のあるフリーテキスト列などへの利用を想定しているようです。

さいごに

本日は、Glue DataBrewを使ってPIIの検出と変換を行ってみました。
まず、Glue DataBrewの使いやすさに驚きました。データ加工をサッとやりたい時に最高ですね。

ただし、ジョブ実行時のノード時間に加えて30分単位のセッションでも料金が発生するので、そこだけ注意しながら使いました。 そういう意味だとレシピファイルを管理・運用出来ると再利用性も高いですし、コスト的にも無駄がなくて良さそうだなと思いました。

冒頭で述べましたが、PIIについてはまだ日本向けのデータとしてはまだ十分なカテゴリをカバー出来てないように思えますが、これから拡充されていくことを期待したいですね。