【2021JDSCアドベントカレンダー】Data Portalレポートを安全に共有する方法
アドベントカレンダー日程表
こちら日程表になります。他記事にも飛べますのでぜひご覧くださいませ!
https://note.com/jdsc/n/nfc811d73c70c
ごあいさつ
こんにちは。データサイエンティストの Kensaku Okada です。
今回はアドベントカレンダーのday5を担当させていただきました。
可視化結果共有の苦労
BigQueryを使って仕事をされている方は、よく可視化のためにData Portal (旧Data Studio)も使用しているのではないでしょうか?今では、有料なものからオープンソースまで多くのデータ可視化・BIツールがあり、Data Portalより多機能だったり使いやすかったりするものもあると思いますが、私は可視化の初手としてBig QueryのGUIから直接開けて手軽に可視化ができるData Portalをよく使います。そしてその延長として、可視化結果を社内の同僚やクライアントなど社外の方に共有したり、作成したData Portalページをそのまま成果物として納品することもしばしばあります。
しかしその時に気になるのがセキュリティです。業務で扱うデータは、自社データだろうがクライアントから受領したデータだろうが、こちらが想定する範囲を超えてデータが閲覧・編集されるべきではありません。ましてや個人情報を含まれるデータを扱っている場合、万が一漏洩したら多大な損害を被る可能性があります。なので、Data Portalのレポートとそれに連携されるBigQueryに対して適切なアクセス権限の設定が必要になります。
というわけで今回は、Data Portalレポートを誰かに共有する際に適切に権限を設定する方法を紹介します。
1. 前提
・IAMとBigQueryとData PortalへのAdmin権限を持ったアカウントで操作できること
・BigQueryに、Data Portalに連携するテーブルを既に作っていること(BigQueryでのテーブル作成方法はここでは説明しない)
・共有するData Portalのレポートページが既にあること(Data Portalを使ったレポート作成方法はここでは説明しない)
・共有したいGoogle Workspace (旧G Suite)アカウントが発行済みであること(アカウント発行法についてはこちらなどの公式ドキュメントを参照)
2. やりたいこと
BigQueryと連携したData Portal レポートを、新規に発行したGoogle Workspaceアカウントと共有する(そのアカウントを外部ユーザーに送れば外部と共有するケースになり、新規発行アカウントを発行済みの社内アカウントに読み替えれば、社内の人間と共有するケースになる)。
3. 方法
3-1. IAMを使った、アカウントへの権限の追加
以下のURLを参考に、Google WorkspaceアカウントをIAMに追加しBigQuery Job UserのRoleを付与する。
https://qiita.com/kndt84/items/96a8df3d00efd9d6de0d
3-2. Data Portalと連携したいテーブル(またはテーブルを含むデータセット)への権限の追加
GCPの権限管理では、こちらに書かれているようにジョブ(クエリ)を実行する権限と、各データに顕現する権限を別々に設定する必要がある。というわけで次は、Data Portalと連携して可視化したいテーブルやデータセットに、それぞれGoogle Workspaceアカウントを登録する。
![画像3](https://assets.st-note.com/production/uploads/images/68141492/picture_pc_60ffc1f9730dc5d61041bf7ef64d55df.png?width=1200)
この際、相手に許可したい操作に応じて適切に権限を設定する必要がある。Data Portalでの操作のみ(SELECT文の実行)を許可したいなら、BigQuery Data Viewerを選択する。Data Portalだけでなく、BigQuery上でもある程度の操作も許可するなら、その内容に応じて他の権限を選択する。例えばテーブルを新たに作成してData Portalレポートを作成することまで許可するならBigQuery Data Editorを選択する。
![画像2](https://assets.st-note.com/production/uploads/images/68141321/picture_pc_92c4a65a50db43a2e26365c9dd949230.png?width=1200)
3-3. Data Portalで共有対象のGoogle Workspaceアカウントを登録する
以下のようなサンプルレポートを作ったとする。
右上の「共有」ボタンを押し、共有先のGoogle Workspaceアカウントを入力し、付与したい権限として「閲覧者」か「編集者」を選ぶ。「閲覧者」の場合、こちらが作成したレポートの閲覧しかできず、「編集者」の場合、グラフや表の追加・削除・編集など、レポート自体の編集もできる。
![画像3](https://assets.st-note.com/production/uploads/images/68141580/picture_pc_ac72e338d4cbe960d0b011f8a63c7dd1.png?width=1200)
アカウント追加後、「アクセスを管理する」タブにて、もう少し細かい権限の設定ができる。下記画像のように「編集者によるアクセス権の変更や新しいユーザーの追加を禁止する」「閲覧者によるダウンロード、印刷、コピーを無効にする」のチェックボックスを入れることで、各編集者・閲覧者の権限をさらに制限できる。
![画像4](https://assets.st-note.com/production/uploads/images/68141631/picture_pc_f1bac238f0ed4fdc3e1ad0ee4f26126f.png?width=1200)
しかし、執筆時点(2021年12月7日)ではユーザーごとにこれらの項目を設定できないし(例えば、ある編集者にはアクセス権の変更や新しいユーザーの追加を許可して、別の編集者には禁止することはできない)、より細かく制限することはできない(例えば、アクセス権の変更は許可するが新しいユーザーの追加を禁止することはできない)。
適切な権限管理のためには、参照するテーブルへのアクセス権限をData Portalからも行う必要がある。
下記画像の「データソース」の鉛筆マークを押し、「データの認証情報」を押す。
![画像7](https://assets.st-note.com/production/uploads/images/68142196/picture_pc_71786f784160b87d03ef7a44b18dc55c.png?width=1200)
すると、以下のようにData Portalからデータソースにアクセスする時に、誰の権限を参照するかを選択できる。デフォルトでは「オーナーの認証情報」になっている。もし一つのデータポータルレポートで複数のテーブルを参照していて(複数ページのレポートを作成している場合などによくある)、共有先によって見せたい図やグラフが異なる場合、こちらも適切に設定する必要がある。
![画像6](https://assets.st-note.com/production/uploads/images/68141832/picture_pc_746464faa2327cd43593159526ae3c95.png?width=1200)
想定外の情報まで意図せず見られないようにするためにも、自分(レポートの作成者)がプロジェクトを離れたり対処して共有したData Portalへのアクセス権が消滅した時に他のユーザーがアクセスできなくなる事態を防ぐためにも、認証情報は常に「閲覧者の認証情報」にしておくのが良いと個人的には思う。
詳細はこちらの公式ドキュメントを参照。
3-4. 想定通りに権限が制御されているか確認する
数の右上の人間のシルエットマークを押し「アカウントを追加」を押すと、別のアカウントでログインできるので、共有先のアカウントとログインパスワードでアクセスして、Data PortalとBigQueryが想定通りの見え方になっているか確認することができる。
![画像7](https://assets.st-note.com/production/uploads/images/68141922/picture_pc_7041470b820c39d14c46fef70e85ffc7.png?width=1200)
4. その他
4-1. 適切な権限管理のために、現状のData Portalの仕様でつらい点
「3-3. Data Portalで共有対象のGoogle Workspaceアカウントを登録する」でも少し触れたが、Data Portalレポートを作成した人がプロジェクトを離脱したり退職したりしてアカウントが削除された場合、他の社員が誰もそのレポートにアクセスできなくなる、という問題にぶつかることが多い。この問題を解決する方法として、もし作成者以外の人もオーナーに設定することができれば簡単に解決できるが、2021年12月7日時点では、どうやらオーナーは一人しか設定できない仕様の模様。。。
次善策としては、以下の三つがあるように思う(もし他に良い方法があれば是非教えてください!)。
Data Portal管理用の共通アカウントを作り、それを常にオーナーにする。
運用でカバーする
共有先のユーザーにオーナー権限を渡して管理を委譲する。
①:オペレーションの現場でしばしば取れる方法だが、こちらの公式ドキュメントで「しないでくれ」と言われている。また、作ったアカウントの管理が面倒(代わりに、共同トレイを使用してメールアドレスを共有する方法が提案されている(https://support.google.com/a/answer/33330))。
②:エンジニア的には最終手段にしておきたい。
③:レポートが顧客への納品物だった場合、要件次第でこの方法でうまく解決できる可能性がある(実際取ったこともある)。
4-2. なぜGoogle Workspaceアカウントを新規発行するのか
こちらにあるように、必ずしもgmail.com アドレスを使う必要はなく、外部ユーザーのドメインのアドレスを使うことも可能である。
しかし弊社では、アカウント共有先のPCが不正に操作されたりした時などにアカウントをすぐに停止できるようにする、というセキュリティ上の理由でアカウントを発行することがほとんどである。