背景
BigQueryのスケジュールクエリを個人の認証情報で実行している場合、退職などで認証情報が無効になるとクエリの実行が停止することになります。
そのため認証情報のサービスアカウントへの切り替えが必要となりますが、公式のドキュメントが存在せずやや分かりづらいため、備忘録として設定方法を残しておきます。
※誤っている箇所あれば指摘願いますm(_ _)m
必要なパーミッション
「権限の足りないアカウントにて操作→ロギングを確認」という手順にて、必要な権限が調べました。
結論、以下の3つの権限が必要となります。
- bigquery.transfers.update
- 転送設定のアップデート権限
- iam.serviceAccounts.list
- サービスアカウントの一覧を取得する権限
-
iam.serviceAccounts.actAs
- サービスアカウントをリソースに紐づける権限
オーナー権限があればこれらの権限を細かく割り当てる必要もありませんが、組織のルール上オーナー権限の付与が難しい場合には上記3つを含めたカスタムロールを作成すると良いと思います。
Cloud Consoleから変更する場合
Cloud Consoleからサービスアカウントの変更はできないと認識していましたが、2024年9月現在、変更できるようになっています。
ヘルプには「できる」とも「できない」とも記載されてますが、実際には設定変更が可能です。
You can update an existing scheduled query with the credentials of a service account with the bq command-line tool or Google Cloud console. For more information, see Update scheduled query credentials.
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=en#using_a_service_account
Caution: Changing the credentials used in a scheduled query to a service account is not supported in the Google Cloud console.
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=en#update_scheduled_query_credentials
必要な権限を付与することで、スケジュールクエリの編集画面にて「任意のサービスアカウント表示」と「認証情報の切り替え」が可能となります。
Cloud Shellで変更する場合
bqコマンドを使って認証情報を切り替えることができます。
スケジュールクエリの一覧を確認
以下のコマンドで設定されているスケジュールクエリの一覧が確認できます。
※LOCATIONは任意のロケーションを指定してください。
bq ls --transfer_config --transfer_location=LOCATION --filter='dataSourceIds:scheduled_query'
認証情報をアップデート
bq update
で任意のサービスアカウントと転送IDと指定します。
bq update \
--transfer_config \
--update_credentials \
--service_account_name=hogehoge@fugafuga.iam.gserviceaccount.com projects/XXXXX/locations/asia-northeast1/transferConfigs/YYYYY \
※GCPプロジェクトがVPC-SCで保護されている場合はCloudShellでのBQコマンドに制限がかかるため(CloudShellが別のGCPプロジェクトとなるため) 、VPC-SC境界内の別環境で実行する必要があります。
転送構成の確認
無事サービスアカウントに切り替わっていました。めでたしめでたし。
参考になりそうなサイト