Zscaler環境のWSLからSnowSQLを使ってSSO認証でSnowflakeに接続する方法
はじめに
はじめまして。データマネジメント統括部の田辺と申します。
2025年に入社し、現在(記事公開時点)2年目です。
業務でSnowflakeを使った開発・操作を自動化するために、AIコーディングエージェント(Codex)の活用を検討していました。
検討の中で、WSL上のSnowSQLから、Zscaler環境下でSSO認証付きでSnowflakeに接続しようとしたところ、SSL証明書エラーとブラウザSSO認証の失敗という2つの壁にぶつかりました。本記事では、それぞれの原因と解決手順を紹介します。
こんな方に向けて書いています
-
企業ネットワーク(Zscalerなど)の環境で、WSL上でSnowSQLを使ったSnowflake接続に行き詰まっている
-
SSL証明書エラーの原因と対処がわからない
-
WSLからブラウザ認証(SSO)がうまく動かない
前提の整理
今回の背景
Codex CLIの公式情報を確認したところ、macOSとLinuxが正式サポートで、Windowsは実験的対応とされていたため、今回はWindows上でLinux環境を扱えるWSLを利用しました。
なお、業務環境の制約としてSnowflakeへのログインにはSSO必須です。IDパスワードによる直接ログインは使用できないため、ブラウザ経由のSSO認証(ExternalBrowser)を前提にしています。
用語説明
WSL(Windows Subsystem for Linux):Windows上でLinux環境を動かす仕組みです。重要なのは、WindowsとWSLは別の空間である点です。証明書ストア・ブラウザ・環境変数はそれぞれ独立して存在しており、Windows側の設定がWSL側に自動で引き継がれるわけではありません。
SnowSQL:SnowflakeのCLIクライアントです。ターミナルからSQLを実行したり、接続設定をファイルで管理できます。
Zscaler Internet Access(ZIA):ZIAは、インターネットやSaaSへのアクセスを保護するクラウドネイティブなセキュリティサービスです。URLフィルタリング、通信の検査、脅威対策などの機能を提供します。また近年では、Web通信の多くがTLS/SSLで暗号化されていますが、SSLインスペクションによって暗号化通信の内容を可視化し、マルウェアや不正な通信を検知・制御することができます。
補足
Snowflake公式では、SnowSQLからSnowflake CLIへの移行が推奨されています。
SnowSQLは引き続き利用可能ですが、SnowflakeはSnowflake CLIをより新しいコマンドラインツールとして位置づけており、新機能の追加や機能拡張はSnowflake CLIが中心です。
本記事では、社内環境で実際に利用していたSnowSQL 1.4.5を前提に、Zscaler環境のWSLでSSO接続時に詰まった点と対処を紹介します。新規にCLI利用を始める場合は、Snowflake CLIの採用もあわせて検討してください。
環境の前提
-
OS:Windows 11
-
WSLディストリビューション:Ubuntu 24.04.4 LTS
-
SnowSQL:1.4.5
-
企業ネットワーク:ZIA導入済み、SSLインスペクション有効
ステップ① CA証明書を設定する(SSL証明書エラーの解消)
何が起きているか
SnowSQLを起動してSnowflakeに接続しようとすると、最初に以下のようなエラーが出ました。
SSL Certificate is invalid for <account>.snowflakecomputing.com.
...
250003 (n/a): Hit non-retryable SSL error ...
certificate verify failed
原因はZIAのSSLインスペクションです。ZIAはHTTPS通信を一度復号して内容を検査し、元のサーバー証明書の代わりにZscaler独自のCA証明書を使って再暗号化します。WSL側がそのZscaler CA証明書を信頼していないため、「信頼できない証明書」として弾かれSSLエラーになります。
Windows側では、社内標準の端末設定によりZscalerのCA証明書が信頼される状態になっていました。一方で、WSLは証明書ストアが独立しているため、同じ証明書を別途参照できるように設定する必要がありました。
解決手順
① ZscalerのCA証明書をWindowsからエクスポートする
今回の端末では、社内標準の設定により、ZscalerのCA証明書がWindowsの証明書ストアで信頼される状態になっていました。以下の手順でエクスポートします。
-
Win + R→certmgr.mscを実行 -
「信頼されたルート証明機関」→「証明書」を開く
-
Zscalerの名前がついた証明書を右クリック(
Zscaler Root CAなど、会社によって名前が異なる場合あり) -
「すべてのタスク」→「エクスポート」→ Base-64形式(.CER)で保存
- 保存先は
C:\Users\<ユーザー名>\直下にしておくと次の手順でコピーしやすい
- 保存先は
証明書の名前が不明な場合は、社内ITに確認するか
Zscalerで検索すると見つかります。
② WSL上の適切な場所に置く
WSLからはWindowsのCドライブに /mnt/c/ でアクセスできます。エクスポートしたファイルをWSL上にコピーします。
mkdir -p ~/certs
cp /mnt/c/Users/<ユーザー名>/zscaler.cer ~/certs/zscaler-ca.crt
③ SnowSQL起動時にCA証明書を渡す
REQUESTS_CA_BUNDLE 環境変数でZscaler CA証明書のパスを指定します。
export REQUESTS_CA_BUNDLE=~/certs/zscaler-ca.crt
毎回設定するのが面倒な場合は ~/.bashrc に追記して永続化できます。
echo 'export REQUESTS_CA_BUNDLE=~/certs/zscaler-ca.crt' >> ~/.bashrc
source ~/.bashrc
REQUESTS_CA_BUNDLE は、今回の WSL + SnowSQL + ZIA(SSLインスペクション有効) の構成において、SnowSQLが ZscalerのCA証明書を参照できるようにするために設定した環境変数です。
ステップ② ブラウザ認証(SSO)を設定する
何が起きているか
CA証明書の設定が終わり、再度Snowflakeへのログインを試みると、今度はブラウザ認証の段階で次のようなメッセージが表示されました。
We were unable to open a browser window for you, please open the url above manually then paste the URL you are redirected to into the terminal.
Enter the URL the SSO URL redirected you to:
Snowflakeの外部ブラウザ認証(externalbrowser)は、CLIがブラウザを起動し、SSO認証の完了後にその結果をCLI側へ戻す仕組みです。今回の環境では、まずWSLからWindows側のブラウザを起動できず、認証画面を開くことができませんでした。さらに、この問題を解消し、ブラウザ認証を実行できるようにした後も、認証後のリダイレクトがCLI側に戻らず、認証処理が途中で止まっていました。
また、ブラウザ側では認証後に Redirecting to Snowflake client in 1 seconds... のまま止まり、SnowSQL側に認証結果が返りませんでした。
解決手順
まず、WSLからWindowsブラウザを起動できるようにするため、BROWSER=wslviewを設定しました。
次に、認証後のリダイレクトがCLI側へ戻らない問題に対して、既存のXDG系設定が影響している可能性を考慮し、設定の参照先を分離するためにXDG_CONFIG_HOMEを設定しました。
-
BROWSER=wslview:WSLからWindows側のブラウザを起動するための設定 -
XDG_CONFIG_HOME=/tmp/wslu-config:wslviewの設定参照先を切り替えるための設定
sudo apt-get update
sudo apt-get install -y wslu
echo 'export BROWSER=wslview' >> ~/.bashrc
echo 'export XDG_CONFIG_HOME=/tmp/wslu-config' >> ~/.bashrc
source ~/.bashrc
ステップ③ 接続情報を設定して接続する
ここから先は必須ではありません。
WSL を何度も使う場合、
毎回アカウント名や接続情報を入力するのは多少手間がかかります。
そこで、入力を省略するための設定を行います。
configに接続情報を記載する
毎回オプションを付けずに済むよう、SnowSQLの設定ファイル(~/.snowsql/config)に接続情報を記載します。
# configがない場合、毎回オプションが必要
snowsql -a <アカウント名> -u <ユーザー名> --authenticator externalbrowser
configに書いておくことで、アカウント名やユーザー名、認証方式などのオプションを毎回指定せずに接続できるようになります。
[connections.myconn]
accountname = <アカウント名>
username = <ログイン名>
authenticator = externalbrowser
接続・SQL実行
# 接続確認
snowsql -c myconn
# SQLを直接渡す場合(AIエージェントなどから使う場合はこちら)
snowsql -c myconn -q "SELECT CURRENT_USER();"
接続に成功すると、以下のようにSnowSQLのプロンプトが表示されます。
$ snowsql -c myconn
* SnowSQL * v1.4.5
Type SQL statements or !help
SQLを直接実行した確認としては、select 1; まで通りました。
+---+
| 1 |
|---|
| 1 |
+---+
1 Row(s) produced.
今回の社内環境で必要だった設定を共有します
| 設定 | 内容 |
|---|---|
REQUESTS_CA_BUNDLE |
Zscaler CA証明書のパスを指定 |
BROWSER |
WSLからWindowsブラウザへ認証URLを渡す |
XDG_CONFIG_HOME |
wslview の設定置き場を切り替える |
学んだこと
-
WSLでは、Windows側で設定済みのものがそのまま使えるとは限らない
WindowsとWSLは証明書ストア、ブラウザ、環境変数などの扱いが分かれており、Windows側で問題なく認識できても、WSL側では別途確認が必要になる -
社内ネットワーク配下でCLIツールを使う場合は、論点を分けて切り分けることが重要
今回のような環境では、証明書、ブラウザ認証、接続設定の順に切り分けて確認すると、原因を整理しやすい -
SSO認証は「ブラウザを開けるか」と「認証結果をCLIへ戻せるか」を分けて考える必要がある
WSLでは、Windows側ブラウザを起動できても、その後の認証連携がそのまま成立するとは限らない
まとめ
Zscaler環境のWSLからSnowflakeのCLIツールに接続するまでの対応を整理すると、次の3点でした。
-
ステップ①:CA証明書を設定する
ZscalerのルートCA証明書をWSLに配置し、REQUESTS_CA_BUNDLEで参照する -
ステップ②:ブラウザ認証(SSO)を設定する
WSLからWindowsブラウザへ認証URLを渡せるようにする -
ステップ③:接続情報を設定して接続する
~/.snowsql/configに接続情報と認証方式を記載して接続する
今回の対応を通じて、WSLではWindows側の設定がそのまま使えるとは限らず、証明書、ブラウザ認証、環境変数を別々の論点として切り分けることが重要だと分かりました。
同じ環境で行き詰まっている方の参考になれば幸いです。
最後までご覧いただき、ありがとうございました!
この記事は執筆者個人の体験に基づくものです。試験や手順の詳細は環境・バージョンによって異なる場合があります。
NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。