Terraformを使ってLooker Studio 用に Google Cloud サービス アカウントを設定する
基本的に、
の内容を Terraform で記述するとどうなるか、という記事です。
Looker Studio 用サービスアカウント
サービス アカウントを使ってデータにアクセスできるようにする、という点では以下のような Terraform になる。
resource "google_service_account" "looker-studio" { account_id = "demo-lookerstudio" description = "Use for Looker Studio access to BigQuery (Managed by Terraform)" } resource "google_service_account_iam_binding" "looker-studio" { service_account_id = google_service_account.looker-studio.id role = "roles/iam.serviceAccountTokenCreator" members = [ "serviceAccount:service-XXX-888888888888@gcp-sa-datastudio.iam.gserviceaccount.com" ] } resource "google_project_iam_member" "looker-studio-bigquery-jobuser" { project = var.gcp_project role = "roles/bigquery.jobUser" member = "serviceAccount:${google_service_account.looker-studio.email}" } resource "google_bigquery_dataset_iam_member" "looker-studio" { dataset_id = "ZZZZZZ" role = "roles/bigquery.dataViewer" member = "serviceAccount:${google_service_account.looker-studio.email}" }
serviceAccount:service-XXX-888888888888@gcp-sa-datastudio.iam.gserviceaccount.com
は、Looker Studio サービスエージェントのメールアドレスとなります。
これは、本家ヘルプにもあるように Looker Studio サービス エージェントのヘルプページ で表示されるサービスエージェントのメールアドレスからコピーしてくるもの。
また、ここでは BigQuery のデータセット ZZZZZZ
にアクセスできるように設定しています。最後の google_bigquery_dataset_iam_member
リソースのところ。
ここは適宜、テーブルへのアクセスに絞るならそれに該当するように変更することになる。
ここまでの設定で、データソースのオーナーがそもそも強い権限を持っていれば、データの認証情報
を作成したサービスアカウントに変更可能である。
変更後は、そのデータソースを利用するレポートを開くと、BigQueryへのアクセスはサービスアカウントによって行われる。
ユーザロールを付与する
データソースのオーナーが一般ユーザ的な権限であれば、データの認証情報
をサービスアカウントに変更できない。
例えば
locals { test_user_email = "test@example.com" } resource "google_project_iam_member" "test-test-user" { project = var.gcp_project role = "roles/bigquery.jobUser" member = "user:${local.test_user_email}" } resource "google_bigquery_dataset_iam_member" "test-test-user" { dataset_id = "ZZZZZZ" role = "roles/bigquery.dataViewer" member = "user:${local.test_user_email}" }
のようなユーザは、該当BigQueryのデータセット ZZZZZZ
にアクセスできてクエリも実行できるので、これをデータソースとして設定できる。
データソースの画面の データの認証情報
でユーザ名(下記画面参照)
をクリックして、表示されるダイアログで、サービスアカウント認証情報
に上記で作成したサービスアカウントのメールアドレス入力して更新
を実行しようとしても、以下のようにエラーとなる。
該当ユーザがサービスアカウントを利用できるように以下の設定も追加する。
resource "google_service_account_iam_member" "test-test-user" { service_account_id = google_service_account.looker-studio.id role = "roles/iam.serviceAccountUser" member = "user:${local.test_user_email}" }
この設定の追加後は、サービスアカウントのメールアドレスを入力して更新
すると成功する。
これで、これ以降はこのデータソースへのアクセスはサービスアカウントによって行われる。
めでたしめでたし!