Snowflake OAuth の概要

Snowflake OAuth は、Snowflakeの組み込み OAuth サービスを使用して、OAuth ベースの認証を提供します。

このトピックでは、Snowflake OAuth と、Snowflake を OAuth リソースおよび認証サーバーとして使用してSnowflakeデータに安全にアクセスする方法について説明します。

Snowflake OAuth は、Snowflakeの組み込み OAuth サービスを使用し、次のアプリケーションをサポートします。

Snowflake OAuth 認証フロー

OAuth 認証フローは次のとおりです。

Snowflake OAuth のワークフロー
  1. クライアントでは、ユーザーは OAuthを使用してSnowflakeに接続しようとします。

    アプリケーションは、Snowflake認証サーバーに認証リクエストを送信します。Snowflake認証サーバーは、ユーザーにアクセスの認証を求める認証画面を表示します。

  2. ユーザーはSnowflakeのログイン名とパスワードを送信すると、ユーザーセッションで特定のロールを使用して、クライアントがSnowflakeにアクセスできるようにする同意画面が表示されます(例: SYSADMIN または CUSTOM_ROLE1)。

    ユーザーは、セッションで特定のロールを使用することに同意します。

    Snowflake認証サーバーは認証コードをクライアントに送り返します。

  3. クライアントは認証コードをSnowflake認証サーバーに送り、アクセストークンと、オプションで、クライアントが新しいアクセストークンを取得できるようにするリフレッシュトークンをリクエストします。

    Snowflake認証サーバーは認証コードを受け入れ、Snowflakeリソースサーバー内のユーザーリソースに固有のアクセストークンをクライアントに提供します。認可リクエストの設定に基づいて、認証サーバーはリフレッシュトークンをパブリッシュして、特定のリソースに関連付けられた新しいアクセストークンを取得します。

  4. クライアントは、アクセストークンをSnowflakeリソースサーバーに送信します。

    リソースサーバーは有効なアクセストークンを認識し、許可されたロールでユーザーセッションを作成します。これで、クライアントは、アクセストークンで指定されたロールによって制限されたSnowflakeリソースにアクセスできます。

    既定の設定では、Snowflakeは ACCOUNTADMIN、 ORGADMIN、 SECURITYADMIN のロールを認証できないようにしています。これらの権限ロールに認証を許可するには、 ALTER ACCOUNT コマンドを使用して、 OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST アカウントパラメーターを FALSE に設定します。

アクセストークンは短期間有効で、通常は10分です。アクセストークンの有効期限が切れると、クライアントは更新トークンを送信して新しいアクセストークンを取得できます。現在のアクセストークンの有効期限が切れるたびに、更新トークンがSnowflake認証サーバーに送信され、新しいアクセストークンがリクエストされます(ステップ3~6)。更新トークンの送信を禁止するように統合が構成されている場合、ユーザーは上記のステップを繰り返してクライアントを再認証する必要があります。

パートナーアプリケーション

サポートを構成するには、 パートナーアプリケーション用Snowflake OAuth の構成 をご参照ください。

パブリックインターネットを経由せずに OAuth を使用する方法については、 パートナーアプリケーション をご参照ください。

カスタムクライアント

Snowflakeは、組織が構成したカスタムクライアントをサポートしています。サポートを構成するには、 カスタムクライアント用のSnowflake OAuth の構成 をご参照ください。

ネットワークポリシー

専用ネットワークポリシーは、 Snowflake OAuth のみ と統合できます。 外部 OAuth セキュリティ統合は、個別のネットワークポリシーの設定をサポートしていませんが、Snowflakeアカウント全体に適用される一般的なネットワークポリシーを引き続き使用できます。

Snowflake OAuth セキュリティ統合には network_policy パラメーターがあるため、Snowflake OAuth 統合はこれらの IP アドレスを通常のユーザーアクセス用に追加することなくユーザーを認証および承認できます。

Snowflake OAuth 統合に固有のネットワークポリシーを設定すると、Snowflake OAuth ネットワークポリシーをSnowflakeアカウントに適用される他のネットワークポリシーと区別することができます。したがって、Snowflake OAuth ネットワークポリシーでは、意図したとおりにユーザーの認証と承認が許可されます。

Snowflake OAuth 統合に適用されるネットワークポリシーは、Snowflakeアカウント全体に適用されるネットワークポリシーよりも優先されますが、ユーザーに割り当てられるネットワークポリシーのほうが優先されます。

重要

ユーザーまたはアカウントごとにネットワークポリシーが設定されていて、別の場所で実行されるサービス(例: Microsoft Power BI サービス)を使用している場合は、Snowflakeに接続できません。

Snowflake OAuth セキュリティ統合を作成したら、次のコマンドを使用して OAuth ネットワークポリシーを設定します。

ALTER SECURITY INTEGRATION <oauth_integration> SET NETWORK_POLICY = <oauth_network_policy>;
Copy

Snowflake OAuth ネットワークポリシーを設定解除するには、次のコマンドを使用します。

ALTER SECURITY INTEGRATION <oauth_integration> UNSET <oauth_network_policy>;
Copy

条件:

<oauth_integration>

Snowflake OAuth セキュリティ統合の名前を指定します。

<oauth_network_policy>

Snowflakeで、Snowflake OAuth ネットワークポリシーを指定します。

詳細については、 ネットワークポリシーを使用したネットワークトラフィックの制御ALTER SECURITY INTEGRATION をご参照ください。

エラーコード

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

エラーコード

エラー

説明

390302

OAUTH_CONSENT_INVALID

特定のユーザーに対する同意の生成または検証に関する問題。

390303

OAUTH_ACCESS_TOKEN_INVALID

Snowflakeセッションを作成しようとしたときに使用されたアクセストークンが期限切れまたは無効です。

390304

OAUTH_AUTHORIZE_INVALID_RESPONSE_TYPE

無効な response_type が、認証エンドポイントにパラメーターとして提供されました( code である可能性が高い)。

390305

OAUTH_AUTHORIZE_INVALID_STATE_LENGTH

認証エンドポイントにパラメーターとして提供されたステータスパラメーターが2048文字を超えています。

390306

OAUTH_AUTHORIZE_INVALID_CLIENT_ID

指定されたクライアントIDに関連付けられた統合は存在しません。

390307

OAUTH_AUTHORIZE_INVALID_REDIRECT_URI

認証エンドポイントへのパラメーターとして指定された redirect_uri が、提供された client_id に関連付けられた統合の redirect_uri と一致しないか、 redirect_uri が適切にフォーマットされていません

390308

OAUTH_AUTHORIZE_INVALID_SCOPE

リクエストされた範囲が有効なスコープではないか、リクエストされた範囲をユーザーに完全に付与できません。

390309

OAUTH_USERNAMES_MISMATCH

認証しようとしたユーザーは、アクセストークンに関連付けられているユーザーとは異なります。

390311

OAUTH_AUTHORIZE_INVALID_CODE_CHALLENGE_PARAMS

コードチャレンジまたはコードチャレンジ方法のいずれかが見つからないか、無効であるか、サポートされていません。

さらに、 RFC から次のエラーが取得され、トークンのリクエストまたは交換が失敗したときに生成された JSON BLOBに返されます。

エラー

説明

invalid_client

クライアントが不明である、クライアントのシークレットが一致しないなど、クライアント認証に関連する障害がありました。

invalid_grant

提供された認可付与またはリフレッシュトークンが無効であるか、期限が切れているか、取り消されているか、認可リクエストで使用されたリダイレクト URI と一致しないか、別のクライアントにパブリッシュされました。

unsupported_grant_type

現在、Snowflakeがサポートしていない付与タイプが提供されています(現時点でサポートされている付与タイプは「refresh_token」と「authorization_code」のみ)。

invalid_request

リクエストの形式が正しくないか、処理できませんでした。