多要素認証(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'));
現在禁止されている MFA メソッドをユーザーが以前に構成した場合、次回サインインするときに、既存のメソッドを使用して認証するよう求められ、次に許可された新しいメソッドを構成するよう求められます。
パラメーター MFA_POLICY の詳細については、 CREATE AUTHENTICATION POLICY をご参照ください。
ユーザーの MFA メソッドの削除¶
ユーザーが以前に追加した MFA メソッドを削除して、2 つ目の認証要素として使用できなくすることができます。
SHOW MFA METHODS コマンドを実行し、
name
列の値を見つけます。例えば、ユーザーjoe
の MFA メソッドを削除する場合、以下を実行し、出力から MFA メソッドのname
をコピーします。SHOW MFA METHODS FOR USER joe;
+---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+ | 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 | +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
ALTER USER ... REMOVE MFA METHOD ステートメントを実行し、 MFA メソッドを削除します。
ALTER USER joe REMOVE MFA METHOD TOTP-48A7;
ロックアウトされたユーザーの回復¶
パスワードユーザーが第二認証にアクセスできないために Snowflake からロックアウトされた場合、管理者は、 一時的に MFA を無効にするか、ユーザー が新しい MFA メソッド をセットアップするのを支援することによって、サインイン能力を回復させることができます。
ユーザーに新しい MFA メソッドを追加するよう促します。¶
ユーザーが第二認証要素として使用している MFA メソッドへのアクセスを失った場合(例えば、パスキーを保存している YubiKey を紛失した場合など)、管理者はユーザーが新しい MFA メソッドをセットアップし、Snowflake にサインインできるようにサポートすることができます。
ユーザーが MFA メソッドにアクセスできず、新しいメソッドをセットアップする必要がある場合、管理者は ALTER USER ... ENROLL MFA ステートメントを実行します。例えば、ユーザー joe
が新しい MFA メソッドを確立する必要がある場合、管理者は以下のように実行できます。
ALTER USER joe ENROLL MFA;
ユーザーが 認証済みメール を持っている場合、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;
ブレイクグラス アクセス管理者のセットアップ¶
ブレイクグラス・アクセスとは、通常の認証方法をバイパスする能力のことです。例えば、組織のIDプロバイダーがダウンした場合など、通常の認証が利用できなくなった場合、管理者はSnowflakeへのブレイクグラスアクセスが必要です。
多くの場合、組織はSnowflake専用ユーザーを作成し、そのパスワード認証情報を暗号キー保管庫に保管することで、ブレイクグラスアクセスを提供しています。MFA が強制される場合、このパスワードを使用するすべての管理者は、第 2 認証要素として使用できる独自の MFA メソッドを持たなければなりません。このような場合、Snowflakeは各管理者が認証アプリを第2要素として使用できるように、 TOTP MFA メソッドをセットアップすることを推奨します。MFA メソッドを構成する際に説明的なコメントを使用すると、管理者を区別するのに役立ちます。
MFA によるSnowflakeへの接続¶
MFA のログインは、主にウェブインターフェイスを介してSnowflakeに接続するために設計されていますが、 SnowSQL、Snowflake JDBC、Node.js、および ODBC ドライバーでも総合的にサポートされています。
MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える --- オプション¶
MFA トークンキャッシングは、Snowflakeへの接続および認証中に確認する必要のあるプロンプトの数を減らすのに役立ちます。特に、比較的短い時間間隔内に複数の接続が試行された場合に役立ちます。
キャッシュされた MFA トークンは最大4時間有効です。
次の条件のいずれかが満たされた場合、キャッシュされた MFA トークンは無効です。
アカウントの ALLOW_CLIENT_MFA_CACHING パラメーターは FALSE に設定されます。
認証方法が変わります。
認証情報が変更されます(つまり、ユーザー名やパスワード)。
認証情報が無効です。
キャッシュされたトークンの有効期限が切れているか、暗号が無効です。
キャッシュされたトークンに関連付けられているアカウント名が変更されます。
Snowflakeが MFA トークンをキャッシュするために使用する全体的なプロセスは、ブラウザーベースのフェデレーション シングルサインオン の接続トークンをキャッシュするために使用されるプロセスと似ています。クライアントアプリケーションは、 MFA トークンをクライアント側オペレーティングシステムのキーストアに保存します。ユーザーは、キャッシュされた MFA トークンをキーストアからいつでも削除できます。
Snowflakeは、 macOS およびWindows上で、以下のドライバー、コネクタ、ツールを使用した MFA トークンキャッシュをサポートしています。この機能はLinuxではサポートされていません。
Snowflake CLI バージョン3.0(またはそれ以降)
ODBC ドライバーバージョン2.23.0(またはそれ以降)。
JDBC ドライバーバージョン3.12.16(またはそれ以降)。
Snowflakeバージョン2.3.7(またはそれ以降)用のPythonコネクタ。
MFA トークンのキャッシュを有効にする前に、内部のセキュリティおよびコンプライアンス担当者に相談することをお勧めします。
Tip
MFA トークンキャッシングは、フェデレーション シングルサインオン の接続キャッシングと組み合わせることができます。
これら2つの機能を組み合わせるには、 ALLOW_ID_TOKEN パラメーターが ALLOW_CLIENT_MFA_CACHING パラメーターと並行して true
に設定されていることを確認します。
MFA トークンのキャッシュを有効にするには、次のステップを実行します。
アカウント管理者(つまり、 ACCOUNTADMIN システムロールを持つユーザー)として ALTER ACCOUNT コマンドを使用し、アカウントの ALLOW_CLIENT_MFA_CACHING パラメーターを
true
に設定します。ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
クライアント接続文字列で、認証コードの値を
authenticator = username_password_mfa
に更新します。ドライバーまたはコネクタに必要なパッケージまたはライブラリを追加します。
Python用Snowflakeコネクタを使用している場合は、次のコマンドを実行してオプションのキーリングパッケージをインストールします。
pip install "snowflake-connector-python[secure-local-storage]"
コマンドに表示されているように、角括弧(
[
および]
)を入力する必要があります。角括弧は、インストールする必要がある パッケージの追加部分 を指定します。角括弧がワイルドカードとして解釈されないようにするには、示されているようにパッケージ名を引用符で囲みます。
他の追加機能をインストールする必要がある場合(たとえば、 Pandas用Pythonコネクタ APIs を使用 する場合は
pandas
)は、追加機能の間にコンマを使用します。pip install "snowflake-connector-python[secure-local-storage,pandas]"
Snowflake JDBC ドライバーについては、 JNA クラスをクラスパスに追加します。 をご参照ください。
MFA トークンのキャッシュを無効にするには、 ALLOW_CLIENT_MFA_CACHING パラメーターの設定を解除します。
ALTER ACCOUNT UNSET ALLOW_CLIENT_MFA_CACHING;
ログインに多要素認証として MFA トークンキャッシングを使用しているすべてのユーザーを見つけるには、アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)として次の SQL ステートメントを実行します。
SELECT EVENT_TIMESTAMP,
USER_NAME,
IS_SUCCESS
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE SECOND_AUTHENTICATION_FACTOR = 'MFA_TOKEN';
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=<パスコード文字列>
ORpasscodeInPassword=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
パスワードに埋め込まれたDuoパスコードを使用して xy12345
アカウント(US 西部地域における)に接続するユーザー demo
の JDBC 接続文字列:
jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcodeInPassword=on
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
passcode
オプションをパスコードの値に設定し、以下のようにパスワードとパスコードを別々に指定します。authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123", // password and MFA passcode are input separately passcode: "987654"
この方法を使うには、
passcodeInPassword
オプションがfalse
(デフォルト値)になっていることを確認してください。passcodeInPassword
がtrue
に設定され、passcode
も設定されている場合、passcodeInPassword
の設定が優先され、ドライバーは認証時に、password
フィールドにパスワードと MFA パスコードの両方が含まれているとみなします。
詳細については、 MFA パスコードを使用する をご参照ください。
ODBC で MFA を使用¶
MFA を使用して、Snowflake ODBC ドライバーを介してSnowflakeに接続できます。デフォルトでは、ユーザーが MFA に登録されると、Duo Push認証メカニズムが使用されます。 ODBC 設定を変更する必要はありません。
プッシュメカニズムの代わりにDuoが生成したパスコードを使用するには、ドライバーに次のパラメーターのいずれかを指定する必要があります。
passcode=<パスコード文字列>
ORpasscodeInPassword=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=<パスコード文字列>
ORpasscode_in_password=True
条件:
passcode_string
は、接続中のユーザーに対してDuoが生成したパスコードです。これは、Duo Mobileアプリケーションによって生成されたパスコードまたは SMS パスコードのいずれかになります。passcode_in_password=True
の場合、パスワードとパスコードは<パスワード文字列><パスコード文字列>
の形式で連結されます。
詳細については、Pythonコネクタ API ドキュメントの 関数 セクションにあるconnect()メソッドの説明をご参照ください。