キーペア認証: トラブルシューティング

このトピックは、 キーペア認証 でSnowflakeに接続する際に発生するエラーのトラブルシューティングに役立ちます。 JWT token is invalid を含むエラーに焦点を当てています。

エラーを見つける

トラブルシューティングの前に、問題により JWT token is invalid エラーが発生しているかどうかを判断する必要があります。

Snowflakeクライアントが対話型インタフェースがないドライバーまたはコネクタの場合、ログを使用して接続エラーを検査します。

  1. Snowflakeコネクタまたはドライバーのログを有効にします。詳細については、 Snowflakeドライバーとコネクタのログファイルを生成する (Snowflake ナレッジベースの記事)をご参照ください。

  2. 文字列 JWT token is invalid を含むエラーをチェックします。

    例えば、Snowflake JDBC ドライバーを使用しているクライアントがキーペア認証を使用しようとすると、次のようなエラーが発生する可能性があります。

    yyyy-mm-dd hh:mm:ss.nnn n.s.c.jdbc.SnowflakeSQLException FINE <init>:40 -
    Snowflake exception: JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a],
    sqlState:08001, vendorCode:390,144, queryId:
    

追加情報の取得

JWT token is invalid エラーには、エラーの直後の角括弧内に表示される UUID が含まれます(例えば、 JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a])。エラーの UUID をSnowflake管理者に提供して、エラーに関する詳細情報を入手できるようにする必要があります。

管理者は SYSTEM$GET_LOGIN_FAILURE_DETAILS 関数を使用して、エラーの詳細を取得します。例えば、エラー JWT token is invalid. [0ce9eb56-821d-4ca9-a774-04ae89a0cf5a] に関する追加情報を入手するために、 ACCOUNTADIMN ロールを持つユーザーは次を実行できます。

SELECT JSON_EXTRACT_PATH_TEXT(SYSTEM$GET_LOGIN_FAILURE_DETAILS('0ce9eb56-821d-4ca9-a774-04ae89a0cf5a'), 'errorCode');
Copy

JSON_EXTRACT_PATH_TEXT 関数は、 SYSTEM$GET_LOGIN_FAILURE_DETAILS 関数の JSON 出力を解析してエラーコードとエラーを取得します。

エラーのリスト

SYSTEM$GET_LOGIN_FAILURE_DETAILS 関数の出力は、次のエラーコードとエラーの組み合わせのいずれかです。

エラーコード

エラー

説明

390144

JWT_TOKEN_INVALID

JWT トークンには一般的な問題があります。考えられる解決策については、 一般的なエラーと解決策 をご参照ください。

394300

JWT_TOKEN_INVALID_USER_IN_ISSUER

発行者に指定されたユーザー名がSnowflakeアカウントに存在しません。考えられる解決策については、 一般的なエラーと解決策 をご参照ください。

394301

JWT_TOKEN_MISSING_ISSUE_OR_EXPIRATION_TIME

JWT トークンに発行時間や有効期限が含まれていません。

394302

JWT_TOKEN_INVALID_ISSUE_TIME

JWT トークンが発行時刻から60秒以上経ってからSnowflakeによって受信されました。考えられる解決策については、 一般的なエラーと解決策 をご参照ください。

394303

JWT_TOKEN_INVALID_EXPIRATION_TIME

JWT トークンの有効期限が切れています。

394304

JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH

発行者に指定された公開キーのフィンガープリントと、Snowflakeでユーザー用に保存された公開キーのフィンガープリントの間に不一致があります。考えられる解決策については、 一般的なエラーと解決策 をご参照ください。

394305

JWT_TOKEN_INVALID_ALGORITHM

JWT トークンが RS256 アルゴリズムで署名されていませんでした。

394306

JWT_TOKEN_INVALID_SIGNATURE

Snowflake は JWT トークンが提供する署名を検証できませんでした。提供された公開キーと対になっていない秘密キーで JWT が署名された可能性があります。JWT 署名が壊れているか、変更されている可能性もあります。

一般的なエラーと解決策

キーペア認証に関連する最も一般的なエラーは次のとおりです。

これらのエラーのトラブルシューティングには、次の説明と解決策を使用します。

JWT_TOKEN_INVALID

説明:

JWT トークンには一般的な問題があります。

解決策#1:

トークン自体が不正である可能性があります。Snowflakeにアクセスするアプリケーションが有効な JWT トークンを生成していることを再確認します。

解決策#2:

クライアント(ドライバー、コネクタ、またはリクエスト URL)が正しい アカウント識別子 を使用して Snowflakeアカウントに接続していることを再確認します。また、この値が iss クレームのアカウント識別子と一致していることも確認する必要があります。

解決策#3:

sub クレームのアカウント識別子とユーザー名が iss クレームの対応する値と一致していることを再確認します。

解決策#4:

iss クレームが SHA256 を署名アルゴリズムとして指定していることを再確認します。

JWT_TOKEN_INVALID_PUBLIC_KEY_FINGERPRINT_MISMATCH

説明:

発行者に指定された公開キーのフィンガープリントと、Snowflakeでユーザー用に保存された公開キーのフィンガープリントの間に不一致があります。

解決策:

JWT トークンの公開キーのフィンガープリントを取得し、Snowflakeでユーザーに関連付けられたフィンガープリントと比較します。

JWT トークンのフィンガープリントを取得する1つの方法は、 ドライバーのログの DEBUG を有効にして、 ログインしてみます。 <ハッシュ> が公開キーのフィンガープリントであるパターン SHA256:<ハッシュ> を探します。

Snowflakeでユーザーに関連付けられた公開キーのフィンガープリントを取得するには、 DESCRIBE USER コマンドを実行します。公開キーのフィンガープリントは RSA_PUBLIC_KEY_FP または RSA_PUBLIC_KEY_2_FP プロパティのいずれかにあります。ユーザーに公開キーのフィンガープリントがない場合は、 ALTER USER コマンドを実行してこれらのプロパティを設定します。

JWT_TOKEN_INVALID_USER_IN_ISSUER

説明:

発行者に指定されたユーザー名がSnowflakeアカウントに存在しません。

解決策:

Snowflakeクライアントで設定したユーザー名は、Snowflakeユーザーの NAME ではなく LOGIN_NAME と一致する必要があります。これらの値が異なることもあります。

DESCRIBE USER コマンドを実行し、 LOGIN_NAME プロパティの値がSnowflakeクライアントが接続に使用しているユーザー名と一致することを確認します。

JWT_TOKEN_INVALID_ISSUE_TIME

説明:

JWT トークンが発行時刻から60秒以上経ってからSnowflakeによって受信されました。

解決策#1:

ドライバが動作しているホストをチェックし、 NTP に同期しており、クロックスキューがないことを確認します。サーバーにクロックスキューがある場合、実際にはそうではない場合に、Snowflakeはトークンの発行時刻から60秒以上経過していると判断することがあります。例えば、クライアントマシンが30秒遅れていて、トークンがSnowflakeに到達するのに45秒かかった場合、Snowflakeは45秒ではなく JWT トークンが発行されてから75秒経過したと判断します。

クライアントマシンのクロックが正確かどうかは、 NTP サーバーと比較することで確認できます。例えば、 NIST Internet Time Servers を使用してクライアントマシンを同期できいます。ホストのクロックをチェックして NTP サーバーに同期する方法については、オペレーティングシステムの管理者ガイドを参照するか、システム管理者にお問い合わせください。

解決策#2:

OS 固有の監視ツールを使用して、 CPU/ディスクの使用量が極端に多いときにエラーが発生するかどうかを判断します。

解決策#3:

JWT トークンがトークンの発行時刻から60秒以上経過してからSnowflakeによって処理される原因となっている過剰なネットワーク遅延があるかどうかを確認します。

接続性診断ツールを使用してネットワーク遅延を測定する場合は、宛先を account_identifier.snowflakecomputing.com に設定します。例えば、Snowflakeクライアントがアカウント識別子として myorg-account1 を使用している場合、宛先を myorg-account1.snowflakecomputing.com に設定します。