多要素認証(MFA)

Snowflakeは多要素認証(つまり、 MFA)をサポートしており、Snowflakeに接続するユーザーのログインセキュリティを強化しています。MFA サポートは、Snowflakeが包括的に管理する Duo Security サービスを搭載した、Snowflakeに統合済みの機能として提供されます。

複数のスマートフォンプラットフォーム(iOS、Android、Windowsなど)でサポートされているDuo Mobileアプリケーションをインストールする以外に、Duoに個別にサインアップしたり、タスクを実行したりする必要はありません。サポートされているプラットフォーム/デバイスとDuo多要素認証の仕組みの詳細については、 Duoユーザーガイド をご参照ください。

MFA はユーザーごとに有効化されます。ただし、現時点では、ユーザーは自動的に MFA に登録されません。MFA を使用するには、ご自身でご登録ください。

注意

少なくとも、ACCOUNTADMIN のロールがあるすべてのユーザーが MFA を使用することをSnowflakeでは 強く お勧めします。

このトピックの内容:

前提条件

Duoアプリケーションサービスは、 TCP ポート 443 を介して通信します。

一貫した動作を確保するには、ファイアウォール設定を更新して、 TCP ポート 443 にDuoアプリケーションサービスを含めます。

*.duosecurity.com:443

詳細については、 Duoのドキュメント をご参照ください。

MFA のログインフロー

次の図は、接続に使用されるインターフェイスに関係なく、MFA に登録されているユーザーのログインフロー全体を示しています。

MFA login flow

MFA でのSnowflakeユーザーの登録

Snowflakeユーザーは誰でも、ウェブインターフェイスから MFA に自己登録できます。詳細については、 ユーザー設定の管理 をご参照ください。

アカウントとユーザーの MFA の管理

アカウントレベルでは、MFA は管理を必要としません。アカウントで自動的に有効になり、すべてのユーザーが自己登録できます。ただし、ユーザーが電話を紛失したり、電話番号を変更して MFA でログインできない場合など、一時的または永続的に、ユーザーの MFA を無効にする必要がある場合があります。

ALTER USER コマンドに次のプロパティを使用して、これらのタスクを実行できます。

  • MINS_TO_BYPASS_MFA

    ユーザーがログインできるように、ユーザーの MFA を一時的に何分間無効にするかを指定します。この時間が経過すると、MFA が適用され、ユーザーはDuo Mobileアプリケーションによって生成された一時トークンなしではログインできなくなります。

  • DISABLE_MFA

    ユーザーの MFA を無効化して、登録を事実上キャンセルします。MFA を再度使用するには、再登録する必要があります。

    注釈

    DISABLE_MFA はSnowflakeテーブルまたはビューの列ではありません。アカウント管理者が ALTER USERコマンドを実行して DISABLE_MFA を TRUE に設定すると、 EXT_AUTHN_DUO プロパティの値は自動的に FALSE に設定されます。

    特定のユーザーに対して MFA が無効になっていることを確認するには、 DESCRIBE USER ステートメントを実行し、 EXT_AUTHN_DUO プロパティの値を確認します。

MFA によるSnowflakeへの接続

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

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

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

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

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

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

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

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

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

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

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

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

Snowflakeは、次のクライアントバージョンで MFA トークンキャッシュをサポートしています。

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

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

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

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

ちなみに

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

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

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

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

    -- account-level
    
    alter account set allow_client_mfa_caching = true;
    
  2. クライアント接続文字列で、認証コードの値を authenticator = username_password_mfa に更新します。

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

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

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

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

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

      If you need to install other extras (for example, pandas for using the Python Connector APIs for Pandas), use a comma between the extras:

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

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

ウェブインターフェイスと MFA の併用

MFA を使用してSnowflakeウェブインターフェイスにログインするには、次を実行します。

  1. ブラウザーでアカウントの URL を指定します(例: https://xy12345.snowflakecomputing.comhttps://xy12345.eu-central-1.snowflakecomputing.com)。

  2. 認証情報(ユーザーログイン名とパスワード)を入力します。

    MFA login
  3. Duo Pushが有効化されている場合は、プッシュ通知がDuo Mobileアプリケーションに送信されます。通知を受け取ったら、 Approve をクリックしてSnowflakeにログインします。

    MFA approval

    上記のスクリーンショットに示すように、プッシュ通知を使用する代わりに次も選択できます。

    • Call Me をクリックして、登録済みのモバイルデバイスへの通話からログイン手順を受け取ります

    • Duo Mobileアプリケーションによって提供されるパスコードを手動で入力して、 Enter a Passcode をクリックしてログインします。

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

条件:

  • パスコード文字列 は、接続中のユーザーに対して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

ODBC で MFA を使用

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

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

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

条件:

  • パスコード文字列 は、接続中のユーザーに対して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

条件:

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

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

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

MFA エラーコード

以下は、認証フロー中に返される可能性のある MFA に関連するエラーコードです。

エラーは、ログイン試行の失敗ごとに表示されます。履歴データは、 情報スキーマアカウントの使用 にもあります。

エラーコード

エラー

説明

390120

EXT_AUTHN_DENIED

Duo Security認証が拒否されました。

390121

EXT_AUTHN_PENDING

Duo Security認証は保留中です。

390122

EXT_AUTHN_NOT_ENROLLED

ユーザーはDuo Securityに登録されていません。ローカルシステム管理者に連絡してください。

390123

EXT_AUTHN_LOCKED

ユーザーはDuo Securityからロックされています。ローカルシステム管理者に連絡してください。

390124

EXT_AUTHN_REQUESTED

Duo Security認証が必要です。

390125

EXT_AUTHN_SMS_SENT

Duo Security一時パスコードは SMS 経由で送信されます。パスコードを使用して認証してください。

390126

EXT_AUTHN_TIMEOUT

Duo Mobileを介したログインリクエストの承認を待っている間にタイムアウトしました。モバイルデバイスにデータサービスがない場合は、Duoパスコードを生成し、接続文字列に入力します。

390127

EXT_AUTHN_INVALID

誤ったパスコードが指定されました。

390128

EXT_AUTHN_SUCCEEDED

Duo Security認証が成功しました。

390129

EXT_AUTHN_EXCEPTION

外部サービスプロバイダーとの通信の問題により、リクエストを完了できませんでした。後でもう一度お試しください。

390132

EXT_AUTHN_DUO_PUSH_DISABLED

MFA でDuo Pushが有効になっていません。接続文字列の一部としてパスコードを提供します。