サーバーへの認証¶
このトピックでは、Snowflake SQL API を使用するときにサーバーに対して認証する方法について説明します。
リクエストを送信する場合、リクエストには認証情報が含まれている必要があります。次のセクションでは、この情報をリクエストに追加する方法について説明します。
OAuth の使用¶
OAuth を使用するには、次のステップに従います。
認証のために OAuth を設定します。
OAuth を設定して OAuth トークンを取得する方法の詳細については、 OAuth の紹介 をご参照ください。
生成された Snowflake CLI トークンを使用してSnowflakeに接続できることを確認するために、 OAuth を使用します。
Linuxおよび MacOS システムの場合
Windowsシステムの場合
送信する各 API リクエストで、次のヘッダーを設定します。
Authorization: Bearer oauth_tokenここで、
oauth_tokenは生成された OAuth トークンです。(オプション)
X-Snowflake-Authorization-Token-Type: OAUTHX-Snowflake-Authorization-Token-Typeヘッダーを省略した場合、Snowflakeはトークンを調べてトークンのタイプを決定します。このヘッダーはオプションですが、このヘッダーを指定することもできます。ヘッダーは以下の値のいずれかにセットできます。
KEYPAIR_JWT(キーペア認証用)OAUTH( OAuthの場合)PROGRAMMATIC_ACCESS_TOKEN(プログラムアクセストークン 用)
キーペア認証の使用¶
キーペア認証を使用するには、次のステップに従います。
キーペア認証を設定します。
このプロセスの一環として、次を実行する必要があります。
公開キーと秘密キーのペアを生成します。生成された秘密キーはファイル内にある必要があります(例:
rsa_key.p8という名前)。公開キーをSnowflakeユーザーに割り当てます。ユーザーにキーを割り当てたら、 DESCRIBE USER コマンドを実行します。出力では、
RSA_PUBLIC_KEY_FPプロパティは、ユーザーに割り当てられた公開キーのフィンガープリントに設定する必要があります。
キーペアを生成してユーザーにキーを割り当てる方法については、 キーペア認証とキーペアローテーション をご参照ください。フィンガープリントを作成して JWT トークンを生成する言語固有の例については、以下をご参照ください。
生成された秘密キーを使用して Snowflake CLI Snowflake に接続 :ref:`<label-snowcli_private_key> できることを確認するために、 ` を使用します。
このコマンドは、接続を完了するために秘密キーのパスフレーズをリクエストします。
PRIVATE_KEY_PASSPHRASE環境変数にパスフレーズを指定すると、プロンプトを回避できます。アプリケーションコード内で、
ユーザーの公開キーのフィンガープリント(SHA-256ハッシュ)を生成します。フィンガープリントの前に
SHA256:を付けます。例:SHA256:hashSQL DESCRIBE USER コマンドを実行して、 RSA_PUBLIC_KEY_FP プロパティから値を取得することもできます。
ペイロードに次のフィールドを含む JSON Webトークン(JWT) を生成します。
フィールド
説明
例
issJWT の発行者。次の値に設定します。
account_identifier.user.SHA256:public_key_fingerprint条件:
account_identifierは、Snowflakeの使用する アカウント識別子 です。アカウントロケーター を使用している場合は、アカウントロケーターからリージョン情報を除外します。
userは、Snowflakeユーザー名です。SHA256:public_key_fingerprintは、前のステップで生成したフィンガープリントです。
注釈
account_identifierとuserの値は、すべて大文字を使用する必要があります。アカウント ID にピリオド(.)が含まれている場合は、ハイフン(-)に置き換える必要があります。アカウント識別子にピリオドが含まれていると JWT が無効になるためです。MYORGANIZATION-MYACCOUNT.MYUSER.SHA256:public_key_fingerprintsubJWT の件名。次の値に設定します。
account_identifier.userMYORGANIZATION-MYACCOUNT.MYUSERiatJWT の発行時刻(UTC)。値を秒またはミリ秒の現在の時間値に設定します。
1615370644(秒) .1615370644000(ミリ秒)expJWT の有効期限(UTC)。 値は、秒またはミリ秒で指定できます。
注釈
JWT は、より長い有効期限を指定した場合でも、トークンが発行されてから最大1時間まで有効です。
1615374184(秒) .1615374184000(ミリ秒)送信する各 API リクエストで、次のヘッダーを設定します。
Authorization: Bearer JWTJWTは、生成したトークンです。(オプション)
X-Snowflake-Authorization-Token-Type: KEYPAIR_JWTX-Snowflake-Authorization-Token-Typeヘッダーを省略した場合、Snowflakeはトークンを調べてトークンのタイプを決定します。このヘッダーはオプションですが、このヘッダーを指定することもできます。ヘッダーは以下の値のいずれかにセットできます。
KEYPAIR_JWT(キーペア認証用)OAUTH( OAuthの場合)PROGRAMMATIC_ACCESS_TOKEN(プログラムアクセストークン 用)
Pythonの例¶
次のセクションでは、Pythonを使用して JWT とフィンガープリントを生成する方法について説明します。
Python で JWT を生成する例については、 sql-api-generate-jwt.py をご参照ください。sql-api-generate-jwt.py の例では、次のコマンドを実行してインストールできる PyJWT モジュール を使用しています。
Pythonでの JWT の生成¶
コードの次のセクションは、 JWT を生成する方法を示しています。完全な例については、 sql-api-generate-jwt.py をご参照ください。
注釈
この例は、参照としてのみ使用することを目的としています。このコードは、実稼働アプリケーションまたは環境では使用しないでください。
Pythonでのフィンガープリントの生成¶
コードの次のセクションでは、フィンガープリントを生成する方法を示します。完全な例については、 sql-api-generate-jwt.py をご参照ください。
Snowflake CLI の例¶
Snowflake CLI codenowrap:snow connection generate-jwt コマンドを使って、キーペア認証用のJWT を生成できます。詳細については、 snow connection generate-jwt をご参照ください。
この例では、 rsa_key.p8 の秘密キーを使って、アカウント TEST とユーザー JDOE のトークンを生成しています。
このコマンドは、接続を完了するために秘密キーのパスフレーズをリクエストします。PRIVATE_KEY_PASSPHRASE 環境変数にパスフレーズを指定すると、プロンプトを回避できます。
Javaの例¶
Javaで JWT を生成する例については、 SimpleStatementsApi.java をご参照ください。
注釈
この例は、参照としてのみ使用することを目的としています。このコードは、実稼働アプリケーションまたは環境では使用しないでください。
この例では、次のサードパーティライブラリを使用しています。
Swagger Codegen: REST APIsとアプリケーションの開発に役立つオープンソースライブラリ。
Auth0: 認証と JWT トークンの生成にJava APIs を提供。
Node.jsの例¶
Node.jsで JWT を生成する例については、 sql-api-generate-jwt.js をご参照ください。
注釈
この例は、参照としてのみ使用することを目的としています。このコードは、実稼働アプリケーションまたは環境では使用しないでください。