dbt入門(Tips): SSO認証の煩わしさを解消 - IDトークンキャッシュで快適なdbt開発環境を実現(Snowflake編)
🚀 はじめに
この記事は dbt入門(第3弾の補足 / SSO認証改善編) です。
前回の第3弾「dbt × Snowflake ローカル開発環境構築ガイド」では、VS Code上でdbtの開発環境を構築しました。
その際、Snowflakeの認証方法として SSO(externalbrowser) を使用しました。
しかし、開発を進めていくと、地味に効いてくる問題があります。
「dbtコマンドを実行するたびに、ブラウザが起動して認証画面が開く…😰」
dbt debug、dbt run、dbt test など、何かコマンドを叩くたびにブラウザが立ち上がり、認証が終わるまで待つ。
操作はほぼ不要でも、この「ブラウザ起動」が思った以上に集中力を削ります。
この記事では、Snowflakeの 接続キャッシュ(IDトークンキャッシュ) を有効化して、
「初回だけブラウザ認証 → 2回目以降はブラウザ無し」 にする方法を解説します。
前回(第3弾)
- 第3弾:dbt × Snowflake ローカル開発環境構築ガイド
この記事の対象読者
- 第3弾でローカルdbt環境を構築した方
-
profiles.ymlでauthenticator: externalbrowserを使っている方 - 毎回のブラウザ起動にストレスを感じている方
この記事でわかること
-
externalbrowser認証の仕組みと「なぜ毎回ブラウザが開くのか」 - 接続キャッシュ(IDトークンキャッシュ)の仕組み
- Snowflake側での設定(
ALLOW_ID_TOKEN) - ローカル環境での設定(
snowflake-connector-python[secure-local-storage]) - 動作確認の手順
- セキュリティ面の注意点 / トラブルシューティング
📋 前提条件
この記事では以下を前提とします。
-
第3弾の環境構築が完了している
- Python仮想環境(例:
dbt-env)が作成済み -
dbt-snowflakeがインストール済み -
profiles.ymlで SSO(authenticator: externalbrowser)を設定済み
- Python仮想環境(例:
-
Snowflakeアカウントへのアクセス権限
-
ALLOW_ID_TOKENを変更できる権限(基本はACCOUNTADMIN)
-
😓 課題:コマンドのたびにブラウザが起動する
externalbrowser 認証の動作
profiles.yml に以下のように設定すると、dbtはSSO(ブラウザベース)で認証します。
my_dbt_project:
target: dev
outputs:
dev:
type: snowflake
account: <your_account_identifier>
user: YOUR_SNOWFLAKE_USER
authenticator: externalbrowser # SSO(ブラウザベース)
role: ACCOUNTADMIN
database: DBT_DEV
warehouse: COMPUTE_WH
schema: PUBLIC
threads: 4
このとき、dbt(正確には内部で使っているSnowflake Python Connector)が、OSのデフォルトブラウザを起動してIdP(SSO)で認証します。

図1: externalbrowser は「新しい接続を張るたびに」ブラウザ認証が走りやすい。開発中は地味にストレス。
何が問題なのか
- 作業が中断される:コマンド実行→ブラウザ起動→認証完了→ブラウザを閉じる、という流れで集中力が削がれる
-
開発速度が落ちる:
dbt run、dbt testなどを何度も実行する開発フローで、毎回数秒〜十数秒待たされる - 不要なリソース消費:ブラウザの起動・終了が繰り返される
認証自体は自動で完了するため、「操作が必要」というわけではありませんが、ブラウザが起動すること自体がストレスになります。
💡 解決方法:IDトークンキャッシュの有効化
IDトークンキャッシュとは
Snowflakeは、SSO認証で取得したIDトークン(Identity Token) をローカルマシンにキャッシュする機能を提供しています。

図2: 初回だけブラウザ認証、以降はOSキーストアのトークンを再利用して快適に。
参考: Snowflake公式ドキュメント - Using an authenticator with external browser for SSO
仕組み:
- 初回:ブラウザを開いてSSO認証を行い、IDトークンを取得
- トークンをローカルにキャッシュ:セキュアなストレージ(keyring)に保存
- 2回目以降:キャッシュされたトークンを再利用して認証(ブラウザ不要)
- トークンが期限切れ:再度ブラウザを開いて認証(その後また再利用)
この機能を有効にすることで、トークンの有効期限内であれば、ブラウザを開かずにdbtコマンドを実行できるようになります。
必要な設定
IDトークンキャッシュを有効にするには、以下の2つの設定が必要です。
1. Snowflake側の設定
Snowflakeのアカウント/ユーザーレベルで、IDトークンキャッシュを有効化します。
2. ローカル環境の設定
Python環境に snowflake-connector-python[secure-local-storage] をインストールし、セキュアなストレージ(keyring)を使えるようにします。

図3: Snowflake側(ALLOW_ID_TOKEN)+ローカル側(secure-local-storage)の両方が揃って初めて効く。
🔧 設定手順
ステップ1: Snowflake側の設定
Snowflakeで、IDトークンキャッシュを有効化します。
アカウントレベルで有効化する場合(推奨):
-- Snowflakeで実行(ACCOUNTADMIN権限が必要)
ALTER ACCOUNT SET ALLOW_ID_TOKEN = TRUE;
設定の確認:
-- アカウントレベルの設定確認
SHOW PARAMETERS LIKE 'ALLOW_ID_TOKEN' IN ACCOUNT;
出力例:
key | value | default | level | ...
----------------|-------|---------|---------|----
ALLOW_ID_TOKEN | true | false | ACCOUNT | ...
value が true になっていればOKです。
注意(セキュリティ)
接続トークンはOSのキーストアに保存されます。
有効化前に、社内のセキュリティポリシー(端末管理/暗号化/権限)に合っているかは確認しておくのが安全です。
ステップ2: ローカルで secure-local-storage を有効化
dbt-snowflakeは内部で snowflake-connector-python を使います。
接続キャッシュを効かせるには、Python Connector側で keyring(OSキーストア連携) が使える状態にします。
1. 仮想環境をアクティブ化
# dbt_workspace/ に移動
cd ~/dbt_workspace
# 仮想環境をアクティブ化(WSL/Linux/macOS)
source dbt-env/bin/activate
# Windows(WSLを使わない場合)
# dbt-env\Scripts\activate
プロンプトに (dbt-env) が表示されることを確認してください。
2. snowflake-connector-pythonの確認
まず、現在のバージョンを確認します。
pip list | grep snowflake
出力例:
dbt-snowflake 1.10.6
snowflake-connector-python 4.1.1
すでに snowflake-connector-python がインストールされているはずです(dbt-snowflakeの依存関係として自動的にインストールされます)。
3. セキュアストレージオプション付きで再インストール
IDトークンキャッシュに必要な追加パッケージをインストールします。
pip install 'snowflake-connector-python[secure-local-storage]' --upgrade
このコマンドにより、以下がインストールされます:
- keyring:OSのセキュアなストレージ(macOS Keychain、Windows Credential Manager、Linux Secret Serviceなど)にトークンを保存
- その他の依存パッケージ
参考:
インストールの確認:
pip list | grep keyring
出力例:
keyring 24.3.0
keyring がインストールされていればOKです。
✅ 動作確認(ブラウザが初回だけになることを確認)
1回目(ブラウザが開く)
# dbtプロジェクトに移動
cd ~/dbt_workspace/my_dbt_project
# 初回のdbt debug実行
dbt debug
期待される動作:
- ターミナルに「Initiating login request with your identity provider...」と表示される
- ブラウザが自動的に起動する
- SnowflakeのSSO認証画面が開く
- 認証が完了すると「You can close this browser window now.」と表示される
- ターミナルに戻って
Connection test: [OK connection ok]と表示される
この時点で、IDトークンがローカルマシンにキャッシュされます。
2回目以降(ブラウザが開かない)
続けて、もう一度 dbt debug を実行します。
dbt debug
期待される動作:
- ターミナルに接続情報が表示される
- ブラウザは起動しない
- 直接
Connection test: [OK connection ok]と表示される
成功!🎉
2回目以降は、キャッシュされたIDトークンが再利用されるため、ブラウザが開かずに認証が完了します。
dbt runでも確認
念のため、dbt run でも同様に動作するか確認してみましょう。
# exampleモデルを実行
dbt run --select models/example
期待される動作:
03:28:56 Running with dbt=1.7.4
03:28:56 Found 2 models, 0 tests, 0 snapshots, 0 analyses, 348 macros, 0 operations, 0 seed files, 1 source, 0 exposures, 0 metrics, 0 groups
03:28:56
03:28:56 Concurrency: 4 threads (target='dev')
03:28:56
03:28:57 1 of 2 START sql view model PUBLIC.my_first_dbt_model ................ [RUN]
03:28:58 1 of 2 OK created sql view model PUBLIC.my_first_dbt_model ........... [SUCCESS 1 in 0.82s]
03:28:58 2 of 2 START sql view model PUBLIC.my_second_dbt_model ............... [RUN]
03:28:59 2 of 2 OK created sql view model PUBLIC.my_second_dbt_model .......... [SUCCESS 1 in 0.67s]
03:28:59
03:28:59 Completed successfully
ブラウザが開かずに、直接実行が完了します。✅
🔒 セキュリティと有効期限
トークンの保存場所
保存先は「OSのキーストア」です(keyring経由)。
| OS | ストレージ |
|---|---|
| macOS | Keychain |
| Windows | Credential Manager |
| Linux | Secret Service(GNOME Keyring / KWalletなど) |
セキュリティ
- トークンは暗号化されて保存されます
- OSのユーザー認証で保護されているため、他のユーザーからはアクセスできません
トークンの有効期限
接続トークンには有効期限があり、期限切れ時は再びブラウザSSOが走ります。
(このとき再認証すれば、またしばらくブラウザ無しで動きます。)
補足
有効期限の長さは、IdPやSSO設定側のポリシーに依存します。
「すぐ切れて困る」場合は、Snowflake管理者/IdP管理者に相談するのが現実的です。
参考: SSO認証とトークンの有効期限
📊 設定前後の比較(体感の違い)
設定前(接続キャッシュなし)
# 毎回ブラウザが開く
$ dbt debug
→ ブラウザ起動 → 認証 → 完了(約10秒)
$ dbt run
→ ブラウザ起動 → 認証 → 完了(約10秒)
$ dbt test
→ ブラウザ起動 → 認証 → 完了(約10秒)
1日に10回dbtコマンドを実行すると…
- ブラウザ起動:10回
- 待ち時間:約100秒
設定後(接続キャッシュあり)
# 初回のみブラウザが開く
$ dbt debug
→ ブラウザ起動 → 認証 → 完了(約10秒)
# 2回目以降はブラウザ不要(有効期限内)
$ dbt run
→ ブラウザ無しで実行
$ dbt test
→ ブラウザ無しで実行
「地味な待ち」が消えるので、開発のテンポがかなり良くなります。
余談(今回のローカル環境側の設定を全てClaude Codeで設定)
Claude Codeで一発解決
以下のように Claude Code に投げかけて全てClaude Codeにお任せして解決させました。
Claude Codeへの投げかけSnowflake側でIDトークンのキャッシュの有効化の設定がされたので、
snowflake-connector-pythonのインストールをすればいけそうなのですが、対応をお願いできますか。

Claude Code に投げかけることでパッケージのインストールや設定ファイルの更新などの作業を自動で実施してくれます
🛠️ トラブルシューティング
2回目以降もブラウザが開く(チェックリスト)

図4: よくある原因は「Snowflake側未設定」「keyring未導入」「Linux/WSLでキーストアが使えない」です。
-
Snowflake側の設定確認
SHOW PARAMETERS LIKE 'ALLOW_ID_TOKEN' IN ACCOUNT;value=trueになっていなければ、ステップ1を見直してください。 -
ローカルでkeyringが入っているか
python -m pip show keyring -
Linux/WSLでOSキーストアが使えるか
- GUI無し/DBus無しだと、Secret Serviceが使えずキャッシュできない場合があります
- Ubuntu系なら
gnome-keyring等が必要になることがあります
keyringのインストールに失敗する(Linux)
ビルド系の依存が足りないことが多いです。
sudo apt update
sudo apt install -y build-essential python3-dev libdbus-1-dev libsecret-1-dev
python -m pip install --upgrade "snowflake-connector-python[secure-local-storage]"
😌 まとめ
-
externalbrowserSSOは便利だが、接続のたびにブラウザが起動しがち - Snowflakeの 接続キャッシュ(IDトークンキャッシュ) を有効化すると、2回目以降ブラウザ不要になる
- 設定は2ステップだけ
- Snowflake側:
ALTER ACCOUNT SET ALLOW_ID_TOKEN = TRUE; - ローカル:
pip install "snowflake-connector-python[secure-local-storage]"
- Snowflake側:
- トークンはOSのキーストアに保存され、期限切れ時は再認証
開発のテンポが一段上がるので、externalbrowser 勢にはかなりおすすめです。
🔗 参考リンク
Snowflake公式ドキュメント
- Using an authenticator with external browser for SSO
https://docs.snowflake.com/en/user-guide/admin-security-fed-auth-use#using-an-authenticator-with-external-browser-for-sso - ALLOW_ID_TOKEN Parameter
https://docs.snowflake.com/en/sql-reference/parameters#allow-id-token
snowflake-connector-python
- GitHub Repository
https://github.com/snowflakedb/snowflake-connector-python - Secure Local Storage
https://docs.snowflake.com/en/developer-guide/python-connector/python-connector-example#using-a-configuration-file
keyring
- keyring Documentation
https://pypi.org/project/keyring/
Discussion