認証ポリシー

認証ポリシーを使用して次の項目を指定することで、クライアントまたはユーザーの認証方法を制御できます。

アカウントまたはアカウント内のユーザーに認証ポリシーを設定できます。アカウントに認証ポリシーを設定すると、その認証ポリシーはアカウント内のすべてのユーザーに適用さます。アカウントとユーザーの両方に認証ポリシーを設定した場合、ユーザーレベルの認証ポリシーがアカウントレベルの認証ポリシーより優先されます。

注釈

すでに識別子優先ログインフローにアクセスできる場合は、 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION 関数を使用して、サポートされていない SAML_IDENTITY_PROVIDER アカウントパラメーターからアカウントを移行する必要があります。

ユースケース

The following non-exhaustive list describes use cases for authentication policies:

  • あるユーザー、アカウント内の全ユーザー、または特定の認証方法において、 MFA を必要とするかどうかを制御したい。

  • 複数のログインオプションがある場合に、ユーザーログインフローを制御する。

  • You want to control the authentication methods, specific client types, minimum versions of clients, and security integrations available to specific users or all users.

  • You have customers building services on top of Snowflake using Snowflake drivers, but the customers do not want their users accessing Snowflake through Snowsight.

  • 特定のユーザーの認証オプションとして、複数のIDプロバイダーを提供する。

制限事項

  • The CLIENT_TYPES property of an authentication policy is a best-effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.。

考慮事項

  • 認証ポリシーにリストされている認証方法とセキュリティ統合が競合しないことを確認します。たとえば、許可されるセキュリティ統合のリストに SAML2 セキュリティ統合を追加し、許可される認証方法として OAuth のみを許可すると、認証ポリシーを作成できません。

  • ユーザーがロックアウトされた場合に備えて、管理者用の追加の非制限的な認証ポリシーを使用します。例については、 ロックアウトを防止する をご参照ください。

セキュリティポリシーの優先順位

複数のタイプのセキュリティポリシーがアクティブ化されると、ポリシー間の優先順位が設定されます。たとえば、 ネットワークポリシー は認証ポリシーより優先されるので、リクエストの IP アドレスがネットワークポリシーのブロックリストにある IP アドレスに一致する場合、認証ポリシーはチェックされず、ネットワークポリシーで評価が停止します。

次のリストは、セキュリティポリシーが評価される順序を示しています。

  1. ネットワークポリシー: IP アドレス、 VPC IDs、 VPCE IDs を許可または拒否します。

  2. 認証ポリシー - クライアント、認証方法、セキュリティ統合を許可または拒否します。

  3. パスワードポリシー (ローカル認証のみ): 文字の長さ、文字数、パスワードの有効期間、再試行回数、ロックアウト時間などのパスワード要件を指定します。

  4. セッションポリシー: 一定時間操作がない場合、ユーザーに再認証を要求します

アカウントと認証するユーザーの両方にポリシーが割り当てられている場合は、ユーザーレベルのポリシーが適用されます。

識別子優先ログインと認証ポリシーの組み合わせ

By default, Snowsight provides a generic login experience that provides several options for logging in, regardless if the options are relevant to users. This means that authentication is attempted regardless of whether the login option is a valid option for the user.

You can alter this behavior to enable a identifier-first login flow for Snowsight. In this flow, Snowflake prompts the user for an email address or username before presenting authentication options. Snowflake uses the email address or username to identify the user, and then only displays the login options that are relevant to the user, and are allowed by the authentication policy set on the account or user.

識別子優先ログインフローを有効にする手順については、 識別子優先ログイン をご参照ください。

次の表は、識別子優先ログインと認証ポリシーを組み合わせてユーザーのログインエクスペリエンスを制御する方法の設定例を示しています。

設定

結果

認証ポリシーの AUTHENTICATION_METHODS パラメーターには PASSWORD のみが含まれます。

Snowflakeは、ユーザーにメールアドレスまたはユーザー名とパスワードの入力を求めます。

認証ポリシーの AUTHENTICATION_METHODS パラメーターには SAML のみが含まれ、アクティブな SAML2 セキュリティ統合が存在します。

メールアドレスまたはユーザー名が1つの SAML2 セキュリティ統合のみと一致する場合、SnowflakeはユーザーをIDプロバイダーのログインページにリダイレクトします。

認証ポリシーの AUTHENTICATION_METHODS パラメーターには PASSWORD と SAML の両方が含まれており、アクティブな SAML2 セキュリティ統合が存在します。

メールアドレスまたはユーザー名が1つの SAML2 セキュリティ統合のみと一致する場合、Snowflakeは SAML SSO ボタンを表示し、メールアドレスまたはユーザー名とパスワードでログインするオプションを表示します。

認証ポリシーの AUTHENTICATION_METHODS パラメーターには SAML のみが含まれ、アクティブな SAML2 セキュリティ統合が複数存在します。

メールアドレスまたはユーザー名が複数の SAML2 セキュリティ統合に一致する場合、Snowflakeは複数の SAML SSO ボタンを表示します。

認証ポリシーの AUTHENTICATION_METHODS パラメーターには PASSWORD と SAML の両方が含まれ、アクティブな SAML2 セキュリティ統合が複数存在します。

Snowflake は、メールアドレスまたはユーザー名が複数の SAML2 セキュリティ統合と一致する場合、複数の SAML SSO ボタンを表示し、メールアドレスまたはユーザー名とパスワードでログインするオプションを表示します。

認証ポリシーを作成する

管理者は CREATE AUTHENTICATION POLICY コマンドを使用して新しい認証ポリシーを作成し、Snowflakeに接続できるクライアント、使用できる認証方法、ユーザーが使用できるセキュリティ統合を指定できます。デフォルトでは、すべてのクライアントタイプ、認証方法、セキュリティ統合を使用してSnowflakeに接続できます。The CLIENT_TYPES property of an authentication policy is a best-effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.

For example, the following commands create a custom policy_admin role and an authentication policy that allows authentication using Snowsight. The user must authenticate with SAML or a password.

注釈

この例を実行するには、GRANT ROLE コマンドの <username> を実際のユーザー名に置き換えます。

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE DATABASE my_database;
USE DATABASE my_database;

CREATE OR REPLACE SCHEMA my_schema;
USE SCHEMA my_schema;

CREATE ROLE policy_admin;

GRANT USAGE ON DATABASE my_database TO ROLE policy_admin;
GRANT USAGE ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT CREATE AUTHENTICATION POLICY ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE policy_admin;

GRANT ROLE policy_admin TO USER <username>;
USE ROLE policy_admin;

CREATE AUTHENTICATION POLICY my_example_authentication_policy
  CLIENT_TYPES = ('SNOWFLAKE_UI')
  AUTHENTICATION_METHODS = ('SAML', 'PASSWORD');
Copy

詳しい例については、 ログイン設定の例 をご参照ください。

アカウントまたはユーザーに認証ポリシーを設定する

アカウントまたはユーザに認証ポリシーを設定すると、認証ポリシーで指定された制限がそのアカウントまたはユーザに適用されます。ALTER ACCOUNT または ALTER USER コマンドを使用して、アカウントまたはユーザーに認証ポリシーを設定できます。

Snowsight ワークシートで、次のいずれかのコマンドを使用して、アカウントまたはユーザに認証ポリシーを設定します。

ALTER ACCOUNT SET AUTHENTICATION POLICY my_example_authentication_policy;
Copy
ALTER USER example_user SET AUTHENTICATION POLICY my_example_authentication_policy;
Copy

特定のタイプ のすべてのユーザーに対して認証ポリシーを設定することもできます。たとえば、アカウント内のタイプ SERVICE のすべてのユーザーに認証ポリシーを設定し、タイプ PERSON のユーザーには設定しない場合、次のコマンドを実行します。

ALTER ACCOUNT SET AUTHENTICATION POLICY my_example_authentication_policy
  FOR ALL SERVICE USERS;
Copy

セキュリティ管理者(SECURITYADMIN ロールを持つユーザー)または APPLY AUTHENTICATION POLICY 権限を持つロールを持つユーザーのみが、アカウントまたはユーザーに認証ポリシーを設定できます。この権限をロールに付与して、ユーザーがアカウントまたはユーザーに認証ポリシーを設定できるようにするには、次のコマンドのいずれかを実行します。

GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE my_policy_admin;
Copy
GRANT APPLY AUTHENTICATION POLICY ON USER example_user TO ROLE my_policy_admin;
Copy

詳しい例については、 ログイン設定の例 をご参照ください。

MFA を使用してユーザーまたはアカウントの認証を強化します。

ユーザーログインのセキュリティを向上させるために 、 MFA に登録することをユーザーに要求する認証ポリシーを作成し、認証ポリシーを個々のユーザーまたはアカウントに適用することができます。ユーザーがMFAに登録を行った後は、認証ポリシーでユーザーによるMFA認証が求められます。

注釈

Snowflake is deprecating single-factor password logins. When the rollout is complete, all users who authenticate with a password must enroll in MFA.

Run the following command if you want to create an authentication policy that requires password users to authenticate with MFA when using any Snowflake client, not just Snowsight. Single sign-on (SSO) users won't be required to use MFA.

CREATE AUTHENTICATION POLICY require_mfa_authentication_policy
  MFA_ENROLLMENT = 'REQUIRED'
  MFA_POLICY=  (
    ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'NONE'
  );
Copy

Run the following command if you want to create an authentication policy that requires password and single sign-on users to authenticate with MFA.

CREATE AUTHENTICATION POLICY require_mfa_authentication_policy
  MFA_ENROLLMENT = 'REQUIRED'
  MFA_POLICY=  (
    ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'ALL'
  );
Copy

この認証ポリシーをアカウント内のすべてのユーザーにセットするには、次のSQLステートメントを実行します。

ALTER ACCOUNT SET AUTHENTICATION POLICY require_mfa_authentication_policy;
Copy

注釈

If you set the MFA_ENROLLMENT parameter, then the CLIENT_TYPES parameter must include SNOWFLAKE_UI, because Snowsight is the only place users can enroll in multi-factor authentication (MFA).

認証ポリシーの使用状況を追跡する

Information Schemaテーブル関数 POLICY_REFERENCES を使用して、指定された認証ポリシーに割り当てられた各ユーザーの行と、Snowflakeアカウントに割り当てられた認証ポリシーの行を返します。

認証ポリシーでは、次の構文がサポートされています。

POLICY_REFERENCES( POLICY_NAME => '<authentication_policy_name>' )
Copy
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'USER', REF_ENTITY_NAME => '<username>')
Copy
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'ACCOUNT', REF_ENTITY_NAME => '<accountname>')
Copy

ここで、 authentication_policy_name は認証ポリシーの完全修飾名です。

たとえば、次のクエリを実行して、 my_db という名前のデータベースと my_schema という名前のスキーマに格納されている、 authentication_policy_prod_1 という名前の認証ポリシーが割り当てられている各ユーザーの行を返します。

SELECT *
FROM TABLE(
  my_db.INFORMATION_SCHEMA.POLICY_REFERENCES(
  POLICY_NAME => 'my_db.my_schema.authentication_policy_prod_1'
  )
);
Copy

ロックアウトを防止する

アカウントを管理する認証ポリシーが厳格な状況では、セキュリティ統合によってロックアウトが発生した場合に管理者が回復オプションとして使用するための、制限のない認証ポリシーを作成できます。たとえば、管理者のみに PASSWORD 認証方法を含めることができます。ユーザーレベルの認証ポリシーは、より制限の厳しいアカウントレベルのポリシーより優先されます。

CREATE AUTHENTICATION POLICY admin_authentication_policy
  AUTHENTICATION_METHODS = ('SAML', 'PASSWORD')
  CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI', SNOWSQL', 'DRIVERS')
  SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION');
Copy

このポリシーを管理者に割り当てることができます。

ALTER USER <administrator_name> SET AUTHENTICATION POLICY admin_authentication_policy
Copy

認証ポリシーを複製する

フェールオーバーと複製グループを使用して、認証ポリシーを複製できます。詳細については、 複製とセキュリティポリシー をご参照ください。

ログイン設定の例

このセクションでは、認証ポリシーと SAML2 セキュリティ統合を使用して組み合わせ、ログインフローとセキュリティを制御する方法の例を示します。

クライアントタイプによるSnowflakeへのユーザーアクセスの制限

The CLIENT_TYPES property of an authentication policy is a best-effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.。

Create an authentication policy named restrict_client_type_policy that only allows access through Snowsight:

CREATE AUTHENTICATION POLICY restrict_client_type_policy
  CLIENT_TYPES = ('SNOWFLAKE_UI')
  COMMENT = 'Only allows access through the web interface';
Copy

ユーザーの認証ポリシーを設定します。

ALTER USER example_user SET AUTHENTICATION POLICY restrict_client_type_policy;
Copy

アカウントで複数のIDプロバイダーからの認証を許可する

Create a SAML2 security integration that allows users to log in through SAML using Okta as an IdP:

CREATE SECURITY INTEGRATION example_okta_integration
  TYPE = SAML2
  SAML2_SSO_URL = 'https://okta.example.com';
  ...
Copy

Create a security integration that allows users to log in through SAML using Microsoft Entra ID as an IdP:

CREATE SECURITY INTEGRATION example_entra_integration
  TYPE = SAML2
  SAML2_SSO_URL = 'https://entra-example_acme.com';
  ...
Copy

example_okta_integrationexample_entra_integration の統合に関連する認証ポリシーを作成します。

CREATE AUTHENTICATION POLICY multiple_idps_authentication_policy
  AUTHENTICATION_METHODS = ('SAML')
  SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION', 'EXAMPLE_ENTRA_INTEGRATION');
Copy

アカウントの認証ポリシーを設定します。

ALTER ACCOUNT SET AUTHENTICATION POLICY multiple_idps_authentication_policy;
Copy

権限とコマンド

認証ポリシー権限参照

Snowflakeは、ユーザーが認証ポリシーを作成、設定、および所有できるかどうかを決定するために、次の認証権限をサポートしています。

スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。スキーマに対する任意の権限を付与されたロールは、そのロールがスキーマを解決できることに注意してください。たとえば、スキーマに対する CREATE 権限を付与されたロールは、そのスキーマにオブジェクトを作成できますが、そのスキーマに対する USAGE 付与されている必要はありません。

権限

オブジェクト

使用状況

CREATE

スキーマ

スキーマでの新しい認証ポリシーの作成を有効にします。

APPLY AUTHENTICATION POLICY

アカウント

アカウントまたはユーザーレベルで認証ポリシーを適用できるようにします。

OWNERSHIP

認証ポリシー

認証ポリシーに対する包括的な制御を付与します。認証ポリシーのほとんどのプロパティを変更するために必要です。

認証ポリシー DDL 参照

認証ポリシーの権限とコマンドの詳細については、次の参照ドキュメントをご参照ください。

コマンド

権限

説明

CREATE AUTHENTICATION POLICY

SCHEMA の CREATE AUTHENTICATION POLICY

新しい認証ポリシーを作成します。

ALTER AUTHENTICATION POLICY

AUTHENTICATION POLICY の OWNERSHIP

既存の認証ポリシーを変更します。

DROP AUTHENTICATION POLICY

AUTHENTICATION POLICY の OWNERSHIP

既存の認証ポリシーをシステムから削除します。

DESCRIBE AUTHENTICATION POLICY

AUTHENTICATION POLICY の OWNERSHIP

既存の認証ポリシーのプロパティを説明します。

SHOW AUTHENTICATION POLICIES

AUTHENTICATION POLICY OWNERSHIP または SCHEMA の USAGE

システム内のすべての認証ポリシーを一覧表示します。