OAuth の紹介

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

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

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

次のリストでは、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は、次のSnowflakeパートナーアプリケーションで OAuth 認証をサポートしています。

クライアント

必要なクライアントバージョン

クライアントタイプ

Tableau Desktop / Server / Online

2019.1またはそれ以上

パブリック

Looker

6.20またはそれ以上

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

重要

現在、Tableauが OAuth をサポートしているのは、Tableauのテクノロジーがパブリックインターネットにアクセスできる場合のみです。

そのため、 AWS PrivateLink を使用しているお客様は、Snowflakeで OAuth およびTableauを使用しようとすると問題が発生する場合があります。質問や詳細については、Tableauにお問い合わせください。

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

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

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

現在Snowflakeは、 Microsoft Power BI を外部 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は、外部 OAuth を AWS PrivateLink および Azure Private Link でサポートしています。

現在、TableauとLookerの両方でパブリックインターネットにアクセスする必要があるため、Snowflake OAuth は AWS Private LinkとAzure Private Linkのいずれにおいても機能しません。詳細については、次をご参照ください。

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 のクライアント、ドライバー、およびコネクター

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

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

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

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

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

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