本記事は ZOZO Advent Calendar 2023 シリーズ 7 の 12 日目の記事です。
概要
dbt-core (OSS版)を Google Cloud 上の何らかの実行環境で動かす場合、 BigQuery に接続する際に json キーなしで認証できるとセキュリティ面で安心です。
今回は Application Default Credentials (ADC) を使って認証するために dbt 側で行う設定を紹介します。
dbtの profiles.yml の設定
結論としては以下のように method として oauth
を使用して BigQuery に接続するようにします。
your_project:
target: dev
outputs:
dev:
dataset: your_dataset
job_execution_timeout_seconds: 300
job_retries: 1
location: US
method: oauth # ADC経由で認証する場合は oauth を指定
priority: interactive
project: your_project_id
threads: 8
type: bigquery
dbt の公式ドキュメントを読むと、サービスアカウント経由の場合は method として service-account
を使用しなければならないのかと思い混乱しましたが、「Why would I want to impersonate a service account?」をクリックして開くとちゃんと書かれていました。
https://docs.getdbt.com/docs/core/connect-data-platform/bigquery-setup#service-account-impersonation
検証
試しにサービスアカウントを作成し、そのサービスアカウントと紐づけた Compute Engine (GCE) の VM インスタンスを立ち上げます。
この方法は公式のドキュメントを参照ください。
VM インスタンス上で dbt インストールを行います。
pip install dbt-core dbt-bigquery
次にdbt init
を実行します。
デフォルトでサンプルモデルが実装されているので、そのまま dbt build
を実行します。
BigQuery のコンソールからジョブ履歴を閲覧すると、最初に紐づけたサービスアカウントでクエリ実行されていることを確認できました。
まとめ
本記事では dbt か らBigQuery に接続する際に ADC 経由で認証する方法を紹介しました。
ドキュメントをよく読めば書いてあるのですが、恥ずかしながら見落としてハマってしまったので記事にしてみました。