多要素認証(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
Copy

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

MFA のログインフロー

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

MFA login flow

MFA でのSnowflakeユーザーの登録

Snowflakeユーザーは誰でも、ウェブインターフェイスから MFA に自己登録できます。詳細については、 Snowsightを使用してユーザープロファイルを管理する をご参照ください。

MFA に使用する電話の切り替え

Instant Restoreは、ユーザーが新しい電話に切り替える前にDuoアプリをバックアップできるようにするDuoの機能です。Snowflakeユーザーが最初に古い電話をバックアップしている限り、Instant Restoreを使用して、Snowflakeの MFA を中断することなく、新しい電話で認証を有効にすることができます。

ユーザーが古い電話をバックアップしていないか、古い電話を紛失した場合、Snowflakeアカウント管理者は、新しい電話で MFA を再度有効にする前に、古い電話を使用していた各ユーザー名の MFA を無効にする 必要があります。

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

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

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

  • MINS_TO_BYPASS_MFA

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

  • DISABLE_MFA

    ユーザーの MFA を無効化して、登録を事実上キャンセルします。ユーザーが MFA に登録されていないことを確認するために、ブラウザーの更新が必要な場合があります。MFA を再度使用するには、再登録する必要があります。

    注釈

    DISABLE_MFA は、Snowflakeテーブルまたはビューの列ではありません。アカウント管理者が ALTER USERコマンドを実行して DISABLE_MFATRUE に設定すると、 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は、 macOS およびWindowsで次のドライバーとコネクタを使用した MFA トークンキャッシュをサポートしています。この機能はLinuxではサポートされていません。

  • 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 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

Snowsight での MFA の使用

MFA で Snowsight に直接サインインするには、

  1. Snowsightにサインインします

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

  3. Duo Pushが有効になっている場合は、通知方法を選択できます。 Send Me a Push を選択すると、プッシュ通知がDuo Mobileアプリケーションに送信されます。通知を受け取ったら、 Approve を選択してSnowflakeにログインします。

    MFA selection dialog with Send Me a Push, Call Me and Enter a Passcode options.

    上記のように、プッシュ通知を使用する代わりに次も選択できます。

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

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

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

Classic Console に MFA でログインします。

  1. ブラウザーで アカウント の URL をポイントします。例: https://myorg-account1.snowflakecomputing.com

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

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

    MFA selection dialog with Send Me a Push, Call Me and Enter a Passcode options.

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

    • 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

条件:

  • 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

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()メソッドの説明をご参照ください。

MFA エラーコード

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

エラーは、ログイン試行の失敗ごとに表示されます。履歴データは、 Snowflake Information SchemaAccount Usage にもあります。

エラーコード

エラー

説明

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が有効になっていません。接続文字列の一部としてパスコードを提供します。