外部 OAuth の概要¶
このトピックでは、OAuth 2.0を使用してSnowflakeにアクセスする外部 OAuth サーバーを構成する方法について説明します。
外部 OAuth は顧客の OAuth 2.0サーバーを統合してシームレスな SSO エクスペリエンスを提供し、Snowflakeへの外部クライアントアクセスを可能にします。
Snowflake は、次の外部認証サーバー、カスタムクライアント、およびパートナーアプリケーションをサポートしています。
Snowflakeロールへの必要な OAuth 2.0スコープ マッピングを含む、組織の外部 OAuth サーバーを構成した後、ユーザーは追加の認証または認証要素またはメソッドを入力することなく、Snowflakeに安全かつプログラムで接続できます。Snowflakeデータへのユーザーのアクセスは、ユーザーのロールと、セッションのアクセストークンに統合されるロールの両方に依存しています。詳細については、 スコープ (このトピック内)をご参照ください。
ユースケースおよび利点¶
Snowflakeは、トークンの発行を専用の認証サーバーに委任して、 OAuth クライアントとユーザーが適切に認証されるようにします。その結果、Snowflakeに発行されるトークンの集中管理を実現できます。
お客様は、認証(例:多要素、サブネット、生体認証など)および許可(例:許可なし、マネージャー許可が必要)などのポリシーを認証サーバーに統合できます。その結果、ユーザーにチャレンジを発行することにより、セキュリティが強化され、より堅牢なデータ保護を実現できます。ユーザーがポリシーチャレンジに合格しない場合、Snowflakeセッションはインスタンス化されず、Snowflakeデータへのアクセスは発生しません。
Snowflakeにアクセスできるプログラムクライアント、および外部 OAuth からのみSnowflakeセッションを開始するユーザーの場合、Snowflakeにおける追加の認証構成(パスワードの設定)は必要ありません。その結果、プログラムアクセスにのみ使用するサービスアカウントまたはユーザーは、外部 OAuth 構成サービスを通過するときにのみSnowflakeデータを使用できます。
クライアントはブラウザーにアクセスせずにSnowflakeに対して認証できるため、外部 OAuth サーバーとの統合が容易になります。
Snowflakeの外部 OAuth サーバーとの統合はクラウドに依存しません。
認証サーバーがクラウドプロバイダーのクラウドに存在するか、認証サーバーがオンプレミスであるかは関係ありません。その結果顧客は、Snowflakeと対話するための認証サーバーの構成に関して多くのオプションを利用できます。
一般的なワークフロー¶
サポートされている各IDプロバイダーについて、外部 OAuth 認証サーバーに関連する OAuth のワークフローは次のように要約できます。最初のステップは1回だけ実行され、残りのステップはSnowflakeデータへのアクセス試行ごとに実行されることに注意してください。
環境内の外部 OAuth 認証サーバーとSnowflakeのセキュリティ統合を構成して、信頼を確立します。、
ユーザーは、ビジネスインテリジェンスアプリケーションを介してSnowflakeデータにアクセスしようとし、アプリケーションはユーザーを確認しようとします。
確認時に認証サーバーは、 JSON ウェブトークン(つまり、 OAuth トークン)をクライアントアプリケーションに送信します。
Snowflakeドライバーは、 OAuth トークンを使用して接続文字列をSnowflakeに渡します。
Snowflakeは OAuth トークンを検証します。
Snowflakeはユーザー検索を実行します。
確認時に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への接続試行は失敗 します。
スコープ/ロール接続パラメーター |
説明 |
---|---|
|
Snowflakeの ANY のロールにマップされます。 Snowflakeにおけるユーザーの既定のロールが望ましい場合は、このスコープを使用します。 特定の外部 OAuth プロバイダーの ANY ロールを有効にするには、 Power BI からSnowflakeへの統合 では、 PowerBI ユーザーはこのスコープを使用したロールの切り替えができないことに注意してください。 |
|
Snowflakeのカスタムロールにマップします。たとえば、カスタムロールが ANALYST の場合、スコープは |
|
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 関数を使用して取得するように依頼できます。