Snowflake OAuth の概要¶
Snowflake OAuth は、Snowflakeの組み込み OAuth サービスを使用して、OAuth ベースの認証を提供します。
このトピックでは、Snowflake OAuth と、Snowflake を OAuth リソースおよび認証サーバーとして使用してSnowflakeデータに安全にアクセスする方法について説明します。
Snowflake OAuth は、Snowflakeの組み込み OAuth サービスを使用し、次のアプリケーションをサポートします。
Snowflake OAuth 認証フロー¶
OAuth 認証フローは次のとおりです。
クライアントでは、ユーザーは OAuthを使用してSnowflakeに接続しようとします。
アプリケーションは、Snowflake認証サーバーに認証リクエストを送信します。Snowflake認証サーバーは、ユーザーにアクセスの認証を求める認証画面を表示します。
ユーザーはSnowflakeのログイン名とパスワードを送信すると、ユーザーセッションで特定のロールを使用して、クライアントがSnowflakeにアクセスできるようにする同意画面が表示されます(例: SYSADMIN または CUSTOM_ROLE1)。
ユーザーは、セッションで特定のロールを使用することに同意します。
Snowflake認証サーバーは認証コードをクライアントに送り返します。
クライアントは認証コードをSnowflake認証サーバーに送り、アクセストークンと、オプションで、クライアントが新しいアクセストークンを取得できるようにするリフレッシュトークンをリクエストします。
Snowflake認証サーバーは認証コードを受け入れ、Snowflakeリソースサーバー内のユーザーリソースに固有のアクセストークンをクライアントに提供します。認可リクエストの設定に基づいて、認証サーバーはリフレッシュトークンをパブリッシュして、特定のリソースに関連付けられた新しいアクセストークンを取得します。
クライアントは、アクセストークンをSnowflakeリソースサーバーに送信します。
リソースサーバーは有効なアクセストークンを認識し、許可されたロールでユーザーセッションを作成します。これで、クライアントは、アクセストークンで指定されたロールによって制限されたSnowflakeリソースにアクセスできます。
アクセストークンは短期間有効で、通常は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 OAuth ネットワークポリシーでは、意図したとおりにユーザーの認証と承認が許可されます。
重要
ユーザーまたはアカウントごとにネットワークポリシーが設定されていて、別の場所で実行されるサービス(例: Microsoft Power BI サービス)を使用している場合は、Snowflakeに接続できません。
Snowflake OAuth セキュリティ統合を作成したら、次のコマンドを使用して OAuth ネットワークポリシーを設定します。
ALTER SECURITY INTEGRATION <oauth_integration> SET NETWORK_POLICY = <oauth_network_policy>;
Snowflake OAuth ネットワークポリシーを設定解除するには、次のコマンドを使用します。
ALTER SECURITY INTEGRATION <oauth_integration> UNSET <oauth_network_policy>;
条件:
<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 |
無効な |
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 |
コードチャレンジまたはコードチャレンジ方法のいずれかが見つからないか、無効であるか、サポートされていません。 |
さらに、 RFC から次のエラーが取得され、トークンのリクエストまたは交換が失敗したときに生成された JSON BLOBに返されます。
エラー |
説明 |
---|---|
invalid_client |
クライアントが不明である、クライアントのシークレットが一致しないなど、クライアント認証に関連する障害がありました。 |
invalid_grant |
提供された認可付与またはリフレッシュトークンが無効であるか、期限が切れているか、取り消されているか、認可リクエストで使用されたリダイレクト URI と一致しないか、別のクライアントにパブリッシュされました。 |
unsupported_grant_type |
現在、Snowflakeがサポートしていない付与タイプが提供されています(現時点でサポートされている付与タイプは「refresh_token」と「authorization_code」のみ)。 |
invalid_request |
リクエストの形式が正しくないか、処理できませんでした。 |