OAuth の紹介

Snowflakeは、認証と許可のために OAuth 2.0 プロトコルをサポートしています。OAuth は、サポートされているクライアントが、ユーザーログイン認証情報を共有または保存せずにSnowflakeへのアクセスを認証できるようにするオープン標準プロトコルです。これは、ユーザーがデータを取得するためにクライアントに代わって行動することを許可するため、 委任された認証 と呼ばれています。Snowflakeには、Snowflake OAuth と外部 OAuth の2つの OAuth パスウェイがあります。

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

外部 OAuth は、お客様の OAuth 2.0サーバーを統合し、3つの認証サーバーオプション、カスタムクライアント、2つのパートナーアプリケーションをサポートします。

次のリストでは、Snowflake OAuth と外部 OAuth を比較しています。

カテゴリ

Snowflake OAuth

外部 OAuth

クライアントアプリケーションの変更

必須

必須

クライアントアプリケーションのブラウザーアクセス

必須

不要

プログラムクライアント

ブラウザーが必要

ベストフィット

ドライバーのプロパティ

authenticator = oauth

authenticator = oauth

セキュリティの統合構文

create security integration type = oauth ...

create security integration type = external_oauth

OAuth フロー

OAuth 2.0 コード許可フロー

クライアントが外部 OAuth サーバーで開始できる OAuth フロー

Snowflakeは、 統合 を通じてクライアントの OAuth を有効にします。統合は、Snowflakeとサードパーティサービス間のインターフェイスを提供するSnowflakeオブジェクトです。管理者は、セキュリティ統合を使用して OAuth を構成します。セキュリティ統合は、 OAuth をサポートするクライアントがユーザーを認証ページにリダイレクトし、Snowflakeへのアクセス用のアクセストークン(およびオプションで更新トークン)を生成できるようにする統合の種類です。

このトピックの内容:

OAuth の概念

認証サーバー

このサーバーは、データへのクライアントアクセスを認証または拒否するためのインターフェイスをユーザーに表示します。サーバーは、ユーザーの認証と認証リクエストの確認に成功した後、クライアントにアクセストークンをパブリッシュします。

アクセストークン

指定されたロールを使用して、データにアクセスするためにユーザーによってクライアントに付与された認証を表す文字列。これらのトークンは短期間で期限切れになります。更新メカニズムを使用して、新しいアクセストークンを取得できます。

更新トークン

有効期限が切れたときに新しいアクセストークンを取得するために使用される文字列。更新トークンは、オプションで、認証サーバーによってアクセストークンとともにクライアントにパブリッシュされます。クライアントは、更新トークンを使用して別のアクセストークンをリクエストし、更新トークンの有効期限が切れるまでユーザーが再び関与することを回避できます。その時点で、 OAuth ワークフローが再び呼び出されます。

リソースサーバー

このサーバーはリソース(つまり、Snowflake)を保護し、アクセストークンを使用してリソースにアクセスする要求を処理します。

機密およびパブリッククライアント

機密クライアントは秘密を保存できます。エンドユーザーがアクセスできない、保護された領域で実行されます。例えば、クラウドに展開されたセキュリティで保護されたサービスが機密クライアントになる可能性があります。一方、デスクトップで実行されているクライアントや、アプリストアを介して配布されているクライアントは、パブリッククライアントになる可能性があります。

パブリッククライアントの場合、ユーザーは指定されたロールを使用してSnowflakeへのクライアントアクセスを許可する前に、Snowflakeのユーザー名とパスワードを毎回入力する必要があります。機密クライアントの場合、ユーザーは指定されたロールに対して1度だけ認証情報を入力する必要があります。

Snowflakeは、機密クライアントとパブリッククライアントの両方で OAuth をサポートしています。

Snowflake OAuth 認証フロー

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

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

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

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

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

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

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

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

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

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

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

OAuth サポートの構成

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

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

パブリックインターネットを経由せずに OAuth を使用する方法については、 OAuth およびプライベート接続 をご参照ください。

Snowflake OAuth カスタムクライアント

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

外部 OAuth パートナーアプリケーション

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

外部 OAuth カスタムクライアント

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

OAuth ログインの監査

Snowflakeユーザーによるログイン試行をクエリするために、Snowflakeはログイン履歴を提供します。

OAuth を使用して認証(成功または失敗)すると、出力の FIRST_AUTHENTICATION_FACTOR 列の値は OAUTH_ACCESS_TOKENになります。

統合 DDL

統合および委任された認証の作成および/または管理をサポートするために、Snowflakeは次の一連の特別な DDL コマンドを提供します。

OAuth およびフェデレーション認証

Snowflakeは、SnowflakeがサポートするIDプロバイダー(IdP)を使用して、 フェデレーション認証と SSO (シングルサインオン)で OAuth をサポートします。

フェデレーション認証が構成されている場合、認証フローは次のとおりです。

  1. クライアントで、ユーザーはSnowflakeへの接続を試みます。

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

  2. ユーザーは IdP を使用してログインするオプションをクリックし、 IdP 認証ページにリダイレクトされます。

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

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

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

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

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

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

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

OAuth およびプライベート接続

Snowflakeは、 Snowflakeサービスへのプライベート接続 で外部 OAuth をサポートしています。

Snowflake OAuth とTableauは、次のようにSnowflakeへのプライベート接続で使用できます。

Tableau Desktop

Tableau 2020.4以降、Tableauには、 Snowflakeサービスへのプライベート接続 のアカウント URL を使用したSnowflakeへの接続をサポートする組み込み済み OAuth クライアントが含まれています。

Tableau 2020.4にアップグレードした後は、それ以上の構成は必要ありません。 Snowflakeに接続するには、AWSまたはAzureのいずれかに対応するプライベート接続URLを使用します。

Tableau Server

Tableau 2020.4以降、ユーザーはオプションで、組み込み済み OAuth クライアントを使用して Snowflakeサービスへのプライベート接続 のアカウント URL でSnowflakeに接続するようにTableau Serverを構成できます。

この機能を使用するには、新しい カスタムクライアント セキュリティ統合を作成し、 Tableauの手順 に従います。

Tableau Online

Tableau Onlineは、パブリックインターネットへのアクセスを必要とするため、 Snowflakeサービスへのプライベート接続 のSnowflakeアカウント URL をサポートしていません。

Tableau Onlineが、 Snowflakeサービスへのプライベート接続 のプライベート接続Snowflakeアカウント URLs をサポートする時期の詳細については、Tableauにお問い合わせください。

重要

Snowflakeサービスへのプライベート接続 で使用するアカウント URL を決定するには、 SYSTEM$GET_PRIVATELINK_CONFIG 関数を呼び出します。

Looker

現在、Snowflake OAuth とLookerを組み合わせるには、パブリックインターネットへのアクセスが必要です。したがって、Snowflake OAuth とLookerを Snowflakeサービスへのプライベート接続 で使用することはできません。

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

OAuth およびネットワークポリシー

ネットワークポリシーは Snowflake OAuth のみ で使用できます。 外部 OAuth セキュリティ統合は、個別のネットワークポリシーの設定をサポートしていません。

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

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

重要

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

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

alter security integration <oauth統合> set network_policy = <oauthネットワークポリシー>;

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

alter security integration <oauth統合> unset <oauthネットワークポリシー>;

条件:

<oauth_integration>

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

<oauth_network_policy>

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

詳細については、 ネットワークポリシー および ALTER SECURITY INTEGRATION をご参照ください。

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

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

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

Snowflake OAuth を使用したセッション中のロールから、セカンダリロールへの切り替えはサポートされていないことに注意してください。

OAuth のクライアント、ドライバー、およびコネクター

サポートされるクライアント、ドライバー、およびコネクタは、 OAuth を使用してユーザーログイン認証情報を確認できます。

次の点に注意してください。

  • authenticator パラメーターを oauth に、 token パラメーターを oauth_access_token に設定する必要があります。

  • URL クエリパラメータとして token 値を渡す場合、 oauth_access_token 値を URL エンコードする必要があります。

  • token 値をプロパティオブジェクト(例: JDBC ドライバー)に渡す場合、変更は必要ありません。

詳細については、各クライアント、ドライバー、またはコネクタの接続パラメーターをご参照ください。

OAuth およびクライアントリダイレクト

Snowflakeは、Snowflake OAuth および外部 OAuth でのクライアントリダイレクトの使用をサポートします。これには、サポートされているSnowflakeクライアントでのクライアントリダイレクトおよび OAuth の使用も含まれます。

詳細については、 クライアント接続のリダイレクト をご参照ください。

OAuth エラーコード

以下は、認証フロー中、トークン交換中、または OAuth フローの完了後の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

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

390318

OAUTH_ACCESS_TOKEN_EXPIRED

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

390144

JWT_TOKEN_INVALID

JWT トークンが無効です。

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

エラー

説明

invalid_client

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

invalid_grant

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

unsupported_grant_type

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

invalid_request

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