Snowflake

Snowflake OAuth Security Integration: External OAuth vs Snowflake OAuth

2026-03-26
更新: 2026-03-27
NicheeLab編集部
目次
  1. External OAuth vs Snowflake OAuth比較表
  2. External OAuth Security Integrationの作成
  3. Snowflake OAuth Security Integrationの作成
  4. External OAuthのロールマッピング
  5. OAuth認証フロー
  6. 管理と監査
  7. 問題で確認
  8. よくある質問

SnowflakeのOAuth Security Integrationは、パスワードを使わずにOAuth 2.0プロトコルでSnowflakeに認証する仕組みを提供します。External OAuth(外部認証サーバーがトークンを発行)とSnowflake OAuth(Snowflake自身がトークンを発行)の2つのモデルがあり、 ユースケースに応じて使い分けます。

External OAuth vs Snowflake OAuth比較表

比較項目External OAuthSnowflake OAuth
認可サーバー外部IdP(Azure AD、Okta、Custom)Snowflake自身
TYPE値EXTERNAL_OAUTHOAUTH
トークン発行元外部認証サーバーSnowflake
トークン検証JWKSエンドポイントで公開鍵を取得して検証Snowflake内部で検証
ユーザーマッピングトークンのクレーム(upn、email等)からSnowflakeユーザーを特定Snowflakeのログイン情報で認証
ロール制御スコープ(sn:role:ROLE_NAME)またはANY_ROLE_MODEセッションのデフォルトロール
リフレッシュトークン管理外部認証サーバーが管理Snowflakeが管理(有効期間設定可能)
主な用途カスタムアプリ、マイクロサービスBIツール(Tableau、Looker等)、Snowsight
クライアント認証外部IdPのclient_id/secretSnowflakeが発行するclient_id/secret
複数Integration複数作成可能複数作成可能

External OAuth Security Integrationの作成

-- Azure AD向けExternal OAuth
CREATE SECURITY INTEGRATION ext_oauth_azure
  TYPE = EXTERNAL_OAUTH
  ENABLED = TRUE
  EXTERNAL_OAUTH_TYPE = AZURE
  EXTERNAL_OAUTH_ISSUER = 'https://sts.windows.net/<tenant-id>/'
  EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys'
  EXTERNAL_OAUTH_AUDIENCE_LIST = ('https://<account>.snowflakecomputing.com')
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'upn'
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME'
  EXTERNAL_OAUTH_ANY_ROLE_MODE = 'DISABLE';

-- Okta向けExternal OAuth
CREATE SECURITY INTEGRATION ext_oauth_okta
  TYPE = EXTERNAL_OAUTH
  ENABLED = TRUE
  EXTERNAL_OAUTH_TYPE = OKTA
  EXTERNAL_OAUTH_ISSUER = 'https://myorg.okta.com/oauth2/default'
  EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://myorg.okta.com/oauth2/default/v1/keys'
  EXTERNAL_OAUTH_AUDIENCE_LIST = ('https://<account>.snowflakecomputing.com')
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME'
  EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';

-- カスタムOAuth 2.0サーバー向け
CREATE SECURITY INTEGRATION ext_oauth_custom
  TYPE = EXTERNAL_OAUTH
  ENABLED = TRUE
  EXTERNAL_OAUTH_TYPE = CUSTOM
  EXTERNAL_OAUTH_ISSUER = 'https://auth.example.com'
  EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://auth.example.com/.well-known/jwks.json'
  EXTERNAL_OAUTH_AUDIENCE_LIST = ('snowflake-api')
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'email'
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'EMAIL'
  EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';

Snowflake OAuth Security Integrationの作成

-- Tableau Desktop向け(プリセット使用)
CREATE SECURITY INTEGRATION sf_oauth_tableau
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = TABLEAU_DESKTOP
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 86400;

-- カスタムアプリケーション向け(Confidentialクライアント)
CREATE SECURITY INTEGRATION sf_oauth_webapp
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
  OAUTH_REDIRECT_URI = 'https://myapp.example.com/oauth/callback'
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;

-- SPA/モバイル向け(Publicクライアント)
CREATE SECURITY INTEGRATION sf_oauth_spa
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'PUBLIC'
  OAUTH_REDIRECT_URI = 'https://spa.example.com/callback'
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 3600;

External OAuthのロールマッピング

-- スコープベースのロール制御(デフォルト)
-- IdP側のトークンスコープに以下を含める:
--   session:role:ANALYST_ROLE
-- → Snowflakeセッションでは ANALYST_ROLE が使用される

-- ANY_ROLE_MODEの設定変更
ALTER SECURITY INTEGRATION ext_oauth_azure
  SET EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
-- → ユーザーに付与されている任意のロールを使用可能

-- ENABLE_FOR_PRIVILEGE(ACCOUNTADMINを除外)
ALTER SECURITY INTEGRATION ext_oauth_azure
  SET EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE_FOR_PRIVILEGE';

OAuth認証フロー

External OAuthの場合、クライアントアプリは外部認証サーバーからアクセストークンを取得し、 そのトークンをSnowflakeドライバの接続パラメータに渡します。 Snowflakeはトークンの署名を検証し、クレームからユーザーを特定してセッションを確立します。

-- Python Connectorでの接続例(External OAuth)
import snowflake.connector

conn = snowflake.connector.connect(
    account='<account>',
    authenticator='oauth',
    token='<external_oauth_access_token>',
    warehouse='COMPUTE_WH',
    database='ANALYTICS',
    schema='PUBLIC'
)

-- SnowSQL接続例(External OAuth)
-- snowsql -a <account> --authenticator oauth --token <access_token>

管理と監査

-- Integration一覧の確認
SHOW SECURITY INTEGRATIONS;

-- Integration詳細(client_idの確認等)
DESCRIBE SECURITY INTEGRATION sf_oauth_webapp;

-- OAuth接続の監査(LOGIN_HISTORY)
SELECT
  user_name,
  client_ip,
  first_authentication_factor,
  second_authentication_factor,
  is_success,
  error_message,
  event_timestamp
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE first_authentication_factor = 'OAUTH_ACCESS_TOKEN'
  AND event_timestamp >= DATEADD(DAY, -7, CURRENT_TIMESTAMP())
ORDER BY event_timestamp DESC;

問題で確認

Security & Governance

問題 1

カスタムWebアプリケーションからExternal OAuth(Azure AD)を使ってSnowflakeに接続している。ユーザーがUSE ROLE DATA_ENGINEERを実行するとエラーが発生するが、同じユーザーがSnowsightにパスワード認証でログインするとDATA_ENGINEERロールを使用できる。最も可能性の高い原因はどれか。

  1. External OAuth IntegrationのEXTERNAL_OAUTH_ANY_ROLE_MODEがDISABLEで、トークンのスコープにDATA_ENGINEERロールが含まれていない
  2. DATA_ENGINEERロールがEnterprise Edition以上でのみ利用可能な機能を使っている
  3. External OAuth IntegrationのENABLEDがFALSEに設定されている
  4. Azure ADのトークン有効期限が切れている

正解: A

EXTERNAL_OAUTH_ANY_ROLE_MODE = 'DISABLE'(デフォルト)では、OAuthトークンに含まれるスコープ(session:role:ROLE_NAME形式)で指定されたロールのみ使用可能です。トークンのスコープにDATA_ENGINEERが含まれていないため、USE ROLEが失敗します。パスワード認証ではこの制限がないため正常に動作します。解決策はIdP側でスコープにDATA_ENGINEERを追加するか、ANY_ROLE_MODEをENABLEに変更することです。

よくある質問

External OAuthとSnowflake OAuthでリフレッシュトークンの扱いはどう違いますか?

Snowflake OAuthではOAUTH_ISSUE_REFRESH_TOKENS = TRUEを設定し、OAUTH_REFRESH_TOKEN_VALIDITYで有効期間を制御します。リフレッシュトークンはSnowflakeが発行・管理します。External OAuthではリフレッシュトークンは外部認証サーバー(Azure AD、Okta等)が管理し、Snowflake側ではリフレッシュトークンの有効期間を制御できません。External OAuth環境でのトークン有効期間管理はIdP側で設定します。

External OAuthでEXTERNAL_OAUTH_ANY_ROLE_MODEを有効にすべきですか?

EXTERNAL_OAUTH_ANY_ROLE_MODE = 'DISABLE'(デフォルト)では、外部OAuthトークンに含まれるスコープ(sn:role:ROLE_NAME形式)に対応するロールのみ使用可能です。ENABLEに設定すると、ユーザーに付与されている任意のロールを使用できます。セキュリティの観点からはDISABLEのままスコープで制御するのが望ましいですが、複数ロールの柔軟な切り替えが必要な場合はENABLEを検討します。ENABLE_FOR_PRIVILEGEではACCOUNTADMINを除外する中間的な設定も可能です。

Snowflake OAuthのOAUTH_CLIENTプリセットにはどのような種類がありますか?

Snowflakeは主要BIツール向けにTABLEAU_DESKTOP、TABLEAU_SERVER、LOOKERなどのプリセットを用意しています。プリセットを使うとリダイレクトURIやクライアントタイプが自動設定されます。CUSTOMを指定すると任意のアプリケーション向けにOAUTH_REDIRECT_URIやOAUTH_CLIENT_TYPEを手動で設定できます。OAUTH_CLIENT_TYPEにはCONFIDENTIAL(サーバーサイドアプリ)とPUBLIC(SPAやモバイル)があり、CUSTOMの場合に指定が必要です。

クラウドの基礎から読む

資格の話をしない、クラウドそのものの入門 8 章があります。登録なしで全部読めます。

第 0 部・無料

クラウド自体がはじめての方へ

サーバー・ネットワーク・データベースの前提知識なしで読める 8 章。登録不要・無料。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。SnowparkとDat...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate(SOL-C01)完全解説|現在は予約不可・試験内容と次の受験先

SnowPro Associate: Platform(SOL-C01)は2026年10月時点でSnowflakeの公式...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.