0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GCP Dataformのリポジトリに専用サービスアカウントを紐づける手順

Last updated at Posted at 2025-10-08

警告
2025年10月8日時点での内容になります。

Dataformでカスタムサービスアカウントを設定する方法

2025年に Google から以下のようなメールが届きました:

「Dataform のセキュリティ モデルの変更についてお知らせいたします。2026 年 1 月 19 日より、Dataform API のセキュリティ強化により、ワークフローの実行方法と、ユーザーが使用できるサービス アカウントが変更されます。」

この変更により、これまで利用できていた デフォルトの Dataform サービスエージェントによる実行 が廃止され、カスタムサービスアカウントを作成してリポジトリに紐づける必要 が生じます。

そこで本記事では、サービスアカウントの作成 → 必要な権限の付与 → Dataform リポジトリへの設定反映 までをCloud Shell上で簡潔に設定する手順としてまとめます。


背景

  • 2026 年以降は act-as モード(ユーザーやカスタム SA に明示的に権限を付与する方式)が強制される予定
  • よって早めに 専用の SA を作成して Dataform リポジトリに設定しておくことが必要

手順

1. プロジェクト変数の定義

PROJECT_ID="demo-project-abc123" #Google Cloudのプロジェクト名を記入
PROJECT_NUMBER="123456789012"  #Google CloudのプロジェクトIDを記入
SA_NAME="dataform-executor" #新規に作成するサービスアカウント名を記入(このままでOK)
SA_EMAIL="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

2. サービスアカウントの作成

gcloud iam service-accounts create $SA_NAME   --description="Dataform scheduled workflow executor"   --display-name="Dataform Executor"

3. BigQuery 権限を付与

gcloud projects add-iam-policy-binding $PROJECT_ID   --member="serviceAccount:${SA_EMAIL}"   --role="roles/bigquery.jobUser"
gcloud projects add-iam-policy-binding $PROJECT_ID   --member="serviceAccount:${SA_EMAIL}"   --role="roles/bigquery.dataViewer"
gcloud projects add-iam-policy-binding $PROJECT_ID   --member="serviceAccount:${SA_EMAIL}"   --role="roles/bigquery.dataEditor"

4. Dataform サービスエージェントに対して、実行用サービスアカウント(dataform-executor)を impersonate(=なりすまし実行)できる権限を与える

gcloud iam service-accounts add-iam-policy-binding "$SA_EMAIL"   --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-dataform.iam.gserviceaccount.com"   --role="roles/iam.serviceAccountTokenCreator"

5. Dataform リポジトリにサービスアカウントを設定

REPO_ID="ga4_repo_demo_123456" #Dataformのリポジトリ名を記入
LOCATION="asia-northeast1" #Dataformのロケーションを記入
NAME="projects/${PROJECT_ID}/locations/${LOCATION}/repositories/${REPO_ID}"
TOKEN="$(gcloud auth print-access-token)"

curl -s -X PATCH   -H "Authorization: Bearer ${TOKEN}"   -H "Content-Type: application/json; charset=utf-8"   "https://dataform.googleapis.com/v1beta1/${NAME}?updateMask=serviceAccount"   -d "$(jq -n --arg name "${NAME}" --arg sa "${SA_EMAIL}" '{name: $name, serviceAccount: $sa}')"

まとめ

  • 専用のサービスアカウントを作成し、Dataform ワークフロー実行用に設定できた
  • BigQuery 権限を最小限にしつつ、Dataform サービスエージェントには Token Creator を付与する必要がある
  • 今後 2026 年以降は Token Creator が不要となり、roles/iam.serviceAccountUser による act-as 管理へ移行予定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?