Snowflake MFA・SSO・強力な認証設定入門|パスワード認証廃止に備える方法

Snowflake MFAとSSO設定入門|認証を強化する2つの仕組み Snowflake
この記事をシェアする𝕏B!FacebookLINEPocket

はじめに:Snowflakeではパスワードだけのログインから強力な認証へ

Snowflakeでは、セキュリティ強化のためにパスワードだけでログインする単一要素認証から、MFA・SSO・キーペア認証・OAuth・Workload Identity Federationなどの強力な認証方式へ移行する流れが進んでいます。特に人間ユーザーがパスワードでログインする場合はMFAが重要になり、アプリケーションやETLツールで使うサービスユーザーではパスワード以外の認証方式を検討する必要があります。

2026年時点では、Snowflakeは単一要素パスワードログインの段階的な廃止を進めています。具体的な適用時期や挙動は、契約形態・リージョン・Behavior Change Bundleの適用状況によって差があるため、最新情報はSnowflake公式ドキュメントと組織のアカウントマネージャーで確認してください。

本記事では、Snowflake初心者の方に向けて、MFA・SSO・Authentication Policy・サービスユーザー認証の全体像と、実務でそのまま使えるSQL例を整理します。

MFA・SSO・強力な認証方式の全体像

Snowflakeの認証は、大きく次の要素に分けて考えると整理しやすくなります。

  • MFA:パスワード + 追加要素(認証アプリ・OTPなど)で人間ユーザーのログインを強化
  • SSO(SAML2):Okta、Microsoft Entra ID、Google WorkspaceなどのIdPで認証を集約
  • キーペア認証:公開鍵・秘密鍵を使ったサービスユーザー向け認証
  • OAuth:BIツールや外部アプリ連携で使いやすい認証
  • Programmatic Access Token:短期間・スコープ付きでプログラム接続に使うトークン
  • Workload Identity Federation(WIF):長期シークレットを持たずに、クラウドワークロードから接続する仕組み
  • Authentication Policy:認証方式やMFA要件をアカウント・ユーザー単位で制御するポリシー

これらを人間ユーザーサービスユーザーに分けて使い分けるのが基本方針です。

人間ユーザーとサービスユーザーの違い

Snowflakeでは、ユーザーを大きく「人間ユーザー」と「サービスユーザー」に分けて考えます。両者は使い方も推奨される認証方式も異なるため、設計時に分けておくことが重要です。

  • 人間ユーザー:実際の利用者がSnowsightやクライアントツールからログインするユーザー。TYPE = PERSON を指定します。TYPE を明示しない場合や NULL の場合も、人間ユーザー扱いになります。
  • サービスユーザー:アプリケーション、ETL、BIツール、CI/CDなどが使う非対話型ユーザー。TYPE = SERVICE を指定します。MFAのような対話型認証ではなく、キーペア認証・OAuth・Programmatic Access Token・Workload Identity Federationなどを検討します。
-- 人間ユーザーの例
CREATE USER taro_yamada
  TYPE = PERSON
  LOGIN_NAME = 'taro@example.com'
  EMAIL = 'taro@example.com';

-- サービスユーザーの例
CREATE USER svc_etl_loader
  TYPE = SERVICE
  LOGIN_NAME = 'svc_etl_loader';

サービスユーザーにMFAを要求しても、対話的にOTPを入力できないため運用が回りません。設計段階から「このユーザーは人間か、サービスか」を意識して作成しましょう。

MFAとは?

MFA(Multi-Factor Authentication、多要素認証)は、パスワードに加えてもう一つの認証要素を要求する仕組みです。Snowflakeでは、Duo Mobile などの認証アプリで生成するワンタイムコードを使うのが代表的なパターンです。

パスワードが漏えいしても、認証アプリの承認やOTP入力がなければログインできないため、不正ログインのリスクを大きく下げられます。Snowflakeで人間ユーザーがパスワード認証を使う場合、MFAは事実上必須と考えてよい設定です。

SSOとは?

SSO(Single Sign-On)は、企業の認証基盤(IdP:Identity Provider)に一度ログインすれば、各サービスに個別のパスワードを入力せずにログインできる仕組みです。Snowflakeでは主にSAML2を使ったSSOがサポートされており、Okta・Microsoft Entra ID(旧Azure AD)・Google Workspaceなどと連携できます。

SSOを導入すると、退職者のアカウント無効化・パスワードポリシー・MFA要件などをIdP側で一元管理できるため、運用負荷とリスクを減らせます。

MFAとSSOの違い

MFAとSSOはどちらも認証強化に使われますが、役割は別物です。次の表で整理しておきましょう。

項目MFASSO
目的パスワード漏えい時の不正ログインを防ぐ企業の認証基盤にログインを統一する
主な対象人間ユーザー人間ユーザー
代表例パスワード + Duo Mobile / OTPOkta / Microsoft Entra ID / Google Workspace
Snowflake側の設定MFA登録、Authentication PolicySAML2 Security Integration
注意点サービスユーザーには向かないIdP側でMFAを強制する設計が重要

実務では、SSOで認証を集約しつつ、IdP側でMFAを強制するのが標準的なゴールです。Snowflake側でも追加でMFAを要求したい場合は、Authentication Policyを使います。

SnowsightでMFAを登録する方法

人間ユーザーがパスワード認証を使う場合、Snowsightから自分でMFAを登録します。手順の概要は次の通りです。

  1. Snowsightにログインし、右上のユーザーアイコンから My Profile を開く
  2. Multi-factor authentication の項目で Enroll を選択する
  3. スマートフォンに Duo Mobile などの認証アプリをインストールし、QRコードを読み取る
  4. 表示された確認コードを入力し、登録を完了する

MFAを登録できるようにするには、Authentication Policyで CLIENT_TYPESSNOWFLAKE_UI を含めておく必要があります。デバイス紛失時のリセット手順も、運用ルールとして事前に決めておきましょう。

Authentication PolicyでMFAを必須化する方法

Authentication Policyを使うと、MFA登録の必須化、認証方式、SSOユーザーへのMFA要求、利用できるクライアント種別をまとめて制御できます。アカウント単位・ユーザー単位の両方で設定可能です。

パスワードユーザーにMFAを必須化する例:

USE ROLE ACCOUNTADMIN;

CREATE AUTHENTICATION POLICY require_mfa_for_password_users
  MFA_ENROLLMENT = 'REQUIRED'
  MFA_POLICY = (
    ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'NONE'
  );

ALTER ACCOUNT SET AUTHENTICATION POLICY require_mfa_for_password_users;

SSOユーザーにもSnowflake側のMFAを要求する例:

USE ROLE ACCOUNTADMIN;

CREATE AUTHENTICATION POLICY require_mfa_for_all_auth
  MFA_ENROLLMENT = 'REQUIRED'
  MFA_POLICY = (
    ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'ALL'
  );

ALTER ACCOUNT SET AUTHENTICATION POLICY require_mfa_for_all_auth;
  • SSOユーザーのMFAは通常IdP側で制御することが多いです。
  • Snowflake側でも追加でMFAを求めたい場合に ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'ALL' を検討します。
  • MFA_ENROLLMENT を使う場合、ユーザーがMFA登録できるように CLIENT_TYPESSNOWFLAKE_UI を含める必要があります。
  • オプションの厳密な名前・挙動はSnowflake側の仕様変更で更新される可能性があるため、最新情報は公式ドキュメントを確認してください。

SSOを設定する方法

SSOは、SnowflakeにSAML2の Security Integration を作成し、IdP側にSnowflakeをアプリケーションとして登録することで設定します。証明書を直接貼り付ける方法もありますが、METADATA_URL を使うとIdP側のメタデータを参照でき、証明書更新時の管理がしやすくなります。

USE ROLE ACCOUNTADMIN;

CREATE SECURITY INTEGRATION my_okta_sso
  TYPE = SAML2
  ENABLED = TRUE
  METADATA_URL = 'https://your-company.okta.com/app/xxxx/sso/saml/metadata'
  SAML2_SNOWFLAKE_ISSUER_URL = 'https://<orgname>-<account_name>.snowflakecomputing.com'
  SAML2_SNOWFLAKE_ACS_URL = 'https://<orgname>-<account_name>.snowflakecomputing.com/fed/login';
  • METADATA_URL を使うとIdP側のメタデータを参照でき、証明書ローテーション時の更新が楽になります。
  • SAML2_SNOWFLAKE_ISSUER_URLSAML2_SNOWFLAKE_ACS_URL は、IdP側に設定したSnowflake URLと一致させます。
  • ACS URLには通常 /fed/login が付きます。
  • SAML2_ENABLE_SP_INITIATED を有効にすると、Snowflakeのログイン画面からSSOボタンを表示できます。

SP initiated loginを有効化する例:

ALTER SECURITY INTEGRATION my_okta_sso
  SET SAML2_ENABLE_SP_INITIATED = TRUE;

ALTER SECURITY INTEGRATION my_okta_sso
  SET SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'Okta';

続いて、SSO対象ユーザーの LOGIN_NAMEEMAIL をIdP側のメールアドレスやNameIDに合わせます。

ALTER USER taro_yamada SET
  LOGIN_NAME = 'taro@example.com'
  EMAIL = 'taro@example.com'
  DISABLED = FALSE;
  • IdP側のNameIDまたはユーザー識別子と、Snowflake側の LOGIN_NAME / EMAIL の対応を必ず確認します。
  • ユーザー名の不一致は、SSOログイントラブルでもっとも多い原因です。
  • 本番適用前に、少人数のテストユーザーでログイン挙動を確認しましょう。

Authentication PolicyでSSOのみを許可する例も紹介します。

CREATE AUTHENTICATION POLICY sso_only_policy
  AUTHENTICATION_METHODS = ('SAML')
  SECURITY_INTEGRATIONS = ('MY_OKTA_SSO');

ALTER ACCOUNT SET AUTHENTICATION POLICY sso_only_policy;
  • いきなり全アカウントに適用すると、管理者を含む全員がログインできなくなるリスクがあります。
  • まずはテストユーザーまたは一部ユーザーに適用し、挙動を確認してください。
  • 管理者用には、後述のBreak-glassアカウント向けの例外ポリシーを必ず用意してください。

SSOユーザーにもMFAを要求する場合

基本的にSSOユーザーのMFAは、IdP側のポリシーで強制するのが王道です。一方で、規制要件や監査対応などで「Snowflake側でも明示的にMFAを要求したい」というケースもあります。その場合は、前述の ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'ALL' を含むAuthentication Policyを使います。

ただし、IdP側とSnowflake側の二重MFAになるため、ユーザー体験への影響を事前に共有しておきましょう。

サービスユーザーはMFAではなくキーペア・OAuth・WIFを使う

人間が画面でログインするユーザーにはMFAが向いています。一方で、ETLツール、BIツール、Python、dbt、Airflow、Databricks、CI/CDなどで使うサービスユーザーには、MFAのような対話型認証は向いていません。サービスユーザーでは、パスワード認証ではなく、キーペア認証、OAuth、Programmatic Access Token、Workload Identity Federationなどを検討します。

認証方式主な用途特徴
キーペア認証Python、SnowSQL、CLI、ETLパスワードを使わず公開鍵・秘密鍵で認証
OAuthBIツール、外部アプリ連携IdPや認可サーバーと連携しやすい
Programmatic Access Token一部のプログラム接続短期間・スコープ付きの認証に使える
Workload Identity FederationCI/CD、クラウドワークロード長期シークレットを持たない認証に向く

サービスユーザー一覧と認証状況は、次のSQLで確認できます。

SHOW USERS;

SELECT
  "name",
  "type",
  "has_password",
  "has_rsa_public_key",
  "disabled"
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
ORDER BY "type", "name";
  • TYPE = SERVICE のユーザーにパスワード認証が残っていないか確認します。
  • has_rsa_public_key などを見て、キーペア認証へ移行できているかを確認します。
  • 実際の列名は環境やSnowflakeの仕様変更で異なる可能性があるため、SHOW USERS の結果列を確認してください。

キーペア認証への移行例(概要):

ALTER USER svc_etl_loader SET
  RSA_PUBLIC_KEY = '<PUBLIC_KEY_WITHOUT_HEADER_AND_FOOTER>';
  • 秘密鍵はSnowflakeに登録しません。
  • Snowflakeに登録するのは公開鍵だけです。
  • 秘密鍵はアプリケーション側で安全に管理します(Secret Manager、KMSなど)。
  • 鍵ローテーションのために RSA_PUBLIC_KEY_2 も活用できます。

キーペア認証の具体的な手順や鍵ローテーションの設計は、別記事「Snowflakeキーペア認証」で詳しく解説しているのでそちらもご覧ください。

管理者ロックアウトを防ぐBreak-glassアカウント

SSOやAuthentication Policyを強化していくと、IdP障害や設定ミスで管理者まで含めて誰もログインできなくなる「ロックアウト」のリスクが出てきます。これを防ぐのがBreak-glassアカウント(緊急時のみ使う管理者アカウント)の考え方です。

  • IdP障害時に備えて、緊急用のBreak-glass管理者アカウントを用意します。
  • Break-glassアカウントは少人数(2〜3名程度)に限定します。
  • 強力なパスワード + MFAを必須にします。
  • 通常業務では使わず、緊急時のみ使用します。
  • 使用時はLOGIN_HISTORYやQUERY_HISTORYで監査します。
  • ユーザー単位のAuthentication Policyで、全体ポリシーより緩い管理者用ポリシーを設定できます。
CREATE AUTHENTICATION POLICY admin_break_glass_policy
  AUTHENTICATION_METHODS = ('SAML', 'PASSWORD')
  CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI', 'SNOWSQL', 'DRIVERS');

ALTER USER break_glass_admin
  SET AUTHENTICATION POLICY admin_break_glass_policy;

SSOのみを許可する強力なポリシーをアカウントに適用しても、Break-glassアカウントだけは PASSWORD 認証を残しておくことで、いざというときの復旧経路を確保できます。

認証設定の確認SQL

設定後は、認証ポリシーやログイン履歴を定期的に確認します。

Authentication Policy一覧の確認:

SHOW AUTHENTICATION POLICIES;

アカウントに紐づくポリシー参照の確認:

SELECT *
FROM TABLE(
  INFORMATION_SCHEMA.POLICY_REFERENCES(
    REF_ENTITY_DOMAIN => 'ACCOUNT',
    REF_ENTITY_NAME => CURRENT_ACCOUNT()
  )
);

ユーザーのログイン履歴と認証方式の確認:

SELECT
  EVENT_TIMESTAMP,
  USER_NAME,
  IS_SUCCESS,
  ERROR_CODE,
  ERROR_MESSAGE,
  FIRST_AUTHENTICATION_FACTOR,
  SECOND_AUTHENTICATION_FACTOR,
  CLIENT_TYPE
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE EVENT_TIMESTAMP >= DATEADD('day', -7, CURRENT_TIMESTAMP())
ORDER BY EVENT_TIMESTAMP DESC;

失敗ログイン、想定外の認証方式、サービスユーザーからのパスワードログインなどを、このSQLで定期的に棚卸ししておくと、認証関連のインシデントを早期に検知できます。

よくあるトラブルと確認ポイント

症状主な原因確認ポイント
SSOボタンが表示されないSP initiated login未設定SAML2_ENABLE_SP_INITIATED、Authentication Policy
SSO後にログインできないNameIDとLOGIN_NAME不一致IdP側NameID、Snowflake側LOGIN_NAME
MFA登録画面に進めないSNOWFLAKE_UIが許可されていないAuthentication PolicyのCLIENT_TYPES
BIツールが接続できないパスワード認証廃止/MFA必須化の影響サービスユーザー、OAuth、キーペア
管理者がログインできないSSO設定ミス・IdP障害Break-glassアカウント
MFAデバイスを紛失したMFAリセットが必要管理者によるMFAリセット手順
SnowSQLやPythonが接続できない認証方式未対応KEYPAIR/OAUTH/PATの利用可否

トラブルシューティングの第一歩は、SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY でエラーコード・エラーメッセージ・認証要素を確認することです。詳細はSnowflakeログインできない時の対処法も参考にしてください。

運用時のベストプラクティス

  • 人間ユーザーはSSO + MFAを基本にする
  • SSOのMFAは、原則としてIdP側で強制する
  • 必要に応じてSnowflake側でもMFAを要求する(ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION)
  • サービスユーザーはパスワードではなくキーペア / OAuth / WIFを使う
  • サービスユーザーには最小権限ロールだけを付与する
  • 管理者用のBreak-glassアカウントを必ず用意する
  • いきなり全社適用せず、テストユーザーから段階的に適用する
  • LOGIN_HISTORY でログイン失敗や認証方式を定期的に確認する
  • Network Policy、RBAC、Session Policyと組み合わせて多層防御を構成する

実際の本番環境では、社内のセキュリティポリシーやIdP管理者と連携して設計・適用する必要があります。Snowflake側の設定だけで完結せず、IdP側のMFAポリシーやプロビジョニング(SCIM)も含めて全体設計するのがおすすめです。

ネットワーク制限やロール設計については、Snowflakeネットワークポリシー入門Snowflake RBAC入門Snowflakeカスタムロール設計もあわせてご覧ください。

まとめ

Snowflakeの認証設定は、MFAとSSOだけを個別に覚えるよりも、人間ユーザーとサービスユーザーを分けて考えると理解しやすくなります。人間ユーザーはSSO + MFA、サービスユーザーはキーペア認証・OAuth・WIFなどの非対話型認証を使うのが基本です。さらにAuthentication Policyを使えば、認証方式やMFA要件をアカウント単位・ユーザー単位で制御できます。まずはテストユーザーで検証し、管理者ロックアウト対策(Break-glassアカウント)を用意したうえで段階的に本番適用しましょう。

仕様や挙動の細部は時期によって変わるため、本記事を起点にしつつ、最新情報はSnowflake公式ドキュメントで必ず確認してください。

参考リンク

※リンク先のパスはSnowflake公式の構成変更で変わる可能性があります。最新のURL構成は公式ドキュメントトップから検索してください。

関連記事

この記事をシェアする𝕏B!FacebookLINEPocket