こんにちはkiyonoエンジニアです。
絶賛減量中です。
ユーザーによっては、自社のデータは見えるようにしたい、自部署のデータは見えるようにして他部署に見えないようにしたい等のケースがあるかと思います。
例えば以下のようなデータがあって、A社のユーザには他社のユーザ情報を見えないようにしてほしいといったケースです。
user | company |
user1 | A社 |
user2 | A社 |
user3 | B社 |
user4 | C社 |
方法として、会社ごとにviewを作成して、Looker Studio等のBIツールで会社ごとにレポートを作成しても制限可能かと思います。しかし、社数が50~100のようにかなりの数ある場合、50以上のviewを作成し、viewを作成するとデータソース分のレポートを作成して…となるとかなり大変ですよね…
また、レポートを改修する際に、全社分のレポート修正が必要となると…気が遠くなりますよね…
この方法の厄介な部分は、社数分それぞれデータソースを作成しないといけないという点です。
そんな際に試していただきたいのが、BigQueryの行レベルセキュリティです。BigQueryの設定をするだけで簡単に一つのデータソースで、ユーザごとにデータを出しわけできます。具体的な方法は後述します。
行レベルセキュリティの設定方法
設定方法について解説します。
-- スキーマ作成
CREATE SCHEMA bq_row_security
OPTIONS(
description = 'BigQuery行レベルセキュリティ',
location = 'asia-northeast1');
-- テーブルの作成
CREATE TABLE IF NOT EXISTS bq_row_security.user_table(
userSTRING,
companySTRING
);
-- テストデータの挿入
INSERT INTO bq_row_security.user_table(user, company)VALUES
('user1', 'A社'),
('user2', 'A社'),
('user3', 'B社'),
('user4', 'C社');
-- 行レベルセキュリティポリシーの作成
-- グループA
CREATE ROW ACCESS POLICY user_access_policy_group ON bq_row_security.user_table
GRANT TO("group:AAA@kiyono.com")
FILTER USING(company = 'A社');
-- 行レベルセキュリティポリシーの作成
-- グループB
CREATE ROW ACCESS POLICY user_access_policy_group ON bq_row_security.user_table
GRANT TO("group:BBB@kiyono.com")
FILTER USING(company = 'B社');
-- 行レベルセキュリティポリシーの作成
-- グループC
CREATE ROW ACCESS POLICY user_access_policy_group ON bq_row_security.user_table
GRANT TO("group:CCC@kiyono.com")
FILTER USING(company = 'C社');
group:AAA@kiyono.com
」に属する場合に以下のように、A社のデータのみ表示されていることがわかります。ぜひご自身の環境下でお試しくださいませ。設定に関する補足
- 上記サンプルコード各グループアカウントに対してBigQueryのジョブユーザと閲覧権限をあらかじめ付与しておく必要があります。
- 上記サンプルコードを実行する際は、BigQueryの処理を行うリージョンを「
asia-northeast1」に設定しておく必要があります。
- BigQuery Studioで展開 > クエリ設定 > 詳細オプション > より自動ロケーション選択のチェックを外す > リージョン選択 の順で処理を行うリージョンを指定できます。
- 可視化のために使用するBIはLooker Studioをご使用願います。(その他BIツールは未検証)
行レベルセキュリティに関する補足
- 行レベルセキュリティ設定はテーブルのみ設定可能です。(viewは不可)
- viewで制限をかけたい場合はあらかじめテーブルの方に制限をかけた上でviewを作成する必要があります。
- 今回はユーザグループのみ設定しましたが、ユーザー単位でも制御可能です。(以下参考)
上図の引用元(https://cloud.google.com/looker/docs/access-control-and-permission-management?hl=ja)
終わりに
いかがだったでしょうか。BigQueryの行レベルセキュリティを使えば、比較的簡単にユーザに応じてレポートの出しわけが可能になります。ぜひご自身の環境で試していただければと思います。
おわりに、KIYONOでは、Google認定資格保持者が多数在籍。GCPをはじめクラウドを活用したデータ基盤構築からデータ利活用、可視化まで幅広く支援しております。
また、クラウドやデータ活用等に限らず、GCPのことでご相談がありましたら、気兼ねなく以下「お問い合わせ」フォームよりご連絡ください!
コメント