フェデレーション認証の管理/使用

このトピックでは、 構成された のフェデレーション認証を管理および使用する方法について説明します。

このトピックの内容:

フェデレーション認証が有効なユーザーの管理

Snowflakeユーザーパスワードの管理

アカウントでフェデレーション認証が有効になっている場合でも、SnowflakeはSnowflakeのユーザー認証情報(ログイン名とパスワード)の維持と使用を引き続き許可します。言い換えると:

  • アカウント管理者とセキュリティ管理者は、Snowflakeで管理されているパスワードでユーザーを作成できます。

  • ユーザーは、引き続きSnowflakeの認証情報を使用してSnowflakeにログインできます。

ただし、アカウントでフェデレーション認証が有効になっている場合、SnowflakeはSnowflakeでユーザーパスワードを保持することを推奨 しません 。代わりに、ユーザーのパスワードは IdPのみで管理する必要があります。

パスワードなしでユーザーを作成する(または既存のユーザーを変更してパスワードを削除する)場合、これによりユーザーのSnowflake認証が事実上無効になります。Snowflakeにパスワードがないと、ユーザーはSnowflake認証を使用してログインできないため、代わりにフェデレーション認証を使用する必要があります。Snowflakeのウェブインターフェイスを使用して、パスワードのないユーザーを作成したり、既存のユーザーからパスワードを削除したりすることはできません。 CREATE USER または ALTER USER を使用する必要があります。

具体的には、管理者以外のすべてのユーザーに対してSnowflake認証を無効にすることをお勧めします。

重要

MUST_CHANGE_PASSWORD ユーザープロパティはフェデレーション認証に適用されないため、使用しないでください。特に、ユーザー用にSnowflakeでパスワードを保持しないことを選択した場合、このプロパティが 確実に FALSE に設定します。

また、Snowflakeパスワードを使用して、 最低 1人のSnowflakeアカウント管理者を維持する必要があります。これにより、アカウント管理者は常にSnowflakeにアクセスして、フェデレーション認証を管理し、発生した問題をトラブルシューティングできます。

ユーザーの無効化とドロップ

Snowflakeのアカウントまたはセキュリティ管理者は、ユーザーをドロップするか、高い可能性で無効にする必要が生じる場合があります。Snowflakeでドロップまたは無効化されたユーザーは、引き続きOktaアカウントにログインできますが、Snowflakeに接続しようとするとエラーメッセージが表示されます。ユーザーがログインする前に、ユーザーを再作成または有効化する必要があります。

Snowflakeのウェブインターフェイスまたは同等の SQL コマンドを使用して、ユーザーをドロップ/作成および無効化/有効化できます。

Snowflakeに接続するクライアントアプリケーションでの SSO の使用

アカウントの IdP を構成する と、Snowflakeは SSO を使用して、次のSnowflake提供クライアントとの接続および認証ができるようになります。

SnowSQL:

v1.1.43以上

Pythonコネクタ:

v1.4.8以上

JDBC ドライバー:

v3.2.7以上

ODBC ドライバー:

v2.13.11またはそれ以上

.NET ドライバー:

v1.0.13またはそれ以上

Node.jsドライバー:

v1.6.0またはそれ以上(ブラウザーベースの SSO の場合)。v1.6.1またはそれ以上(Oktaを介したネイティブ SSO 認証の場合)

Goドライバー:

v1.1.5以上

Snowflakeは、2つの認証方法をサポートしています。

  • ブラウザーベース SSO

  • プログラマティック SSO (Oktaのみ)

重要

Snowflakeに接続するクライアントアプリケーションで SSO を使用する場合、ユーザーはプロンプトが表示されたらログイン認証情報を入力する必要があります。ただし、セキュリティ上の理由から、これらの認証情報はクライアントを介して処理されることはありません。代わりに、認証のために認証情報が IdP に送信され、 IdP は有効な SAML 応答を返送します。これにより、クライアントはSnowflakeセッションを開始できます。

ブラウザーベース SSO

Snowflakeが提供するクライアントの必要なバージョン(またはそれ以上) をユーザーがインストールしている場合、ブラウザーベースの SSO を使用してSnowflakeにログインできます。

ブラウザーベースの SSO の仕組み

クライアントアプリケーションがブラウザーベースの SSO を使用するように構成されている場合、アプリケーションはユーザー認証に次のワークフローを使用します。

  1. アプリケーションは、ユーザーのオペレーティングシステムでデフォルトのウェブブラウザーを起動するか、新しいブラウザーのタブ/ウィンドウを開き、 IdP の認証ページを表示します。

  2. ユーザーは自分の IdP 認証情報(ユーザー名とパスワード)を入力します。

  3. ユーザーがSnowflakeの MFA (多要素認証)に登録されている場合、 MFA パスコード(別のデバイスから送信)を入力するか、認証を(他のデバイス上で)確認するよう求められます。

  4. IdP がユーザーの認証情報を認証すると、ブラウザーに成功メッセージが表示されます。ユーザーはその後、ブラウザーのタブ/ウィンドウを閉じて(認証後に開く必要はありません)、アプリケーションに戻り、開始されたSnowflakeセッションを使用できます。

ブラウザーベースの SSO を使用するための要件

ブラウザーベースの SSO を使用する場合、Snowflakeが提供するクライアント(たとえば、Snowflake JDBC ドライバー)は、ユーザーのウェブブラウザーを開くことができる必要があります。このため、Snowflakeが提供するクライアントと、それを使用するクライアントアプリケーションをユーザーのマシンにインストールする必要があります。サーバーで実行されるコードがSnowflake提供のクライアントを使用している場合、ブラウザーベースの SSO は機能しません。

ブラウザーベースの SSO の設定

認証用にブラウザーベースの SSO を設定するには、クライアントの authenticator ログインパラメーター/オプションを externalbrowser に設定します。

クライアント

手順

SnowSQL

クライアントの起動時に、コマンドラインフラグ --authenticator externalbrowser を指定します。

Python

authenticator='externalbrowser'snowflake.connector.connect() 関数に渡します。

JDBC

ドライバーの接続文字列で、 authenticator=externalbrowser を設定します。

ODBC (Linux /macOS)

odbc.ini ファイルで、 authenticator=externalbrowser を設定します。

ODBC (Windows)

ODBC データソース管理者ツールで、Snowflakeの DSN を編集し、 Authenticatorexternalbrowser に設定します。

.NET

ドライバーの接続文字列で、 authenticator=externalbrowser を設定します。

Node.js

snowflake.createConnection 関数を呼び出すときに authenticator=EXTERNALBROWSER オプションを設定します。

Go

ドライバーの接続文字列で、 authenticator=externalbrowser を設定します。

接続キャッシュを使用して認証のプロンプト数を最小限に抑制 --- オプション

クライアントアプリケーションがSnowflakeへの新しい接続を確立するたびに、ユーザーは認証を求められます。このため、クライアントアプリケーションが複数回接続を確立した場合は、認証のための複数のプロンプトが表示される可能性があります。

ユーザーが認証を求められる回数を最小限に抑えるために、アカウント管理者は接続キャッシュを有効にすることができます。

接続キャッシュが有効になっている場合、クライアントアプリケーションは、後続の接続で使用する接続トークンを保存します。セキュリティのため、接続トークンはオペレーティングシステムのキーストアに保存されます。接続キャッシュを有効にする前に、セキュリティチームに相談して、これがセキュリティポリシーに準拠しているかどうかを確認してください。

Tip

接続キャッシュは、 MFA トークンキャッシュと組み合わせることができます。

これら2つの機能を組み合わせる方法の詳細については、 MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える --- オプション をご参照ください。

Snowflakeは、 macOS およびWindowsで、次のドライバーとコネクタを使用した接続キャッシュをサポートしています(現在、この機能はLinuxでは非対応)。

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

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

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

  • Python用Snowflakeコネクタ2.2.8(またはそれ以降)

接続キャッシュを有効にするには、

  1. アカウントレベルのパラメーター ALLOW_ID_TOKENtrue に設定します。

    alter account set allow_id_token = true;
    
    Copy

    注釈

    接続キャッシュを有効にするには、アカウント管理者(つまり、 ACCOUNTADMIN ロールを持つユーザー)である必要があります。

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

    • 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 クラスの追加 をご参照ください。

ネイティブ SSO --- Oktaのみ

Oktaが IdP の場合、SnowflakeはOktaによるネイティブ認証もサポートします。この認証方法は、ウェブブラウザーにアクセスできないクライアントで SSO を使用している場合に便利です(例: Pythonコネクタか、 JDBC または ODBC ドライバーのどちらかを介したプログラムによる接続)。

注釈

クライアントドライバーでネイティブ SSO 認証を使用するユーザーのOkta MFA を無効にしてください。詳細については、Okta管理者にお問い合わせください。

Oktaを介してネイティブSSOを有効にするには、クライアントの authenticator ログインパラメーター/オプションをご使用のOktaアカウントのOkta URLエンドポイント(Oktaが提供)に、通常 https://<Oktaアカウント名>.okta.com の形式で設定します。

クライアント

手順

SnowSQL

クライアントの起動時に、コマンドラインフラグ --authenticator https://<Oktaアカウント名>.okta.com を指定します。

Python

authenticator='https://<Oktaアカウント名>.okta.com'snowflake.connector.connect() 関数に渡します。

JDBC

ドライバーの接続文字列に authenticator=https://<Oktaアカウント名>.okta.com を設定します。

ODBC (Linux /macOS)

odbc.ini ファイルに authenticator=https://<Oktaアカウント名>.okta.com を設定します。

ODBC (Windows)

ODBC データソース管理者ツールで、Snowflakeの DSN を編集し、 Authenticatorhttps://<Oktaアカウント名>.okta.com に設定します。

.NET

ドライバーの接続文字列に authenticator=https://<Oktaアカウント名>.okta.com を設定します。

Node.js

snowflake.createConnection を呼び出すときは、 authenticator オプションを https://<Oktaアカウント名>.okta.com に設定します。

Okta Identity Engineへのアップグレード

Okta Classic からネイティブ SSO 用Okta Identity Engineにアップグレードする場合は、アップグレード前に、Snowflakeクライアントドライバーを更新する必要があります。

アップグレード後に HTTP 429エラーが発生した場合は、最新のクライアントドライバーで使用される認証エンドポイントによって適用されるレート制限に達している可能性があります。詳細については、 HTTP 429エラー (このトピック内)をご参照ください。

HTTP 429エラー

Okta Identity Engineは、認証エンドポイント(/api/v1/authn)を介した通信を必要とします。現在、このエンドポイントには、ユーザーごとに5秒あたり20リクエストのレート制限があります。最新のSnowflakeクライアントドライバーは、Okta Identity Engineのサポートにこの認証エンドポイントを使用するため、レート制限の対象となります。この制限が厳しすぎる場合は、Oktaサポートに連絡して、認証エンドポイントのレート制限を引き上げてください。

次のバージョンで、Snowflakeクライアントドライバーは認証エンドポイントに切り替えられています。

  • Go: 1.6.20

  • JDBC: 3.13.22

  • .NET: 2.0.20

  • Node.js: 1.6.21

  • ODBC: 2.25.5

  • Python: 2.7.12

  • SnowSQL: 1.2.24

  • SQLAlchemy: 1.4.6

SSO と MFA の併用

Snowflakeは、追加のセキュリティレベルを提供するために、 MFA と SSO の併用をサポートしています。

  • Snowflakeの個々のユーザーは MFA に登録できます。Snowflakeユーザーが MFA に登録され、 SSO を使用して接続する場合、 MFA ログインワークフローは SSO ワークフロー内で開始され、認証を正常に完了するために必要です。Snowflakeの MFA の詳細については、 多要素認証(MFA) をご参照ください。

    注釈

    Okta SSO を介して MFA で接続するには、Snowflakeはブラウザーベースの SSO を使用する必要があります。Oktaにネイティブ SSO を使用している場合、 MFA はサポートされません。

  • さらに、 IdP も MFAをサポートしますが、これはSnowflakeの MFA とは別であり、 IdPを介して別途構成する必要があります。 MFA が IdPで有効になっている場合、 IdP がワークフローを決定します。IdP が MFA をサポートしているかどうか、またその実装方法を確認するには、 IdP のドキュメントをご参照ください。

  • Snowflakeが提供する特定のクライアントでは、 MFA トークンを最大4時間キャッシュできます。詳細については、 MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える --- オプション をご参照ください。

複数のオーディエンス値と SSO の使用

Snowflakeは、IDプロバイダーからSnowflakeへの SAML 2.0アサーションで複数のオーディエンス値(つまり、オーディエンスまたはオーディエンス制限フィールド)をサポートしています。

この機能は、オーディエンス値としてSnowflakeにアクセスするための URLs をサポートします。複数のSnowflakeアカウントの URLs がサポートされているのは、各アカウントに URL とSnowflakeにアクセスするための一意の アカウント識別子 があるためです。さらにSnowflakeは、オーディエンス値としてSnowflakeサービスへのプライベート接続を使用して、Snowflakeにアクセスするためのアカウントのドメイン名と URLs を受け入れます。

SSOと、パブリックインターネットの回避の詳細については、 プライベート接続での SSO をご参照ください。

現在、Snowflakeは最大4つの異なるオーディエンス値をサポートおよび受け入れています。Snowflakeでの設定は必要ありません。4つより多いオーディエンス値を含める必要がある場合は、 Snowflakeサポート にお問い合わせください。

SAML 2.0のオーディエンス値の構成については、組織のIDプロバイダー管理者にお問い合わせください。

プライベート接続での SSO の使用

Snowflakeは、Amazon Web Services(AWS)、Microsoft Azure、およびGoogle Cloud Platform(GCP)上のSnowflakeアカウント用に、Snowflakeサービスへのプライベート接続を使用した SSO をサポートしています。

詳細については、 プライベート接続での SSO をご参照ください。