【Snowflake×dbt】Programmatic access tokensでdbt cloud接続してみた

【Snowflake×dbt】Programmatic access tokensでdbt cloud接続してみた | Tableau-id Press -タブロイド-
eyecatch_snowflake_dbt

はじめに

dbt cloudに接続する際、username and passwordでログインしようとすると
SnowflakeのMFA認証が突破できないというメッセージが返ってきました。

今回はMFAを突破すべくSnowflakeのProgrammatic access tokens(PAT)を
設定して、dbt cloudとSnowflakeを接続する方法を解説します。

Programmatic access tokens(PAT)

2025年4月30日にリリースされた機能で
API、Tableau、PowerBIのアクセストークンを発行できる機能になります。

特徴的なのはサービス ユーザー (TYPE=SERVICE のユーザー) に対して
プログラムによるアクセストークンを生成することが可能で
キーペア認証など手間のかかる方法を用いらなくても自動実行系のログインができるようになりました。

公式ドキュメント
https://docs.snowflake.com/en/release-notes/2025/other/2025-04-30-programmatic-access-tokens

dbt CloudからSnowflake接続

実際にPATを作成して、dbt CloudとSnowflakeを接続します。
以下がSnowflakeで作成したPATのコード例になります。

use role accountadmin;

-- ① SERVICEユーザーの作成
create or replace user kyota_dbt_test
type = service
default_role = public
comment = 'PAT test';
grant role public to user kyota_dbt_test;
grant role public to user kyota_dbt_test;

-- ② ネットワークポリシーの作成
create network policy if not exists kyota_dbt_ip_policy
allowed_ip_list = (
'xxxxxxxxxxxxxxxxx' 
);

alter user kyota_dbt_test set network_policy = kyota_dbt_ip_policy;

-- ③ Programmatic Access Token(PAT)の発行(有効期限90日、実行ロールに制限)
alter user kyota_dbt_test add programmatic access token dbt_token
days_to_expiry = 90
role_restriction = 'PUBLIC';

ポイントは以下の通りです
①ログイン用のユーザーにServiceとdbtで実行するロールを付与
②ユーザーに対して、ネットワークポリシーが適用されていないとアクセストークンが発行されないので付与
③有効期限、クエリ実行するロールを指定

特筆すべきは②のネットワークポリシーの設定になります。
設定をせずに接続するとエラーが返ってくるので
許可するIPアドレスを入力してください。

dbtのIPアドレス一覧
https://docs.getdbt.com/docs/cloud/about-cloud/access-regions-ip-addresses


③PATを発行するとアクセストークンが表示されます。
他サービス同様、一回しか表示されないのでセキュリティに則りメモなどして管理をしてください。

dbt cloud接続

作成したユーザーと、Passwordにトークンを入れれば通常のIPASS同様に接続ができます。

Job実行も問題なくできて、本番環境にアップすることができました。

最後に

MFA認証がデフォルトで求めらる中、PATのような簡易的にログイン突破できる機能はありがたいですね。
キーペアやoAuth設定に難航しているときは一時的な回避策としても有効そうです。