Snowflake

SnowflakeのSCIM Provisioning実装ガイド: 自動ユーザー同期の設計と運用

2026-03-26
更新: 2026-03-27
NicheeLab編集部

SCIM(System for Cross-domain Identity Management)2.0は、 IdP(Identity Provider)からSnowflakeへユーザーとグループを自動的にプロビジョニング・デプロビジョニングするための標準プロトコルです。 SCIM統合を設定すると、IdP側でのユーザー追加・変更・無効化がSnowflakeに自動反映され、手動でのCREATE USER / DROP USER操作が不要になります。

SCIM連携のアーキテクチャ

SCIM連携では、IdPがSCIMクライアントとしてSnowflakeのSCIM APIエンドポイントにHTTPリクエストを送信します。 SnowflakeはSCIMサーバーとして動作し、リクエストに応じてユーザーやグループの作成・更新・無効化を実行します。 認証にはBearer Token(SCIM Security Integration作成時に生成されるOAuthトークン)を使用します。

SCIM Security Integrationの作成

-- ACCOUNTADMINロールで実行
USE ROLE ACCOUNTADMIN;

-- SCIMプロビジョニング用のカスタムロールを作成
CREATE ROLE IF NOT EXISTS scim_provisioner;
GRANT CREATE USER ON ACCOUNT TO ROLE scim_provisioner;
GRANT CREATE ROLE ON ACCOUNT TO ROLE scim_provisioner;

-- Okta向けSCIM Security Integration
CREATE SECURITY INTEGRATION okta_scim_integration
  TYPE = SCIM
  SCIM_CLIENT = 'OKTA'
  RUN_AS_ROLE = 'SCIM_PROVISIONER';

-- Azure AD向けSCIM Security Integration
CREATE SECURITY INTEGRATION azure_scim_integration
  TYPE = SCIM
  SCIM_CLIENT = 'AZURE'
  RUN_AS_ROLE = 'SCIM_PROVISIONER';

-- 汎用SCIM(PingFederate等)
CREATE SECURITY INTEGRATION generic_scim_integration
  TYPE = SCIM
  SCIM_CLIENT = 'GENERIC'
  RUN_AS_ROLE = 'SCIM_PROVISIONER';

SCIMトークンの取得

-- SCIM APIエンドポイントとトークンを取得
-- Integration作成後にSELECTで確認
SELECT SYSTEM$GENERATE_SCIM_ACCESS_TOKEN('OKTA_SCIM_INTEGRATION');

-- SCIMエンドポイントURL
-- https://<account>.snowflakecomputing.com/scim/v2/

-- トークンはIdP側のSCIMプロビジョニング設定に入力する

IdP別セットアップフロー

Oktaの設定手順

  1. OktaのApp Integrations から「Snowflake」アプリを追加
  2. Provisioningタブ → Configure API Integration を有効化
  3. API Token にSnowflakeで生成したSCIMトークンを入力
  4. Base URL に https://<account>.snowflakecomputing.com/scim/v2/ を入力
  5. Provisioning to App で Create Users / Update Attributes / Deactivate Users を有効化
  6. Assignmentsタブで同期対象のグループ/ユーザーを割り当て

Azure ADの設定手順

  1. Azure Portal → Enterprise Applications → Snowflake を追加
  2. Provisioning → Automatic を選択
  3. Tenant URL に https://<account>.snowflakecomputing.com/scim/v2/ を入力
  4. Secret Token にSnowflakeで生成したSCIMトークンを入力
  5. Test Connection で接続を確認
  6. Mappings でユーザー属性・グループ属性のマッピングを確認・カスタマイズ
  7. Settings でScope(Sync assigned users and groups only)を設定
  8. Provisioning Status を On にして保存

同期対象と挙動

同期対象IdP側操作Snowflake側の結果
Usersユーザー作成CREATE USER が実行される(LOGIN_NAME、DISPLAY_NAME、EMAIL等が設定)
Usersユーザー属性変更ALTER USER でDISPLAY_NAME、EMAIL等が更新される
Usersユーザー無効化/削除ALTER USER SET DISABLED = TRUE(DROP USERはされない)
Groupsグループ作成CREATE ROLE が実行される(RUN_AS_ROLEの権限で)
Groupsグループにメンバー追加GRANT ROLE <group_role> TO USER <user> が実行される
Groupsグループからメンバー削除REVOKE ROLE <group_role> FROM USER <user> が実行される
Groupsグループ削除ロール自体は削除されない(手動でDROP ROLEが必要)

RUN_AS_ROLEの設計

SCIM Security IntegrationのRUN_AS_ROLEは、SCIMプロビジョニングがSnowflake内で操作を実行する際に使用するロールです。 このロールに付与されている権限の範囲内でのみプロビジョニングが実行されます。

-- RUN_AS_ROLE用のカスタムロール設計例
CREATE ROLE scim_provisioner;

-- ユーザーとロールの作成権限
GRANT CREATE USER ON ACCOUNT TO ROLE scim_provisioner;
GRANT CREATE ROLE ON ACCOUNT TO ROLE scim_provisioner;

-- SCIMで作成されたロールをACCOUNTADMINに管理させたい場合
GRANT ROLE scim_provisioner TO ROLE ACCOUNTADMIN;

-- 注意: RUN_AS_ROLEにACCOUNTADMINを指定するのは
-- セキュリティ上推奨されない。最小権限のカスタムロールを使用する

トラブルシューティング

  • ユーザーが同期されない:IdP側のSCIMトークンが期限切れの可能性。SYSTEM$GENERATE_SCIM_ACCESS_TOKENで新しいトークンを生成し、IdP側に再設定する
  • グループが同期されるがロールが作成されない:RUN_AS_ROLEにCREATE ROLE権限が付与されていない。GRANT CREATE ROLE ON ACCOUNT TO ROLE <run_as_role> を実行
  • 同期済みユーザーが既存ユーザーと競合:LOGIN_NAMEが同一のユーザーが既にSnowflakeに存在する場合、SCIMはそのユーザーを更新する。意図しない上書きを防ぐため、事前にLOGIN_NAMEの重複を確認する
  • SCIMログの確認:REST_EVENT_HISTORYビューでSCIM APIコールの成功/失敗を追跡可能
-- SCIM APIコールの監査
SELECT *
FROM TABLE(INFORMATION_SCHEMA.REST_EVENT_HISTORY(
  DATE_RANGE_START => DATEADD(DAY, -7, CURRENT_DATE()),
  DATE_RANGE_END => CURRENT_DATE()
))
WHERE event_type = 'SCIM'
ORDER BY event_timestamp DESC;

問題で確認

Security & Governance

問題 1

Okta経由のSCIMプロビジョニングで、Okta側でグループ「data_team」を作成しメンバーを追加した。Snowflake側でどのような操作が自動実行されるか。最も正確な説明はどれか。

  1. DATA_TEAMデータベースが作成され、メンバーにSELECT権限が自動付与される
  2. DATA_TEAMロールが作成され、メンバーのユーザーにそのロールがGRANTされる
  3. DATA_TEAMウェアハウスが作成され、メンバーにUSAGE権限が自動付与される
  4. DATA_TEAMリソースモニターが作成され、メンバーの消費クレジットが追跡される

正解: B

SCIM ProvisioningでIdPのグループがSnowflakeに同期されると、グループ名に対応するROLEが作成され(CREATE ROLE data_team)、グループのメンバーであるユーザーにそのロールがGRANT ROLE data_team TO USER <user> で付与されます。SCIMはユーザーとロールのプロビジョニングのみを行い、データベースやウェアハウスなどのSnowflakeオブジェクトの作成は行いません。

よくある質問

SCIM ProvisioningでIdP側でユーザーを削除した場合、Snowflakeのユーザーはどうなりますか?

IdP側でユーザーを削除(またはアプリからのアサインメント解除)すると、SCIM APIを通じてSnowflake側のユーザーはDISABLED状態になります。Snowflakeからユーザーオブジェクト自体が削除されるわけではありません。完全に削除するにはSnowflake側でDROP USERを手動実行する必要があります。これはSnowflakeが監査証跡やOWNERSHIPの一貫性を保つための仕様です。

SCIMで同期されたユーザーのパスワードはどう管理されますか?

SCIM Provisioningではパスワードの同期は行いません。SCIMで作成されたユーザーはSSO(SAML 2.0)で認証する前提で、Snowflake側にパスワードは設定されません。パスワード認証が必要な場合はSnowflake管理者が個別にALTER USER SET PASSWORDを実行する必要がありますが、SCIM連携環境ではSSO認証に一本化する設計が推奨されます。

OktaとAzure ADの両方からSCIM同期できますか?

Snowflakeアカウントに複数のSCIM Security Integrationを作成することは可能ですが、同一ユーザーを複数のIdPから同期すると競合が発生するリスクがあります。実運用では1つのIdPからのみSCIM同期し、もう一方はSSO認証のみに使用する構成が安定します。複数IdPからの同期が必要な場合は、同期対象のグループやユーザーが重複しないようIdP側でスコープを分離します。

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

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

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

NicheeLab編集部

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


関連記事
Snowflake

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

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

Snowflake

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

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

Snowflake

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

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

Snowflake

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

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

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

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