外部 OAuth の概要

このトピックでは、OAuth 2.0を使用してSnowflakeにアクセスする外部 OAuth サーバーを構成する方法について説明します。

外部 OAuth は顧客の OAuth 2.0サーバーを統合してシームレスな SSO エクスペリエンスを提供し、Snowflakeへの外部クライアントアクセスを可能にします。

Snowflake は、次の外部認証サーバー、カスタムクライアント、およびパートナーアプリケーションをサポートしています。

Snowflakeロールへの必要な OAuth 2.0スコープ マッピングを含む、組織の外部 OAuth サーバーを構成した後、ユーザーは追加の認証または認証要素またはメソッドを入力することなく、Snowflakeに安全かつプログラムで接続できます。Snowflakeデータへのユーザーのアクセスは、ユーザーのロールと、セッションのアクセストークンに統合されるロールの両方に依存しています。詳細については、 スコープ (このトピック内)をご参照ください。

ユースケースおよび利点

  1. Snowflakeは、トークンの発行を専用の認証サーバーに委任して、 OAuth クライアントとユーザーが適切に認証されるようにします。その結果、Snowflakeに発行されるトークンの集中管理を実現できます。

  2. お客様は、認証(例:多要素、サブネット、生体認証など)および許可(例:許可なし、マネージャー許可が必要)などのポリシーを認証サーバーに統合できます。その結果、ユーザーにチャレンジを発行することにより、セキュリティが強化され、より堅牢なデータ保護を実現できます。ユーザーがポリシーチャレンジに合格しない場合、Snowflakeセッションはインスタンス化されず、Snowflakeデータへのアクセスは発生しません。

  3. Snowflakeにアクセスできるプログラムクライアント、および外部 OAuth からのみSnowflakeセッションを開始するユーザーの場合、Snowflakeにおける追加の認証構成(パスワードの設定)は必要ありません。その結果、プログラムアクセスにのみ使用するサービスアカウントまたはユーザーは、外部 OAuth 構成サービスを通過するときにのみSnowflakeデータを使用できます。

  4. クライアントはブラウザーにアクセスせずにSnowflakeに対して認証できるため、外部 OAuth サーバーとの統合が容易になります。

  5. Snowflakeの外部 OAuth サーバーとの統合はクラウドに依存しません。

    • 認証サーバーがクラウドプロバイダーのクラウドに存在するか、認証サーバーがオンプレミスであるかは関係ありません。その結果顧客は、Snowflakeと対話するための認証サーバーの構成に関して多くのオプションを利用できます。

一般的なワークフロー

サポートされている各IDプロバイダーについて、外部 OAuth 認証サーバーに関連する OAuth のワークフローは次のように要約できます。最初のステップは1回だけ実行され、残りのステップはSnowflakeデータへのアクセス試行ごとに実行されることに注意してください。

ワークフローの概要
  1. 環境内の外部 OAuth 認証サーバーとSnowflakeのセキュリティ統合を構成して、信頼を確立します。、

  2. ユーザーは、ビジネスインテリジェンスアプリケーションを介してSnowflakeデータにアクセスしようとし、アプリケーションはユーザーを確認しようとします。

  3. 確認時に認証サーバーは、 JSON ウェブトークン(つまり、 OAuth トークン)をクライアントアプリケーションに送信します。

  4. Snowflakeドライバーは、 OAuth トークンを使用して接続文字列をSnowflakeに渡します。

  5. Snowflakeは OAuth トークンを検証します。

  6. Snowflakeはユーザー検索を実行します。

  7. 確認時にSnowflakeは、ユーザーのロールに基づいてSnowflakeのデータにアクセスするためのセッションをインスタンス化します。

スコープ

認証サーバーのスコープパラメーターは、アクセストークンによって許可される操作とロール、およびSnowflakeセッションのインスタンス化後にユーザーがアクセスできるものを制限します。

ACCOUNTADMIN、 ORGADMIN、および SECURITYADMIN のロールはデフォルトでブロックされていることに注意してください。これらロールを1つ以上使用する必要がある場合は、 ALTER ACCOUNT コマンドを使用して EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST アカウントパラメーターを FALSE に設定します。

  • Okta、 PingFederate、およびカスタムの場合は、次のテーブルのロールスコープパターンを使用します。

  • Azure AD については、 を参照してください。前提条件のステップ: Azure AD で OAuth フローを決定する

  • 外部 OAuth サーバー内でのSnowflakeロールの管理を望まない場合は、トークンのスコープ属性で SESSION:ROLE-ANY の静的な値を渡します。

次のテーブルは、外部 OAuth スコープをまとめたものです。 スコープを定義しないと、Snowflakeへの接続試行は失敗 します。

スコープ/ロール接続パラメーター

説明

session:role-any

Snowflakeの ANY のロールにマップされます。

Snowflakeにおけるユーザーの既定のロールが望ましい場合は、このスコープを使用します。

特定の外部 OAuth プロバイダーの ANY ロールを有効にするには、 external_oauth_any_role_mode セキュリティ統合パラメーターを構成する必要があります。構成の詳細については、 OktaAzure ADPingFederate、または カスタム の ANY ロールセクションをご参照ください。

Power BI からSnowflakeへの統合 では、 PowerBI ユーザーはこのスコープを使用したロールの切り替えができないことに注意してください。

session:role:custom_role

Snowflakeのカスタムロールにマップします。たとえば、カスタムロールが ANALYST の場合、スコープは session:role:analyst です。

session:role:public

Snowflakeの PUBLIC ロールにマップします。

外部 OAuth でのセカンダリロールの使用

Snowflakeは、外部 OAuth での セカンダリロール の使用をサポートしています。

Snowflake OAuth は、セッション中のロールのセカンダリロールへの切り替えをサポートしていません。

詳細については、次をご参照ください。

外部 OAuth サポートの構成

Snowflake は、外部 OAuth をサポートするパートナーアプリケーションとカスタムクライアントの使用をサポートしています。

パートナーアプリケーションまたはカスタムクライアントを構成する必要がある場合は、以下のリストをご参照ください。

OAuth およびセカンダリロール

Snowflakeは、外部OAuthにおける セカンダリロール の使用をサポートしています。

詳細については、 外部 OAuth でのセカンダリロールの使用 をご参照ください。

エラーコード

外部 OAuth に関連するエラーコードの説明については、以下の表をご参照ください。

エラーコード

エラー

説明

390318

OAUTH_ACCESS_TOKEN_EXPIRED

OAuth アクセストークンの有効期限が切れています。 {0}

390144

JWT_TOKEN_INVALID

JWT トークンが無効です。

トラブルシューティング

  • SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN 関数を使用して、外部 OAuth アクセストークンが有効であるか、再生成する必要があるかを判断します。

  • 外部 OAuth ログイン試行の失敗に関連するエラーメッセージが表示され、エラーメッセージに UUID が含まれている場合は、ロールに MONITOR 権限が割り当てられている管理者に、エラーメッセージからの UUID を使用して、エラーメッセージからエラーの詳細な説明を SYSTEM$GET_LOGIN_FAILURE_DETAILS 関数を使用して取得するように依頼できます。