🙆
サービスアカウントでLooker Studio(旧データポータル)からBigQueryに接続する
Looker Studio(旧データポータル)からBigQueryなどのデータソースに接続する場合の認証について主に次の3種類に区分されます。
- オーナーの認証情報
- 閲覧者の認証情報
- サービスアカウント
1はLooker Studioでレポートを作成したオーナーの認証情報をつかったアクセスです。2はレポートを閲覧したユーザーアカウントの認証情報をつかったアクセスです。3はユーザーではなく、共通のアカウントとなるサービスアカウントによるアクセスです。
ユーザーアカウントによる認証情報ではなく、サービスアカウントを利用することのメリットは以下のとおりです。
- (オーナーの認証情報を使用している場合)退職やアカウント停止による影響をうけない
- (閲覧者の認証情報を使用している場合)閲覧者一人ひとりに対してアクセス権限を付与する必要がない
Looker Studioからサービスアカウントを使用する方法については、次のドキュメントを読んでいただくのが手っ取り早いですが、本記事では図を用いて説明します。また、Terraformによる設定方法について紹介します。
Set up a Google Cloud service account for Looker Studio - Looker Studio Help
構成
Looker Studioからサービスアカウントによってデータソースにアクセスする流れについて、次の図を見ながら説明します。
- サービスアカウント(図では
Service Account
)を作成し、データソース(図ではBigQuery)に対してクエリ実行するためBigQueryユーザーのロール(roles/bigquery.user
)を付与する - サービスアカウントトークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)をLooker Studioサービスエージェント(図ではService Agent
)に付与する。これによってサービスアカウントの権限を借用できるようになり、サービスアカウント経由でデータへのアクセスが可能になる - データソースを作成または編集するため、ユーザーアカウントに対してサービスアカウントユーザーのロール(
roles/iam.serviceAccountUser
)を付与する - Looker StudioからアクセスするBigQueryのテーブルまたはデータセットを特定し、サービスアカウントに対してBigQueryデータ閲覧者ロール(
roles/bigquery.dataViewer
)を付与する - ダッシュボード閲覧者はサービスアカウントの権限によってデータソースにアクセスされている
Terraformによる設定方法
Looker StudioドキュメントにマネジメントコンソールとCloud Shell(コマンドラインツール)を使用した設定方法が記載されているため、本記事ではTerraformで設定する方法について紹介します。次にTerraformサンプルコードを載せます。ドキュメントではLooker Studioに関する変数名がdatastudio
になっているため合わせました。また、パラメータ漏れ等があって動かない可能性があるため、あらかじめご了承ください。
variable "project_id" {
default = "xxxxxxxx"
description = "GCPプロジェクトID"
}
variable "dataset_id" {
default = "foo-dataset"
description = "データセット名"
}
variable "user_account" {
default = "ohsawa-example@jicoman.info"
description = "データソースを作成・編集するユーザーアカウント"
}
# Looker Studioサービスエージェント。ヘルプページから取得して置き換える
# https://datastudio.google.com/u/0/serviceAgentHelp
# Looker Studioサービスエージェントを取得するには、WorkspaceまたはCloud Identityのユーザーである必要がある
variable "datastudio_service_agent" {
default = "service-org-xxxxxxxxx@gcp-sa-datastudio.iam.gserviceaccount.com"
description = "Looker Studioサービスエージェント"
}
# サービスアカウントの作成
resource "google_service_account" "datastudio_sa" {
project = var.project_id
account_id = "datastudio_service_account"
display_name = "Looker Studio用サービスアカウント"
}
# BigQueryにクエリ実行するための権限をサービスアカウントに付与
resource "google_project_iam_member" "datastudio_sa_bigquery_jobuser" {
project = var.project_id
role = "roles/bigquery.jobUser"
member = "serviceAccount:${google_service_account.datastudio_sa.email}"
}
# BigQueryのデータセットにおけるデータ閲覧権限をサービスアカウントに付与
resource "google_bigquery_dataset_iam_member" "datastudio_sa_data_viewer" {
project = var.project_id
dataset_id = var.dataset_id
role = "roles/bigquery.dataViewer"
member = "serviceAccount:${google_service_account.datastudio_sa.email}"
}
# サービスアカウントに対して、サービスアカウントトークン作成者の権限をLooker Studioサービスエージェントに付与
resource "google_service_account_iam_member" "datastudio_sa_token_creator" {
service_account_id = google_service_account.datastudio_sa.name
role = "roles/iam.serviceAccountTokenCreator"
member = "serviceAccount:${var.datastudio_service_agent}"
}
# サービスアカウントに対して、サービスアカウントユーザーの権限をユーザーに付与
# サービスアカウントを通じてデータソースの追加・編集をするために必要
resource "google_service_account_iam_member" "datastudio_sa_user" {
service_account_id = google_service_account.datastudio_sa.name
role = "roles/iam.serviceAccountUser"
member = "user:${var.user_account}"
}
Discussion