BigQuery で独自のマスキング ルーティンを作成できるようになりました(Preview)

2023.09.30

こんにちは!エノカワです。

BigQuery で独自のマスキング ルーティンを作成できる機能プレビュー となりました。

BigQuery now allows you to create your own masking routines for your data. You can use the REGEX_REPLACE scalar function to create custom masking rules to obfuscate your sensitive data.

REGEXP_REPLACE関数を使ってカスタム マスキング ルールを作成できるみたいです!
さっそく使ってみましたので、その内容をご紹介します。

マスキング対象テーブル

まずは、データマスキングの対象となるテーブルを用意しましょう。

この例では、名前付きテーブルusersを作成し、生年月日、メールアドレス、郵便番号を含む列を持たせました。

下記の列をマスキングしてみます。

  • birthday:日付年マスク
  • email:電子メールマスク
  • postcode郵便番号マスク(カスタム マスキング ルール)

日付年マスク、電子メールマスクは、あらかじめ用意されているマスキング ルールです。
郵便番号マスクが、今回新たに作成するカスタム マスキング ルールになります。

なお、このテーブルには実際のデータではなく、下記サイトで作成したサンプルデータを使用させていただきました。

カスタム マスキング ルーティンを作成

カスタム マスキング ルーティンを作成するために、ユーザー定義関数(UDF)を定義します。

ドキュメントのコードサンプルを参考にして、郵便番号の数字をXに置き換える関数を作成します。
また、この関数にはdata_governance_typeオプションでDATA_MASKINGを指定する必要があります。

BigQuery コンソールのエディタ画面に下記クエリを入力して実行します。

  CREATE FUNCTION masking_work.POSTCODE_Mask(postcode STRING) RETURNS STRING
  OPTIONS (data_governance_type="DATA_MASKING") AS (
    SAFE.REGEXP_REPLACE(postcode, '[0-9]', 'X') # 123-456 -> XXX-XXXX
  );

このクエリを実行することで、usersテーブルが所属するmasking_workデータセットにPOSTCODE_Mask関数が作成されました。

ポリシータグを作成

列レベルのアクセス制御をするためにポリシータグを作成します。

ポリシータグの[+分類を作成]をクリックし、必要な情報を入力します。

この例では、分類名とポリシータグ名にテーブル名と列名を使用しました。

マスキング ルールを追加

次にポリシータグにマスキング ルールを追加します。
これにより、列レベルでデータのマスキングが実行されるようになります。

postcodeを選択した状態で[データポリシーを管理]をクリックし、[+ルールを追加]を選択します。

マスキング ルールのプルダウンリストを確認すると、先ほど作成したマスキング ルーティンが追加されています!
データポリシー名postcode_mask、マスキング ルールにmasking_work.POSTCODE_Maskを入力します。

プリンシパルには、このマスキング ルールを適用したいユーザーやグループを設定します。
今回はお試しなので自身のアカウントのメールアドレスを入力しました。

birthdayemailにもそれぞれルールを追加します。

ポリシータグを列に設定

最後にポリシータグを列に設定します。
これにより、ポリシータグに関連付けられたデータポリシーが選択された列にマッピングされます。

usersテーブルのスキーマタブで[スキーマの編集]をクリックします。

postcodeを選択した状態で[ADD POLICY TAG]をクリックします。

先ほど作成した同名のポリシータグpostcodeを選択して保存します。

birthdayemailも同様の手順でポリシータグを設定します。

マスキングの確認

ポリシータグを設定した後、usersテーブルのデータを確認してみましょう。

プレビューを確認すると、マスキングが設定された列は非表示になっています。

全列をSELECTしたクエリを実行するとマスキングが設定された列も表示されます。

postcodeに今回作成した独自のマスキング ルーティン郵便番号マスクが適用され、数字がXに置き換わっていることが確認できました!
birthdayemailもしっかりマスキングされていますね。

まとめ

以上、BigQuery で独自のマスキング ルーティンを作成する機能を使ってみました。

REGEXP_REPLACE関数を使用して、独自のマスキング ルールを簡単に作成することができました。
正規表現が使用できるので、さまざまなデータフォーマットに柔軟に対応できそうです。

特に独自のフォーマットを持つIDなど従来のマスキング ルールではマスキングが難しかった機密データの保護に活用できそうですね。

参考