組織内ユーザーがLooker Studioから指定のBigQueryデータにのみ接続できるようにする設定


# はじめに
本記事では、サービスアカウントを使って、Looker StudioからBigQueryデータにアクセスするまでの実装手順を整理します。

指定BigQueryデータセットにのみアクセスできる専用のサービスアカウントを作成し、
組織のLooker Studio利用ユーザーに紐づけることで、
たとえばグローバル展開企業において、
各国ユーザーが自国内データにのみアクセスできるように制限することが可能です。

Looker Studioヘルプ記事[^1]を参考にしながら進めていきます。



# 前知識
LookerStudioからBigQueryデータセットに接続する際の認証方法は3種類あります[^4]
 1. オーナーの認証情報：
     - 特定のユーザーの認証情報を使ってデータセットへのアクセスを承認（閲覧ユーザーはBigQueryデータセットへのアクセス権を保持していなくても、そのデータに基づくレポートを閲覧、作成できる）
 2. 閲覧者の認証情報：
     - 閲覧ユーザー自身の、BigQueryデータセットへのアクセス権が利用される（アクセス権を持っていないBigQueryデータセットへのアクセス不可）
 3. **サービス アカウント認証情報：**
     - **サービスアカウントに設定したアクセス権を使って**、BigQueryデータセットにアクセスする

本記事では、3つ目のサービスアカウント認証を使った接続を行います。

# アクセスの流れと必要なロール
サービスアカウント認証で、LookerStudioからBigQueryデータセットに接続するときの流れを図にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/ddf8488f-508a-6481-ce7e-08851d79a2bf.png)

各プリンシパルの役割と必要なロールは以下です。
 - Looker Studioユーザー：
     - 役割：Looker Studioレポート上で、BigQueryへの接続を作成するユーザー
     - 必要なロール：サービスアカウントユーザー
 - 専用サービスアカウント：
     - 役割：指定BigQueryデータセットへのアクセス権をもつサービスアカウント（本記事で新規作成）
     - 必要なロール：BigQueryジョブユーザー、BigQueryデータ閲覧者
 - Looker Studioサービスエージェント：
     - 役割：専用サービスアカウントの権限を使って、BigQueryにアクセスするGoogle Cloud管理のサービスアカウント
     - 必要なロール：サービスアカウントトークン作成者




# 前準備
今回の実装のために、以下が準備されている環境であることを前提に進めます。

 - BigQueryに何らかデータセットがあること（Looker Studioの接続先）
 - Google Workspace または Cloud Identity のユーザーであること（Looker Studioサービスエージェントを使うために必須）



# 実装手順
以下ステップで設定していきます。

 - [サービスアカウントの新規作成](#サービスアカウントの新規作成)
 - [BigQueryデータセットの閲覧権限を付与](#bigqueryデータセットの閲覧権限を付与)
 - [Looker Studioサービスエージェントに紐づける](#looker-studioサービスエージェントに紐づける)
 - [Looker Studioユーザーに紐づける](#looker-studioユーザーに紐づける)


## サービスアカウントの新規作成
Google Cloudプロジェクトから、「IAMと管理」 → 「サービスアカウント」に移動し、
「サービスアカウントを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/23749361-0fce-58d5-de9b-3c89a094841e.png)


任意の名前を設定し、
「BigQueryジョブユーザー」ロール[^3]を付与します。
※このサービスアカウントが、プロジェクト内のBigQueryに対してクエリを含むジョブを実行できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/1851e8e2-8d50-7cef-df4e-e25103fae342.png)

「完了」クリック後、サービス アカウント一覧に表示されていることを確認します。
※こちらのメールアドレスは後ほどコピペして使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/90a64a99-4bfe-9d23-eb83-accbcce0d1a0.png)



## Looker Studioユーザーに紐づける
続けて、LookerStudioユーザが、このサービスアカウントを利用できるように設定していきます[5]。
 - 「プリンシパルの追加」：Looker Studioユーザーのメールアドレス
 - 「ロールを割り当てる」：「サービスアカウントユーザー」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/6adcc36f-4789-0a73-a3f9-1c84c199b6f5.png)

これで、Looker Studioユーザーは、このサービスアカウントを使ってBigQueryデータセットにアクセスできるようになります。



## BigQueryデータセットの閲覧権限を付与
次に、BigQuery管理コンソールに移動し、Looker Studioからアクセスしたいデータセットを選択します。
「共有」タブから「権限」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/0f3cce05-989d-e0c6-eb12-ddf080b13800.png)

「プリンシパルを追加」をクリックし、先ほどのサービスアカウントに、このデータセットへのアクセス権を追加します。
 - 「新しいプリンシパル」：先程コピペしたメールアドレス
 - 「ロール」：BigQueryデータ閲覧者
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/c73fbe82-e2c4-9f26-8f92-29476c13eb6c.png)

これで、このサービスアカウントはBigQueryデータセットのデータ閲覧およびクエリ発行ができるようになりました。

このあと、Looker Studioがこのサービスアカウントの権限を使えるように設定していきます。



## Looker Studioサービスエージェントに紐づける
まず最初に、Looker Studio自体のアカウント情報を確認します。
※Google Cloudが内部的に管理しているアカウントで、サービスエージェントと呼びます[^2]

以下のページにアクセスします。

https://lookerstudio.google.com/u/0/serviceAgentHelp

Google Workspace または Cloud Identity のユーザーであれば、LookerStudioエージェントのアドレス情報が表示されます。このアドレスをコピーしておきます。
※このLooker Studioサービスエージェントは、組織に共通のものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/161029ca-7a01-aafa-1466-d7f980faaf5a.png)

Google Cloudコンソールに戻って、新規作成したサービスアカウントの詳細に移動します。
Google Cloudプロジェクト → 「IAMと管理」 → 「サービスアカウント」 → 作成したサービスアカウント → 「権限」タブ → 「アクセスを許可」をクリック

Looker Studioサービスエージェントが、このサービスアカウントの権限を使えるように設定します。
以下を設定し、「保存」クリック
 - 「プリンシパルの追加」：Looker Studioサービスエージェントのメールアドレス
 - 「ロールを割り当てる」：「サービスアカウントトークン作成者」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/74c9b4d9-4744-a0a8-76d1-f608e8185fc8.png)

これで、Looker Studio自体が、作成したサービスアカウントの権限を使って、BigQueryデータセットにアクセスする準備が整いました！




次からは、LookerStudioユーザーでLooker Studioにログインし、組織のBigQueryにアクセスする手順を確認していきます。






# 確認手順
LookerStudioユーザーの接続設定を以下ステップで確認していきます。

 - [Looker StudioユーザーでLooker Studioダッシュボードにログイン](#looker-studioユーザーでlooker-studioにログイン)
 - [サービスアカウントの接続情報でBigQueryデータセットに接続設定](#サービスアカウントの接続情報でBigQueryデータセットに接続設定)


## Looker StudioユーザーでLooker Studioにログイン
Looker Studioユーザーで、Looker Studioページにアクセスします。

https://lookerstudio.google.com/


## サービスアカウントの接続情報でBigQueryデータセットに接続設定
接続先としてBigQueryを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/ac09d4d4-fb27-500f-50b3-3af7294e3c84.png)


右上の「データの認証情報: <ユーザー名>」クリック → 「サービスアカウント認証情報」選択
作成したサービスアカウントのメールアドレスを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618752/f45675fe-06da-4c3f-af3c-c41bad38ba02.png)

指定のBigQueryデータセットを選択します。




# 最後に
サービスアカウントを使った認証方法にすると、LookerStudioユーザーごとのロール管理ではなく、
サービスアカウント側に紐づける権限で、データソースとして接続可能なBigQueryデータセットと、データソースを作成できるユーザーの管理を行うことになります。




# 参考URL
この記事で参考にしたURLです。
[^1]:Looker Studioのヘルプ記事：Looker Studio 用に Google Cloud サービス アカウントを設定する
https://support.google.com/looker-studio/answer/10835295?hl=ja

[^2]:Google Cloudドキュメント：サービス アカウントのタイプ 
https://cloud.google.com/iam/docs/service-account-types?hl=ja#service-agents

[^3]:Google Cloudドキュメント：BigQuery の IAM ロールと権限(BigQuery Job User)
https://cloud.google.com/bigquery/docs/access-control?hl=ja#bigquery.jobUser

[^4]:Looker Studioのヘルプ記事：データの認証情報
https://support.google.com/looker-studio/answer/6371135?hl=ja

[^5]:Google Cloudドキュメント：サービス アカウント認証用のロール 
https://cloud.google.com/iam/docs/service-account-permissions?hl=ja