警告
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 管理へ移行予定