接続の認証¶
Snowflakeに対する認証には、次のいずれかのオプションを使用できます。
パスワードベースの認証
このメソッドを使用するには、接続を確立するときに
passwordオプションを設定します。ウェブブラウザーを介した Single sign-on (SSO)
Oktaを介した Native SSO
さらに、Snowflake Node.js ドライバーは、 SSO および MFA トークンをキャッシュする機能をサポートしています。詳細については、 トークンキャッシング認証 をご参照ください。
ウェブブラウザーを介したシングルサインオン(SSO)を使用する¶
シングルサインオン(SSO)を使用するようにSnowflakeを構成 している場合は、認証にブラウザーベースの SSO を使用するようにクライアントアプリケーションを構成できます。
アプリケーションコード内で、
authenticatorオプションをEXTERNALBROWSERに設定します。接続を確立するには、
connectメソッドではなくconnectAsyncメソッドを呼び出します。
例:
認証にブラウザーベースの SSO を使用する方法の詳細については、 ブラウザーベース SSO をご参照ください。
Oktaを介したネイティブ SSO を使用する¶
Oktaを介して シングルサインオン(SSO)を使用するようにSnowflakeを構成 している場合は、Oktaを介してネイティブ SSO 認証を使用するようにクライアントアプリケーションを構成できます。
アプリケーションコード内で、
次のオプションを設定します。
authenticatorオプションをOktaアカウントのOkta URL エンドポイントに設定します(例:https://<Oktaアカウント名>.okta.com)。usernameおよびpasswordオプションをIDプロバイダー(IdP)のユーザー名とパスワードに設定します。
接続を確立するには、
connectメソッドではなくconnectAsyncメソッドを呼び出します。
例:
Oktaを介したネイティブ SSO 認証の使用の詳細については、 ネイティブ SSO --- Oktaのみ をご参照ください。
キーペア認証とキーペアローテーションを使用する¶
ドライバーは、キーペア認証とキーローテーションをサポートします。キーペア認証とキーローテーションを使用するには、次の手順に従います。
キーペア認証とキーペアローテーション で説明されているように、キーペア認証を構成します。
アプリケーションコード内で、
authenticatorオプションをSNOWFLAKE_JWTに設定します。秘密キーを使用して、次のいずれかの方法で認証します。
privateKeyオプションを秘密キーに設定します。privateKeyPathオプションを秘密キーファイルへのパスに設定します。ファイルが暗号化されている場合は、
privateKeyPassオプションをパスフレーズに設定して秘密キーを復号化する必要もあります。
次の例では、ファイルから秘密キーをロードし、
privateKeyオプションを秘密キーに設定します。次の例では、
privateKeyPathオプションを暗号化された秘密キーファイルに設定し、privateKeyPassオプションを秘密キーの復号化に使用されるパスフレーズに設定します。
OAuth を使用する¶
OAuth を使用して接続するには、 authenticator オプションを OAUTH に設定し、 token オプションを OAuth アクセストークンに設定します。例:
詳細については、 クライアント、ドライバー、およびコネクタ をご参照ください。
OAuth 2.0クライアント認証情報フローを使用する¶
OAuth 2.0クライアント認証情報フローは、Python用Snowflake Connectorがバックエンドサービスに接続するような、マシン間(M2M)認証のためのセキュアな方法を提供します。OAuth 2.0認証コードフローとは異なり、このメソッドはユーザー固有のデータに依存しません。
OAuth 2.0 クライアント認証フローを有効にするには:
codenowrap:
authenticator接続パラメーターをoauth_client_credentialsに設定します。以下の OAuth 接続パラメーターをセットします。
oauthClientId:Snowflake統合(Snowflake セキュリティ統合メタデータ)用にプロバイダーから提供されたclient idの値。oauthClientSecret: IDプロバイダーがSnowflake統合用に提供するclient secretの値(Snowflakeセキュリティ統合メタデータ)oauthTokenRequestUrl: ドライバーにアクセストークンを供給するIDプロバイダーエンドポイント。oauthScope: IDプロバイダーの認可リクエストでリクエストされたスコープ。デフォルトでは、ロールから派生します。複数のスコープが必要な場合、値はスペースで区切られた複数のスコープのリストでなければなりません。
ワークロードIDフェデレーションで認証(WIF)¶
ワークロードIDフェデレーション は、Snowflakeのサービス間の認証方法を提供します。この方法により、アプリケーション、サービス、コンテナは、 AWSIAM、Microsoft Entra ID またはGoogle CloudサービスアカウントのようなクラウドプロバイダーのネイティブIDシステムを活用して、Snowflakeで認証することができます。このアプローチでは、長期間有効な認証情報を管理する必要がなくなり、外部 OAuth のような他の方法と比較して、認証情報の取得が簡素化されます。Snowflakeコネクタは、プラットフォームのIDプロバイダーから有効期間が短い認証情報を自動的に取得するように設計されています。
ワークロードIDフェデレーション認証コードを有効にするには、以下を実行します。
Set the
authenticatorconnection parameter toWORKLOAD_IDENTITY.codenowrap:
workloadIdentityProvider`接続パラメーターをプラットフォームに応じてcodenowrap: `AWS、AZURE、GCPまたは:codenowrap:OIDCに設定します。OpenID 接続(OIDC)の場合、
token接続パラメーターを指定します。
MFA パスコードを使用する¶
注釈
この機能を使用するには、Snowflake Node.jsドライバーのバージョン1.13.1以降が必要です。
Duoからのプッシュ通知など外部からの確認を待つ代わりに、多要素認証(MFA)のパスコードを渡すことでSnowflakeに接続できます。ドライバーには、 MFA パスコードを指定する以下の方法があります。
passcodeInPasswordオプションをtrueに設定し、以下のようにパスワード文字列の一部としてパスコードを含めます。passcodeオプションをパスコードの値に設定し、以下のようにパスワードとパスコードを別々に指定します。この方法を使うには、
passcodeInPasswordオプションがfalse(デフォルト値)になっていることを確認してください。
注釈
passcodeInPassword オプションを有効にし、 passcode オプションを設定すると、 passcodeInPassword オプションが優先されます。
これらのオプションの詳細については、 passcode をご参照ください。
トークンキャッシング認証¶
Snowflake Node.js ドライバーは、 SSO と MFA トークンをキャッシュする機能を提供します。
重要
トークン・キャッシュはデフォルトで無効になっています。トークンをローカルにキャッシュすると、セキュリティ・リスクが高まります。トークンは4時間失効しないため、ローカル・システムでトークンにアクセスした人は、トークンの有効期限が自然に切れるまで、トークンの所有者になりすますことができます。従って、トークンをキャッシュすることを選択する前に、以下を考慮します。
潜在的なリスクを認識し、留意すること。
社内のセキュリティおよびコンプライアンス担当者に相談し、組織のポリシーがトークン・キャッシュを許可しているかどうかを確認してください。
デフォルトの設定では、キャッシュされたトークンを保存するファイルは
$HOMEディレクトリ、または構成したパスに書き込まれます。あなたは、指定されたディレクトリ内のデータのセキュリティに責任を負います。ファイル所有者のみがアクセスできるように、ファイルに適切なパーミッションが設定されていることを確認する責任があります。
キャッシュ SSO (ID) トークン¶
外部ブラウザー認証 で Snowflake に接続すると、リクエストからSSO(ID)トークンが生成されます。クライアント・ドライバー側での SSO (ID) トークンのキャッシュは、サーバーがキャッシュを許可している場合にのみ機能します。Snowflakeに接続するクライアントアプリケーションでの SSO の使用 で説明されているように、 SQL ステートメントを実行することで、 SSO トークンのキャッシュをサーバー側で有効にすることができます。
Node.jsドライバーで SSO トークンキャッシュを使用するには、 snowflake.createConnection() 呼び出しで以下のオプションを設定します。
authenticatorをEXTERNALBROWSERに設定します。詳細については、 認証オプション をご参照ください。clientStoreTemporaryCredentialをtrueに設定します。
有効にすると、ドライバーはトークンの有効期限が切れるまで、キャッシュされたトークンをその後の接続に使用します。ドライバーが再度接続を認証するためにブラウザを開いた場合、ドライバーはローカル・認証情報・ストレージでトークン情報を見つけることができないか、トークンの有効期限が切れています。
MFA トークンをキャッシュする¶
USERNAME_PASSWORD_MFA 認証で Snowflake に接続すると、リクエストからMFA トークンが生成されます。クライアント・ドライバー側での MFA トークンのキャッシュは、サーバーがキャッシュを許可している場合にのみ機能します。MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える --- オプション で説明されているように、 SQL ステートメントを実行することで、 MFA トークンのキャッシュをサーバー側で有効にすることができます。
Node.jsドライバーで MFA トークンキャッシュを使用するには、 snowflake.createConnection() 呼び出しで以下のオプションを設定します。
authenticatorをUSERNAME_PASSWORD_MFAに設定します。詳細については、 認証オプション をご参照ください。clientRequestMFATokenをtrueに設定します。
有効にすると、ドライバーはトークンの有効期限が切れるまで、キャッシュされたトークンをその後の接続に使用します。ドライバーが MFA プロバイダーに再度アクセスすると、ドライバーがローカルの認証情報ストレージでトークン情報を見つけられないか、トークンの有効期限が切れています。
デフォルトの認証情報マネージャーを使用する¶
Snowflake Node.jsドライバーは、認証情報マネージャーと認証情報ストレージを提供します。デフォルトでは、ドライバーはキャッシュされたトークンを $HOME ディレクトリに保存します。現在のところ、ドライバーはトークンキャッシュ connectAsync() 関数でのみサポートしています。
キャッシュされたトークンを別の場所に格納する場合は、 snowflake.createConnection() 関数の credentialCacheDir パラメーターで希望の場所を指定できます。以下のように、相対パスまたは絶対パスを指定できます。
相対サブパス
絶対パス
credentialCacheDir を設定しない場合、Snowflake Node.jsドライバーは $HOME/temporary_credential.json を使用して認証情報を保存します。
カスタムの認証情報マネージャーを使用する¶
Snowflake node.js ドライバーは、ローカルの JSON ファイルを使用して認証情報を格納する、デフォルトの認証情報マネージャーを提供します。認証情報・マネージャーが明示的に設定されていない場合、ドライバーはこのデフォルトの認証情報マネージャーを使用します。
デフォルトの認証情報マネージャーを使用したくない場合は、カスタムの認証情報・マネージャーを作成することができます。カスタム・認証情報マネージャーは、以下の要件を満たす必要があります。
read、writeとremove関数を最低限含んでいる必要があります。他の関数を含めることもできます。objectデータ型である必要があります。
以下の例は、最小限のカスタム・認証情報マネージャーのテンプレートを示しています。
カスタム認証情報マネージャーが完成したら、 snowflake.configure() メソッドで、ドライバー用に設定することができます。この例は MFA トークンを反映したものですが、 SSO トークン用のカスタム認証情報マネージャーを作成することもできます。
Snowflake Node.js ドライバーは、カスタムの認証情報マネージャーを実装して使用するためのプラグインのようなインターフェイスを提供しますが、Snowflake はカスタマーのカスタムの認証情報マネージャーの作成、実装、サポートに責任を負いません。