多要素認証(MFA)

多要素認証 (MFA) は、パスワード認証に伴うセキュリティリスクを軽減します。パスワードユーザーが MFA に登録されている場合、Snowflake にサインインする際に第二認証を使用する必要があります。このようなユーザーは、パスワードを入力し、2つ目の要素を使用します。ユーザーが第二認証として使用できる MFA メソッドを追加する方法については、 第二認証の構成 を参照してください。

MFA は、パスワードで認証する 人間のユーザー を対象としています。サービスユーザー は別の認証を使用する必要があります。これらのユーザータイプの詳細情報については、 ユーザーのタイプ を参照してください。

重要

すべてのお客様のセキュリティ体制を向上させるため、Snowflakeはすべてのパスワードサインインに MFA を要求する変更をロールアウトします。このロールアウトに関する情報は、 単一要素パスワードサインインの廃止計画 を参照してください。

ユーザーへの MFA 登録の義務付け

現在のところ、 2024_08 動作変更バンドル が有効化されたときにアカウントが存在したかどうかによって、 MFA を組織に実装するための戦略は異なります。

  • 2024_08 バンドルが有効になる前にアカウントが存在していた場合、人間のユーザーに MFA を使用するように要求する場合は、アカウントを構成する必要があります。すべての人間ユーザーに MFA への登録を要求する MFA の実装に関する情報については、 MFA を使用してユーザーまたはアカウントの認証を強化します。 を参照してください。

  • アカウントが 2024_08 バンドルが有効化された後に作成された場合、パスワードで認証するすべてのヒューマンユーザーは、デフォルトで MFA に登録する必要があります。この MFA 要件はサービスユーザーには適用されません。

    すべての人間ユーザーが MFA に登録するという要件を無効にしたい場合は、 MFA_ENROLLMENT=OPTIONAL でカスタム認証ポリシーを作成し、アカウントに認証ポリシーをセットします。認証ポリシーの作成とセットの詳細情報については、 認証ポリシー を参照してください。

    強制的な MFA からのオプトアウトは仮のものであることに注意してください。単一要素パスワードサインインの廃止計画 を参照してください。

どの MFA の方法が利用可能かを制限する

ユーザーが MFA に登録されると、第二認証として MFA を使用する必要があります。Snowflake では以下の MFA メソッドが使用できます。

  • 様々な方法で保存・アクセス可能なパスキーによる認証。

  • 時間ベースのワンタイムパスコード (TOTP) を生成する認証アプリでの認証。

  • Duoでの認証。

Tip

どの MFA 方式を許可するかを決める際には、以下の点に留意してください。

  • パスキーはセキュリティと使い勝手の良さから推奨されています。

  • Duoは、他の MFA 方式のように複製はできません。

MFA 管理者として、 認証ポリシー を使用して、どの認証方法を第 2 認証要素として使用できるかを制御することができます。たとえば、次の認証ポリシーでは、ユーザーはパスキーまたは認証アプリを第 2 認証要素として使用できますが、Duo は使用できません。

CREATE AUTHENTICATION POLICY require_mfa_policy
  MFA_AUTHENTICATION_METHODS = ('PASSWORD')
  MFA_ENROLLMENT = REQUIRED
  MFA_POLICY = (ALLOWED_METHODS = ('PASSKEY', 'TOTP'));
Copy

現在禁止されている MFA メソッドをユーザーが以前に構成した場合、次回サインインするときに、既存のメソッドを使用して認証するよう求められ、次に許可された新しいメソッドを構成するよう求められます。

パラメーター MFA_POLICY の詳細については、 CREATE AUTHENTICATION POLICY をご参照ください。

ユーザーの MFA メソッドの削除

ユーザーが以前に追加した MFA メソッドを削除して、2 つ目の認証要素として使用できなくすることができます。

  1. SHOW MFA METHODS コマンドを実行し、 name 列の値を見つけます。例えば、ユーザー joe の MFA メソッドを削除する場合、以下を実行し、出力から MFA メソッドの name をコピーします。

    SHOW MFA METHODS FOR USER joe;
    
    Copy
    +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
    |   name        |      type       |    comment             |     last_used                 |        created_on               |  additional_info    |
    +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
    | TOTP-48A7     |    TOTP         | Authenticator App 48A7 | 2025-02-26 11:14:38.000 -0800 |  2025-02-26 11:13:19.000 -0800  | null                |
    +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
    
  2. ALTER USER ... REMOVE MFA METHOD ステートメントを実行し、 MFA メソッドを削除します。

    ALTER USER joe REMOVE MFA METHOD TOTP-48A7;
    
    Copy

ロックアウトされたユーザーの回復

パスワードユーザーが第二認証にアクセスできないために Snowflake からロックアウトされた場合、管理者は、 一時的に MFA を無効にするか、ユーザー が新しい MFA メソッド をセットアップするのを支援することによって、サインイン能力を回復させることができます。

ユーザーに新しい MFA メソッドを追加するよう促します。

ユーザーが第二認証要素として使用している MFA メソッドへのアクセスを失った場合(例えば、パスキーを保存している YubiKey を紛失した場合など)、管理者はユーザーが新しい MFA メソッドをセットアップし、Snowflake にサインインできるようにサポートすることができます。

ユーザーが MFA メソッドにアクセスできず、新しいメソッドをセットアップする必要がある場合、管理者は ALTER USER ... ENROLL MFA ステートメントを実行します。例えば、ユーザー joe が新しい MFA メソッドを確立する必要がある場合、管理者は以下のように実行できます。

ALTER USER joe ENROLL MFA;
Copy
  • ユーザーが 認証済みメール を持っている場合、Snowflake は MFA 認証方法を追加するよう促すメールを送信します。

  • ユーザーが認証済みメールを持っていない場合、Snowflakeはユーザーに MFA 認証方法を追加するよう促すページの URL を返します。管理者は、この URL をロックアウトされたユーザーに送信できます。

一時的に MFA 無効化

管理者がユーザーに対して MFA を一時的に無効にする必要がある場合、 ALTER USER ... SET MINS_TO_BYPASS_MFA ステートメントを実行することができます。たとえば、 MFA を一時的に無効にして、ユーザー joe が 30 分間 1 要素パスワードで認証できるようにするには、以下を実行します:

ALTER USER joe SET MINS_TO_BYPASS_MFA = 30;
Copy

ブレイクグラス アクセス管理者のセットアップ

ブレイクグラスとは、通常はアカウントで利用できない代替認証方法を使用してログする機能のことです。通常の認証方法が使用できなくなった場合、管理者はSnowflakeへのブレイクグラスアクセスが必要になります。たとえば、組織のIDプロバイダーが停止した場合などです。

組織は、専用のSnowflakeユーザーを作成し、ユーザーのパスワード認証情報をKey Vaultに保存することで、ブレイクグラスアクセスを提供できます。管理者は、ユーザーのパスワードを使用してvaultに保存できる1つ以上の1回限りのパスコード(OTPs)を生成できます。Snowflakeにアクセスするため、管理者は Vault からパスワードと OTP を取得してサインインします。OTPs を使用することで保護の追加レイヤーを作成し、Snowflakeの多要素認証要件を満たします。

重要

OTP は認証に使用された後、無効になり、再度認証には使用できません。

追加の OTPs が利用できず、ユーザーが別の MFA メソッドを持っていない場合、ユーザーはセッションの有効期限が切れるとロックアウトされる可能性があります。常にバックアップ MFA メソッドが利用できるようにして、ユーザーの偶発的なロックアウトを防ぎます。ロックアウトされたユーザーの回復については、ロックアウトされたユーザーの回復 をご参照ください。

1回限りのパスコードの生成

ユーザーに1つ以上の OTPs を生成するには、ALTER USER ... ADD MFA METHOD OTP コマンドを実行します。オプションの COUNT キーワードによって、OTPs の生成数が決まります。たとえば、ユーザー breakglass_user に5つの OTPs を生成するには、次のコマンドを実行します。

ALTER USER breakglass_user ADD MFA METHOD OTP COUNT = 5;
Copy

コードが生成されると、Snowflakeに認証するときに、そのコードを認証の2番目の要素として使用できます。

1回限りのパスコードの無効化

1回限りのパスコード(OTP)を無効にする場合は、次のオプションがあります。このため、認証には使用できません。

ユーザーの既存の OTPs をすべて無効化する

  • ALTER USER ... ADD MFA METHOD OTP コマンドを使用して、新しい OTPs を生成します。以前に生成された OTPs が無効になります。

現在のユーザーの特定の OTP を無効化する

  • Snowsight を使用して、次の手順を実行して OTP を無効化します。

    1. 左側のナビゲーションで、自分の名前を選択します。

    2. ユーザーメニューから、Settings を選択します。

    3. Authentication を選択します。

    4. Multi-factor authentication セクションで、OTP を見つけ、More アイコンを選択します。

    5. Unenroll を選択し、OTP を削除することを確認します。

別のユーザーの特定の OTP を無効化する

  • ALTER USER ... REMOVE MFA METHOD コマンドを使用して、別のユーザーの特定の OTP を無効化します。自分の OTP を無効化する場合は、Snowsight を使用します。たとえば、ユーザー joeOTP_2 パスコードを無効にするには、次のコマンドを実行します。

    ALTER USER joe REMOVE MFA METHOD OTP_2;
    
    Copy

MFA によるSnowflakeへの接続

MFA のログインは、主にウェブインターフェイスを介してSnowflakeに接続するために設計されていますが、 Snowflake CLI、SnowSQL、Snowflake JDBC、Node.js、およびODBCドライバーでも総合的にサポートされています。

注釈

MFA 固定電話または電話コールバックを使用した構成は、ODBC および JDBC のようなドライバーとの接続をサポートしていません。

MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える --- オプション

MFA トークンキャッシングは、Snowflakeへの接続および認証中に確認する必要のあるプロンプトの数を減らすのに役立ちます。特に、比較的短い時間間隔内に複数の接続が試行された場合に役立ちます。

キャッシュされた MFA トークンは最大4時間有効です。

次の条件のいずれかが満たされた場合、キャッシュされた MFA トークンは無効です。

  1. アカウントの ALLOW_CLIENT_MFA_CACHING パラメーターは FALSE に設定されます。

  2. 認証方法が変わります。

  3. 認証情報が変更されます(つまり、ユーザー名やパスワード)。

  4. 認証情報が無効です。

  5. キャッシュされたトークンの有効期限が切れているか、暗号が無効です。

  6. キャッシュされたトークンに関連付けられているアカウント名が変更されます。

Snowflakeが MFA トークンをキャッシュするために使用する全体的なプロセスは、ブラウザーベースのフェデレーション シングルサインオン の接続トークンをキャッシュするために使用されるプロセスと似ています。クライアントアプリケーションは、 MFA トークンをクライアント側オペレーティングシステムのキーストアに保存します。ユーザーは、キャッシュされた MFA トークンをキーストアからいつでも削除できます。

Snowflakeは、以下のドライバー、コネクタ、ツールを使用した MFA トークンキャッシュをサポートしています。

  • NET ドライバーバージョン4.3.0(またはそれ以降)

  • ODBC ドライバーバージョン2.23.0(またはそれ以降)。

  • JDBC ドライバーバージョン3.12.16(またはそれ以降)。

  • Snowflakeバージョン2.3.7(またはそれ以降)用のPythonコネクタ。

  • Snowflake CLI バージョン3.0(またはそれ以降)

MFA トークンのキャッシュを有効にする前に、内部のセキュリティおよびコンプライアンス担当者に相談することをお勧めします。

Tip

MFA トークンキャッシングは、フェデレーション シングルサインオン の接続キャッシングと組み合わせることができます。

これら2つの機能を組み合わせるには、 ALLOW_ID_TOKEN パラメーターが ALLOW_CLIENT_MFA_CACHING パラメーターと並行して true に設定されていることを確認します。

MFA トークンのキャッシュを有効にするには、次のステップを実行します。

  1. アカウント管理者(つまり、 ACCOUNTADMIN システムロールを持つユーザー)として ALTER ACCOUNT コマンドを使用し、アカウントの ALLOW_CLIENT_MFA_CACHING パラメーターを true に設定します。

    ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
    
    Copy
  2. クライアント接続文字列で、認証コードの値を authenticator = username_password_mfa に更新します。

  3. ドライバーまたはコネクタに必要なパッケージまたはライブラリを追加します。

    • Python用Snowflakeコネクタを使用している場合は、次のコマンドを実行してオプションのキーリングパッケージをインストールします。

      pip install "snowflake-connector-python[secure-local-storage]"
      
      Copy

      コマンドに表示されているように、角括弧([ および ])を入力する必要があります。角括弧は、インストールする必要がある パッケージの追加部分 を指定します。

      角括弧がワイルドカードとして解釈されないようにするには、示されているようにパッケージ名を引用符で囲みます。

      他の追加機能をインストールする必要がある場合(たとえば、 Pandas用Pythonコネクタ APIs を使用 する場合は pandas)は、追加機能の間にコンマを使用します。

      pip install "snowflake-connector-python[secure-local-storage,pandas]"
      
      Copy
    • Snowflake JDBC ドライバーについては、 JNA クラスをクラスパスに追加します。 をご参照ください。

MFA トークンのキャッシュを無効にするには、 ALLOW_CLIENT_MFA_CACHING パラメーターの設定を解除します。

ALTER ACCOUNT UNSET ALLOW_CLIENT_MFA_CACHING;
Copy

ログインに多要素認証として MFA トークンキャッシングを使用しているすべてのユーザーを見つけるには、アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)として次の SQL ステートメントを実行します。

SELECT EVENT_TIMESTAMP,
       USER_NAME,
       IS_SUCCESS
  FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
  WHERE SECOND_AUTHENTICATION_FACTOR = 'MFA_TOKEN';
Copy

MFA と SnowSQL の併用

MFA を使用して、SnowSQL を介してSnowflakeに接続できます。デフォルトでは、ユーザーが MFA に登録されると、Duo Push認証メカニズムが使用されます。

プッシュメカニズムの代わりにDuoが生成したパスコードを使用するには、ログインパラメーターに次の接続オプションのいずれかを含める必要があります。

--mfa-passcode <文字列> OR --mfa-passcode-in-password

詳細については、 SnowSQL (CLI クライアント) をご参照ください。

JDBC と MFA の併用

MFA を使用して、Snowflake JDBC ドライバーを介してSnowflakeに接続できます。デフォルトでは、ユーザーが MFA に登録されると、Duo Push認証メカニズムが使用されます。JDBC 接続文字列を変更する必要はありません。

プッシュメカニズムの代わりにDuoが生成したパスコードを使用するには、次のパラメーターのいずれかを JDBC 接続文字列に含める必要があります。

passcode=<パスコード文字列> OR passcodeInPassword=on

条件:

  • passcode_string は、接続中のユーザーに対してDuoが生成したパスコードです。これは、Duo Mobileアプリケーションによって生成されたパスコードまたは SMS パスコードのいずれかになります。

  • passcodeInPassword=on の場合、パスワードとパスコードは <パスワード文字列><パスコード文字列> の形式で連結されます。

詳細については、 JDBCドライバー をご参照ください。

Duoを使用した JDBC 接続文字列の例

Duoパスコードを使用して(US 西部地域における) xy12345 アカウントに接続するユーザー demo のJDBC 接続文字列:

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcode=123456
Copy

パスワードに埋め込まれたDuoパスコードを使用して xy12345 アカウント(US 西部地域における)に接続するユーザー demo の JDBC 接続文字列:

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcodeInPassword=on
Copy

Node.jsでの MFA の使用

MFA は、Snowflake Node.jsドライバーを介してSnowflakeに接続するために使用できます。デフォルトでは、ユーザーが MFA に登録されると、Duo Push認証メカニズムが使用されます。

プッシュメカニズムの代わりにDuoが生成したパスコードを使用するには、ログインパラメーターに次の接続オプションのいずれかを含める必要があります。どちらの例も、 abc123 のパスワードと、 987654 の MFA パスコードを使い、設定を示しています。

  • passcodeInPassword オプションを true に設定し、以下のようにパスワード文字列の一部としてパスコードを含めます。

    authenticator: 'USERNAME_PASSWORD_MFA',
    password: "abc123987654", // passcode 987654 is part of the password
    passcodeInPassword: true  // because passcodeInPassword is true
    
    Copy
  • passcode オプションをパスコードの値に設定し、以下のようにパスワードとパスコードを別々に指定します。

    authenticator: 'USERNAME_PASSWORD_MFA',
    password: "abc123", // password and MFA passcode are input separately
    passcode: "987654"
    
    Copy

    この方法を使うには、 passcodeInPassword オプションが false (デフォルト値)になっていることを確認してください。passcodeInPasswordtrue に設定され、 passcode も設定されている場合、 passcodeInPassword の設定が優先され、ドライバーは認証時に、 password フィールドにパスワードと MFA パスコードの両方が含まれているとみなします。

詳細については、 MFA パスコードを使用する をご参照ください。

ODBC で MFA を使用

MFA を使用して、Snowflake ODBC ドライバーを介してSnowflakeに接続できます。デフォルトでは、ユーザーが MFA に登録されると、Duo Push認証メカニズムが使用されます。ODBC 設定を変更する必要はありません。

プッシュメカニズムの代わりにDuoが生成したパスコードを使用するには、ドライバーに次のパラメーターのいずれかを指定する必要があります。

passcode=<パスコード文字列> OR passcodeInPassword=on

条件:

  • passcode_string は、接続中のユーザーに対してDuoが生成したパスコードです。これは、Duo Mobileアプリケーションによって生成されたパスコードまたは SMS パスコードのいずれかになります。

  • passcodeInPassword=on の場合、パスワードとパスコードは <パスワード文字列><パスコード文字列> の形式で連結されます。

詳細については、 ODBCドライバー をご参照ください。

Pythonと MFA の併用

MFA を使用して、Snowflake Python Connectorを介してSnowflakeに接続できます。デフォルトでは、ユーザーが MFA に登録されると、Duo Push認証メカニズムが使用されます。Python API 呼び出しを変更する必要はありません。

プッシュメカニズムの代わりにDuoで生成されたパスコードを使用するには、connect()メソッドでドライバーに次のパラメーターのいずれかを指定する必要があります。

passcode=<パスコード文字列> OR passcode_in_password=True

条件:

  • passcode_string は、接続中のユーザーに対してDuoが生成したパスコードです。これは、Duo Mobileアプリケーションによって生成されたパスコードまたは SMS パスコードのいずれかになります。

  • passcode_in_password=True の場合、パスワードとパスコードは <パスワード文字列><パスコード文字列> の形式で連結されます。

詳細については、Pythonコネクタ API ドキュメントの 関数 セクションにあるconnect()メソッドの説明をご参照ください。