BigQuery で独自のマスキング ルーティンを作成できるようになりました(Preview)
こんにちは!エノカワです。
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
を入力します。
プリンシパルには、このマスキング ルールを適用したいユーザーやグループを設定します。
今回はお試しなので自身のアカウントのメールアドレスを入力しました。
birthday
、email
にもそれぞれルールを追加します。
ポリシータグを列に設定
最後にポリシータグを列に設定します。
これにより、ポリシータグに関連付けられたデータポリシーが選択された列にマッピングされます。
users
テーブルのスキーマタブで[スキーマの編集]をクリックします。
postcode
を選択した状態で[ADD POLICY TAG]をクリックします。
先ほど作成した同名のポリシータグpostcode
を選択して保存します。
birthday
、email
も同様の手順でポリシータグを設定します。
マスキングの確認
ポリシータグを設定した後、users
テーブルのデータを確認してみましょう。
プレビューを確認すると、マスキングが設定された列は非表示になっています。
全列をSELECT
したクエリを実行するとマスキングが設定された列も表示されます。
postcode
に今回作成した独自のマスキング ルーティン郵便番号マスクが適用され、数字がX
に置き換わっていることが確認できました!
birthday
、email
もしっかりマスキングされていますね。
まとめ
以上、BigQuery で独自のマスキング ルーティンを作成する機能を使ってみました。
REGEXP_REPLACE
関数を使用して、独自のマスキング ルールを簡単に作成することができました。
正規表現が使用できるので、さまざまなデータフォーマットに柔軟に対応できそうです。
特に独自のフォーマットを持つIDなど従来のマスキング ルールではマスキングが難しかった機密データの保護に活用できそうですね。