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 |
---|---|---|
クライアントアプリケーションの変更 |
必須 |
必須 |
クライアントアプリケーションのブラウザーアクセス |
必須 |
不要 |
プログラムクライアント |
ブラウザーが必要 |
ベストフィット |
ドライバーのプロパティ |
|
|
セキュリティの統合構文 |
|
|
OAuth フロー |
OAuth 2.0 コード許可フロー |
クライアントが外部 OAuth サーバーで開始できる OAuth フロー |
Snowflakeは、 統合 を通じてクライアントの OAuth を有効にします。統合は、Snowflakeとサードパーティサービス間のインターフェイスを提供するSnowflakeオブジェクトです。管理者は、セキュリティ統合を使用して OAuth を構成します。セキュリティ統合は、 OAuth をサポートするクライアントがユーザーを認証ページにリダイレクトし、Snowflakeへのアクセス用のアクセストークン(およびオプションで更新トークン)を生成できるようにする統合の種類です。
このトピックの内容:
OAuth の概念¶
認証サーバー¶
このサーバーは、データへのクライアントアクセスを認証または拒否するためのインターフェイスをユーザーに表示します。サーバーは、ユーザーの認証と認証リクエストの確認に成功した後、クライアントにアクセストークンをパブリッシュします。
アクセストークン¶
指定されたロールを使用して、データにアクセスするためにユーザーによってクライアントに付与された認証を表す文字列。これらのトークンは短期間で期限切れになります。更新メカニズムを使用して、新しいアクセストークンを取得できます。
更新トークン¶
有効期限が切れたときに新しいアクセストークンを取得するために使用される文字列。更新トークンは、オプションで、認証サーバーによってアクセストークンとともにクライアントにパブリッシュされます。クライアントは、更新トークンを使用して別のアクセストークンをリクエストし、更新トークンの有効期限が切れるまでユーザーが再び関与することを回避できます。その時点で、 OAuth ワークフローが再び呼び出されます。
リソースサーバー¶
このサーバーはリソース(つまり、Snowflake)を保護し、アクセストークンを使用してリソースにアクセスする要求を処理します。
機密およびパブリッククライアント¶
Confidentialクライアントは OAuth client_secretを保存できます。エンドユーザーがアクセスできない、保護された領域で実行されます。例えば、クラウドに展開されたセキュリティで保護されたサービスが機密クライアントになる可能性があります。一方、デスクトップで実行されているクライアントや、アプリストアを介して配布されているクライアントは、パブリッククライアントになる可能性があります。
パブリッククライアントの場合、ユーザーは指定されたロールを使用するたびに、Snowflakeへのクライアントアクセスを承認する必要があります。Confidentialクライアントの場合、ユーザーは、指定されたロールに対してクライアントアクセスを1回承認するだけで済みます。
Snowflakeは、機密クライアントとパブリッククライアントの両方で OAuth をサポートしています。
Snowflake OAuth 認証フロー¶
OAuth 認証フローは次のとおりです。
クライアントでは、ユーザーは OAuthを使用してSnowflakeに接続しようとします。
アプリケーションは、Snowflake認証サーバーに認証リクエストを送信します。Snowflake認証サーバーは、ユーザーにアクセスの認証を求める認証画面を表示します。
ユーザーはSnowflakeのログイン名とパスワードを送信すると、ユーザーセッションで特定のロールを使用して、クライアントがSnowflakeにアクセスできるようにする同意画面が表示されます(例: SYSADMIN または CUSTOM_ROLE1)。
ユーザーは、セッションで特定のロールを使用することに同意します。
Snowflake認証サーバーは認証コードをクライアントに送り返します。
クライアントは認証コードをSnowflake認証サーバーに送り、アクセストークンと、オプションで、クライアントが新しいアクセストークンを取得できるようにするリフレッシュトークンをリクエストします。
Snowflake認証サーバーは認証コードを受け入れ、Snowflakeリソースサーバー内のユーザーリソースに固有のアクセストークンをクライアントに提供します。認可リクエストの設定に基づいて、認証サーバーはリフレッシュトークンをパブリッシュして、特定のリソースに関連付けられた新しいアクセストークンを取得します。
クライアントは、アクセストークンを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はログイン履歴を提供します。
LOGIN_HISTORY ビュー (ビュー)
OAuth を使用して認証(成功または失敗)すると、出力の FIRST_AUTHENTICATION_FACTOR 列の値は OAUTH_ACCESS_TOKENになります。
統合 DDL¶
統合および委任された認証の作成および/または管理をサポートするために、Snowflakeは次の一連の特別な DDL コマンドを提供します。
OAuth およびフェデレーション認証¶
Snowflakeは、SnowflakeがサポートするIDプロバイダー(IdP)を使用して、 フェデレーション認証と SSO (シングルサインオン)で OAuth をサポートします。
フェデレーション認証が構成されている場合、認証フローは次のとおりです。
クライアントで、ユーザーはSnowflakeへの接続を試みます。
アプリケーションは、Snowflake認証サーバーに認証リクエストを送信します。Snowflake認証サーバーは、ユーザーにアクセスの認証を求める認証画面を表示します。
ユーザーは IdP を使用してログインするオプションをクリックし、 IdP 認証ページにリダイレクトされます。
ユーザーは IdP ログイン名とパスワードを送信すると、同意セッションが表示され、ユーザーセッションで特定のロールを使用してクライアントがSnowflakeにアクセスできるようにします(例: SYSADMIN または CUSTOM_ROLE1)
ユーザーは、セッションで特定のロールを使用することに同意します。
Snowflake認証サーバーは認証コードをクライアントに送り返します。
クライアントは認証コードをSnowflake認証サーバーに送り、アクセストークンと、オプションで、クライアントが新しいアクセストークンを取得できるようにするリフレッシュトークンをリクエストします。
Snowflake認証サーバーは認証コードを受け入れ、Snowflakeリソースサーバー内のユーザーリソースに固有のアクセストークンをクライアントに提供します。認可リクエストの設定に基づいて、認証サーバーはリフレッシュトークンをパブリッシュして、特定のリソースに関連付けられた新しいアクセストークンを取得します。
クライアントは、アクセストークンを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アカウント全体に適用される一般的なネットワークポリシーを引き続き使用できます。
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 および複製¶
Snowflakeは、Snowflake OAuth と外部 OAuth の両方のセキュリティ統合により、ソースアカウントからターゲットアカウントへの複製とフェールオーバー/フェールバックをサポートします。
詳細については、 複数のアカウントにわたるセキュリティ統合およびネットワークポリシーの複製 をご参照ください。
OAuth エラーコード¶
以下は、認証フロー中、トークン交換中、または OAuth フローの完了後のSnowflakeセッション作成時に返される可能性がある OAuth に関連するエラーコードです。
エラーコード |
エラー |
説明 |
---|---|---|
390302 |
OAUTH_CONSENT_INVALID |
特定のユーザーに対する同意の生成または検証に関する問題。 |
390303 |
OAUTH_ACCESS_TOKEN_INVALID |
Snowflakeセッションを作成しようとしたときに使用されたアクセストークンが期限切れまたは無効です。 |
390304 |
OAUTH_AUTHORIZE_INVALID_RESPONSE_TYPE |
無効な |
390305 |
OAUTH_AUTHORIZE_INVALID_STATE_LENGTH |
認証エンドポイントにパラメーターとして提供されたステータスパラメーターが2048文字を超えています。 |
390306 |
OAUTH_AUTHORIZE_INVALID_CLIENT_ID |
指定されたクライアントIDに関連付けられた統合は存在しません。 |
390307 |
OAUTH_AUTHORIZE_INVALID_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 |
リクエストの形式が正しくないか、処理できませんでした。 |