Lookerで特定のユーザーだけ値をマスクする #Looker
Looker勉強中のikumiです。今回は、機密性の高いデータを扱う際など、特定のユーザーにはその値をマスクした状態で表示したいというケースを想定して、ユーザー属性を利用したマスキング方法について記述していきます。
やってみる
ユースケース
- 顧客情報のうち、個人識別番号の列を特定のユーザーには非表示にさせる
設定する内容
- ユーザー属性を作成する
- Liquid式を用いて、制御対象者のみマスクする設定を行う
ユーザー属性の作成
- まず、対象者の識別に必要になるユーザー属性を作成します
- ナビゲーションメニューの管理者タブから、「ユーザー属性」を選択し、「Create User Attribute」を選択
- 以下の項目を設定していく
- ①Name:LookML内などで使用する属性名
- ②Label:名前をわかりやすくした表示名
- ③Data Type:持たせる値のデータ型。今回は文字列型を使用するので「String」を選択します。注意点としては、Stringは値と完全一致するユーザー属性を持つ場合にのみ適用されるという点です。複数の値や部分一致など高度なフィルタ式などを含む場合は「String Filter(advanced)」を使用します。
- ④User Access:管理者以外がユーザー属性を閲覧 or 編集できるかを選択。今回はユーザーに編集させないが、表示はできる「View」を選択
- ⑤Hide Values:パスワード等ユーザー属性の値をマスクする場合に設定します。今回は「no」を設定しますが、yesにした場合はこの値を受け入れる先のドメインの許可リストを入力する必要があります。
- ⑥Default Value:値が割り当てられない場合のデフォルト値を設定。今回はデフォルト値に「no」を指定
設定内容の詳細は、公式Docにも記載がありますのでこちらも参考にしてください。
Viewファイルで定義
- ここでは、個人識別番号の列をLiquid式を用いて表示の出し分けを行います
- Liquid式を用いて、ユーザー属性に一致するユーザーのみ表示するdimentionを作成
- ユーザー属性が「yes」の場合は値を表示、「no」の場合は
****
を表示するように定義
- ユーザー属性が「yes」の場合は値を表示、「no」の場合は
dimension: user_id { label: "個人識別番号" type: string sql: CASE WHEN '{{ _user_attributes['masking_test'] }}' = 'yes' THEN ${user_number} ELSE "****" END ;; }
この段階でExploreでの表示を確認
- 現状では、ユーザー属性の値の割り当てを行っていないので、デフォルト値の「no」の値を持っている状態=個人識別番号は見えない状態です
- Exploreにて、個人識別番号を抽出すると、
****
が表示されているので、想定通りの挙動になっているのを確認できました
ユーザー属性に値を割り当てる
- ユーザー属性の設定画面に戻り、ユーザーに値を割り当てます
- 今回は、自分のアカウントに対してのみ
yes
の値を設定します- 「User Value」タブから自分のアカウントを選択し、「Set Value for User」を選択
- 「New Value」で
yes
の値を設定
- 「User Value」タブから自分のアカウントを選択し、「Set Value for User」を選択
改めてExploreで表示確認する
- 先ほど表示されていなかった個人識別番号が表示されるようになっています(※値はダミーです)
さいごに
いかがでしたでしょうか。今回はユーザー属性の挙動を確認するためにも、このユースケースを想定して実行してみました。ユーザー属性を設定する以外にも、ユーザーグループにもユーザー属性を設定できるので、実際の運用の際はそちらの方が向いているかもしれません。今後もいろいろな方法を試してみたいと思います!