CREATE AUTHENTICATION POLICY

新しい 認証ポリシー を現在のスキーマまたは指定したスキーマで作成するか、既存の認証ポリシーを置き換えます。認証ポリシーを使用して、アカウントまたはユーザーの認証制御およびセキュリティ要件を定義することができます。

このコマンドは次のバリアントをサポートしています。

こちらもご参照ください。

ALTER AUTHENTICATION POLICY, DESCRIBE AUTHENTICATION POLICY, DROP AUTHENTICATION POLICY, SHOW AUTHENTICATION POLICIES, CREATE OR ALTER <オブジェクト>

構文

CREATE [ OR REPLACE ] AUTHENTICATION POLICY [ IF NOT EXISTS ] <name>
  [ AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ...  ] ) ]
  [ CLIENT_TYPES = ( '<string_literal>' [ , '<string_literal>' , ...  ] ) ]
  [ CLIENT_POLICY = ( <client_type> = ( MINIMUM_VERSION = '<version>' ) [ , ... ] ) ]
  [ SECURITY_INTEGRATIONS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
  [ MFA_ENROLLMENT = { 'REQUIRED' | 'REQUIRED_PASSWORD_ONLY' } ]
  [ MFA_POLICY= ( <list_of_properties> ) ]
  [ PAT_POLICY = ( <list_of_properties> ) ]
  [ WORKLOAD_IDENTITY_POLICY = ( <list_of_properties> ) ]
  [ COMMENT = '<string_literal>' ]
Copy

バリアント構文

CREATE OR ALTER AUTHENTICATION POLICY

認証ポリシーがまだ存在しない場合は新しい認証ポリシーを作成し、既存の認証ポリシーをステートメントで定義されたものに変更します。CREATE OR ALTER AUTHENTICATION POLICY ステートメントは、 CREATE AUTHENTICATION POLICY ステートメントの構文ルールに従い、このステートメントには ALTER AUTHENTICATION POLICY ステートメントと同じ制限があります。

CREATE OR ALTER AUTHENTICATION POLICY <name>
  [ AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ...  ] ) ]
  [ CLIENT_TYPES = ( '<string_literal>' [ , '<string_literal>' , ...  ] ) ]
  [ CLIENT_POLICY = ( <client_type> = ( MINIMUM_VERSION = '<version>' ) [ , ... ] ) ]
  [ SECURITY_INTEGRATIONS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
  [ MFA_ENROLLMENT = { 'REQUIRED' | 'REQUIRED_PASSWORD_ONLY' | 'OPTIONAL' } ]
  [ MFA_POLICY= ( <list_of_properties> ) ]
  [ PAT_POLICY = ( <list_of_properties> ) ]
  [ WORKLOAD_IDENTITY_POLICY = ( <list_of_properties> ) ]
  [ COMMENT = '<string_literal>' ]
Copy

必須パラメーター

name

認証ポリシーの 識別子 を指定します。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

オプションのパラメーター

AUTHENTICATION_METHODS = ( 'string_literal' [ , 'string_literal' , ... ] )

注意

認証方法で制限すると、ドライバー接続やサードパーティの統合をブロックするなど、意図しない結果を招く可能性があります。

ログイン時に許可される認証方法のリスト。このパラメーターは、以下の値を1つ以上受け付けます。

ALL

すべての認証方法を許可します。

SAML

SAML2 セキュリティ統合 を許可します。SAML がある場合は、 SSO ログインオプションが表示されます。SAML が存在しない場合は、 SSO ログインオプションは表示されません。

PASSWORD

ユーザー名とパスワードによる認証を許可します。

OAUTH

外部 OAuth を許可します。

KEYPAIR

キーペア認証 を許可します。

PROGRAMMATIC_ACCESS_TOKEN

ユーザーが プログラムによるアクセストークン で認証できるようにします。

WORKLOAD_IDENTITY

ユーザーが ワークロードIDフェデレーション で認証できるようにします。

デフォルト: ALL

CLIENT_TYPES = ( 'string_literal' [ , 'string_literal' , ... ] )

Snowflakeで認証できるクライアントのリスト。

クライアントが接続を試みても、そのクライアントが以下にリストされた有効な CLIENT_TYPES 値のいずれでもない場合、ログインは失敗します。

MFA_ENROLLMENTREQUIRED に設定した場合、ユーザーが MFA に登録できるようにするには、 CLIENT_TYPES リストに SNOWFLAKE_UI を含める必要があります。

CLIENT_TYPES リストから SNOWFLAKE_UI を除外したい場合は、 MFA_ENROLLMENTOPTIONAL に設定する必要があります。

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.

このパラメーターは、以下の値を1つ以上受け付けます。

ALL

すべてのクライアントの認証を許可します。

SNOWFLAKE_UI

Snowsight または Classic Console。Snowflakeウェブインターフェイス。

注意

If SNOWFLAKE_UI is not included in the CLIENT_TYPES list while MFA_ENROLLMENT is set to REQUIRED, or MFA_ENROLLMENT is unspecified, MFA enrollment doesn't work。

DRIVERS

ドライバーは、 サポートされた言語 で記述されたアプリケーションからSnowflakeへのアクセスを許可します。例:GoJDBC.NET ドライバー、および Snowpipe Streaming

注意

DRIVERSCLIENT_TYPES リストに含まれていない場合、自動インジェスチョンは機能しなくなる可能性があります。

SNOWFLAKE_CLI

Snowflakeに接続し、開発者中心のワークロードと SQL 運用を管理するための コマンドラインクライアント です。

SNOWSQL

Snowflakeに接続するための コマンドラインクライアント

デフォルト: ALL

CLIENT_POLICY = client_type = ( MINIMUM_VERSION = 'version' )

Specifies a policy within the authentication policy that sets the minimum version allowed for each specified client type.

If CLIENT_TYPES is empty, contains ALL, or contains DRIVERS, the CLIENT_POLICY parameter accepts one or more of the following driver clients (and a specific version string). For any driver client that is not specified, the policy implicitly allows any version of that client.

If CLIENT_TYPES contains another value, such as SNOWFLAKE_CLI, and does not also contain DRIVERS, specifying any of the following client types results in an error. You can't create (or alter) an authentication policy such that the CLIENT_TYPES and CLIENT_POLICY parameters aren't compatible.

client_type

One or more valid client type values. This is a different set of values from those that the CLIENT_TYPES parameter accepts. Do not use single quotes for these values.

  • JDBC_DRIVER (Snowflake JDBC Driver)

  • ODBC_DRIVER (Snowflake ODBC Driver)

  • PYTHON_DRIVER (Snowflake Python Driver)

  • JAVASCRIPT_DRIVER (Snowflake Javascript Driver)

  • C_DRIVER (Libsnowflakeclient C Driver)

  • GO_DRIVER (Snowflake Go Driver)

  • PHP_DRIVER (Snowflake PHP PDO Driver)

  • DOTNET_DRIVER (Snowflake .NET Driver)

  • SQL_API (SQL API)

  • SNOWPIPE_STREAMING_CLIENT_SDK (Snowpipe Streaming Client SDK)

  • PY_CORE (Snowflake Python Core Driver)

  • SPROC_PYTHON (Snowflake Python Stored Procedure)

  • PYTHON_SNOWPARK (Snowflake Python Snowpark Driver)

  • SQL_ALCHEMY (Snowflake SQLAlchemy)

  • SNOWPARK (Snowpark)

  • SNOWFLAKE_CLIENT (Snowflake Client SDK)

'version'

The minimum accepted version for each specified client type: a sequence of three digits delimited by periods and enclosed by single quotation marks. For example: '1.0.0' or '3.14.1'. Authentication attempts with lower client versions are blocked when this policy is in effect for an account or a user.

The CLIENT_POLICY property of an authentication policy is a best-effort method to block user logins based on specific client versions. It should not be used as the sole control to establish a security boundary.

SECURITY_INTEGRATIONS = ( 'string_literal' [ , 'string_literal' , ... ] )

認証ポリシーが関連付けられているセキュリティ統合のリスト。このパラメーターは、 SAML または OAUTHAUTHENTICATION_METHODS リストにない場合には効果がありません。

SECURITY_INTEGRATIONS リストの値はすべて AUTHENTICATION_METHODS リストの値と互換性のある必要があります。たとえば、 SECURITY_INTEGRATIONS に SAML セキュリティ統合が含まれ、 AUTHENTICATION_METHODSOAUTH が含まれる場合は、認証ポリシーを作成できません。

ALL

すべてのセキュリティ統合を許可します。

デフォルト: ALL

MFA_ENROLLMENT = { 'REQUIRED' | 'REQUIRED_PASSWORD_ONLY' | 'OPTIONAL' }

Determines whether a user must enroll in multi-factor authentication. If this value is used, then the CLIENT_TYPES parameter must include SNOWFLAKE_UI, because Snowsight is the only place users can enroll in multi-factor authentication (MFA).

It's possible for the value of the MFA_ENROLLMENT parameter to be REQUIRED_SNOWFLAKE_UI_PASSWORD_ONLY. This value is part of Snowflake's gradual deprecation of single-factor passwords, and cannot be set directly. If you run a DESCRIBE AUTHENTICATION POLICY command and MFA_ENROLLMENT = 'REQUIRED_SNOWFLAKE_UI_PASSWORD_ONLY, then password users must enroll in MFA if they are using Snowsight.

REQUIRED

Human users who are using password or single-sign on (SSO) authentication must enroll in MFA.

REQUIRED_PASSWORD_ONLY

All human users who are using password authentication must enroll in MFA, regardless of the client they are using. Users using SSO authentication are not required to enroll.

OPTIONAL

Retained for backwards compatibility only.

デフォルト: OPTIONAL。下位互換性のため、 MFA_ENROLLMENT の値を指定せずに認証ポリシーを作成することもできますが、Snowflakeはすべての人間ユーザーに対して MFA を要求する方向に進んでいるため、実際に強制される値は OPTIONAL にはなりません。既存の認証ポリシーでどの値が強制されているかを調べるには、 DESCRIBE AUTHENTICATION POLICY コマンドを実行します。

MFA_POLICY= ( list_of_properties )

Specifies the policies that affect how multi-factor authentication (MFA) is enforced. Set this to a space-delimited list of one or more of the following properties and values:

ALLOWED_METHODS = ( { 'ALL' | 'PASSKEY' | 'TOTP' | 'OTP' | 'DUO' } [ , { 'PASSKEY' | 'TOTP' | 'OTP' | 'DUO' } ... ] )

Specifies the multi-factor authentication (MFA) methods that users can use as a second factor of authentication. You can specify more than one method as a comma-delimited list.

ALL

ユーザーはパスキー、認証コードアプリ、またはDuoを第2認証要素として使用できます。

PASSKEY

ユーザーはパスキーを第2認証要素として使用できます。

TOTP

ユーザーは認証コードアプリを第2認証要素として使用できます。

OTP

User can use a one-time passcode as their second factor of authentication. For more information, see ブレイクグラス アクセス管理者のセットアップ.

DUO

ユーザーはDuoを第2認証要素として使用できます。

デフォルト: ALL

ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = { 'ALL' | 'NONE' }

Specifies whether multi-factor authentication (MFA) is required when users authenticate with single sign-on (SSO). To require MFA, specify ALL.

Default: NONE

PAT_POLICY = ( list_of_properties )

プログラムによるアクセストークン のポリシーを指定します。以下の1つ以上のプロパティと値をスペースで区切ったリストにこれを設定します。

DEFAULT_EXPIRY_IN_DAYS = number_of_days

プログラムのアクセストークンのデフォルト期限(日数)を指定します。1から最大有効期限(MAX_EXPIRY_IN_DAYS を設定することで指定できます)までの値を指定できます。

デフォルトの有効期限は15日間です。

詳細については、 デフォルトの有効期限のセット をご参照ください。

MAX_EXPIRY_IN_DAYS = number_of_days

プログラムのアクセストークンの有効期限に設定できる最大日数を指定します。デフォルトの有効期限(DEFAULT_EXPIRY_IN_DAYS を設定することで指定できます)から365までの値を指定できます。

デフォルトの最大有効期限は365日です。

注釈

新しい最大有効期限を超える有効期限のプログラムによるアクセストークンが存在する場合、それらのトークンによる認証は失敗します。

例えば、 my_token という名前のプログラムによるアクセストークンを7日間の有効期限で生成したとします。後ですべてのトークンの最大有効期限を2日に変更すると、トークンの有効期限が新しい最大有効期限を超えるため、 my_token での認証は失敗します。

詳細については、 最大有効期限のセット をご参照ください。

NETWORK_POLICY_EVALUATION = { ENFORCED_REQUIRED | ENFORCED_NOT_REQUIRED | NOT_ENFORCED }

プログラムによるアクセストークンに対するネットワークポリシー要件の処理方法を指定します。

デフォルトでは、ユーザーがプログラムによるアクセストークンを生成または使用するには、1つ以上の ネットワークルール を持つ ネットワークポリシー に従う必要があります。

  • サービスユーザー(TYPE=SERVICE)は、プログラムによるアクセストークンを生成し、使用するためにネットワークポリシーに従う必要があります。

  • 人間ユーザー(TYPE=PERSON)は、プログラムによるアクセストークンを使用するためのネットワークポリシーに従う必要があります。

この動作をオーバーライドするには、このプロパティを以下の値のいずれかに設定します。

ENFORCED_REQUIRED (デフォルトの動作)

ユーザーは、プログラムによるアクセストークンを生成および使用するためのネットワークポリシーに従う必要があります。

ユーザーがネットワークポリシーの対象である場合、認証時にネットワークポリシーが適用されます。

ENFORCED_NOT_REQUIRED

ユーザーは、プログラムによるアクセストークンを生成・使用するためにネットワークポリシーに従う必要は ありません

ユーザーがネットワークポリシーの対象である場合、認証時にネットワークポリシーが適用されます。

NOT_ENFORCED

ユーザーは、プログラムによるアクセストークンを生成・使用するためにネットワークポリシーに従う必要は ありません

ユーザーがネットワークポリシーの対象である場合、認証時にネットワークポリシーは適用 されません

例:

PAT_POLICY=(
  DEFAULT_EXPIRY_IN_DAYS=30
  MAX_EXPIRY_IN_DAYS=365
  NETWORK_POLICY_EVALUATION = ENFORCED_NOT_REQUIRED
);
Copy
WORKLOAD_IDENTITY_POLICY = ( list_of_properties )

:doc:`ワークロードIDフェデレーション </user-guide/workload-identity-federation>`のポリシーを指定します。これを、次のプロパティと値の1つ以上を含むスペース区切りのリストに設定します。

ALLOWED_PROVIDERS = ( { ALL | AWS | AZURE | GCP | OIDC } [ , { AWS | AZURE | GCP | OIDC } ... ] )

ワークロードID認証中に認証ポリシーによって許可されるワークロードIDプロバイダーを指定します。このパラメーターを省略すると、すべてのワークロードIDプロバイダーが許可されます。

ALL

ユーザーは、サポートおよび構成されたワークロードIDプロバイダーで認証できます。

AWS

ユーザーは AWSIAM ロールまたはユーザーで認証できます。

AZURE

ユーザーはAzure Entra ID アクセストークンで認証できます。

GCP

ユーザーはGoogle署名付き ID トークンで認証できます。

OIDC

ユーザーは構成された OIDC プロバイダーの ID トークンで認証できます。

ALLOWED_AWS_ACCOUNTS = ( 'string_literal' [ , 'string_literal' , ... ] )

タイプ AWS のワークロードID認証中に認証ポリシーによって許可される AWSアカウントIDs のリストを指定します。

デフォルトでは、Snowflakeサービスユーザーが AWS 型の WORKLOAD_IDENTITY を持っている場合、ARN は任意の AWS アカウントを参照できます。このパラメーターが設定されている場合、指定された AWSアカウントIDs の ARNs のみが認証することを許可されています。

各要素は、AWSアカウントID を表す12桁の文字列である必要があります。

詳細については、`AWSアカウント識別子<https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html>の表示`_をご参照ください。

ALLOWED_AZURE_ISSUERS = ( 'string_literal' [ , 'string_literal' , ... ] )

AZURE 型のワークロードID認証中に認証ポリシーによって許可されるAzure Entra ID 発行者のリストを指定します。

デフォルトでは、Snowflakeサービスユーザーが AZURE 型の WORKLOAD_IDENTITY を持っている場合、発行者はEntra ID テナントである可能性があります。このパラメーターが設定されている場合、指定された発行者のAzureトークンのみが認証することを許可されています。

各要素は以下の形式を持つ有効な機関 URL である必要があります。

  • https://login.microsoftonline.com/tenantId/v2.0

ALLOWED_OIDC_ISSUERS = ( 'string_literal' [ , 'string_literal' , ... ] )

OIDC 型のワークロードID認証中に認証ポリシーによって許可される OIDC 発行者のリストを指定します。

デフォルトでは、Snowflakeサービスユーザーが OIDC 型の WORKLOAD_IDENTITY を持っている場合、発行者は有効なOIDC 発行者である可能性があります。このパラメーターが設定されている場合、指定された OIDC 発行者のトークンのみが認証することを許可されています。

各要素は、スキーム、ホスト、さらに任意でポート番号とパスコンポーネントを含み、クエリまたはフラグメントコンポーネントを含まない有効な HTTPSURL である必要があります。URL にはスペースを含めることはできません。また、長さは2048文字を超えてはいけません。

例:

WORKLOAD_IDENTITY_POLICY=(
  ALLOWED_PROVIDERS = (AWS, AZURE, GCP, OIDC)
  ALLOWED_AWS_ACCOUNTS = ('123456789012', '210987654321')
  ALLOWED_AZURE_ISSUERS = ('https://login.microsoftonline.com/8c7832f5-de56-4d9f-ba94-3b2c361abe6b/v2.0',
    'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0')
  ALLOWED_OIDC_ISSUERS = ('https://my.custom.oidc.issuer/', 'https://another.custom/oidc/issuer')
);
Copy
COMMENT = 'string_literal'

ポリシーの説明を指定します。

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

注意

CREATE AUTHENTICATION POLICY

スキーマ

OWNERSHIP

認証ポリシー

  • スキーマに既存のオブジェクトと同じ名前の仮オブジェクトを作成するには、ロールにオブジェクトの権限(OWNERSHIP)を付与するか継承する必要があります。

  • 既存 の認証ポリシーに対して CREATE OR ALTER AUTHENTICATION POLICY ステートメントを実行するために必要です。

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

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • 認証ポリシーを作成した後、Snowflakeがポリシーを適用する前に、 ALTER ACCOUNT または ALTER USER コマンドを使用して、ポリシーをアカウントまたはユーザーに設定する必要があります。

  • 既存の認証ポリシーを更新し、ポリシーの定義を確認する必要がある場合は、 DESCRIBE AUTHENTICATION POLICY コマンドまたは GET_DDL 関数を実行します。

  • OR REPLACE 句と IF NOT EXISTS 句は互いに排他的です。この2つを同じステートメントで使うことはできません。

  • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

Examples

restrict_client_types_policy という名前の認証ポリシーを作成し、 Snowsight または Classic Console 経由のアクセスのみを許可します。

CREATE AUTHENTICATION POLICY restrict_client_types_policy
  CLIENT_TYPES = ('SNOWFLAKE_UI')
  COMMENT = 'Auth policy that only allows access through the web interface';
Copy

多要素認証を設定し、クライアントリストを更新します。

CREATE OR ALTER AUTHENTICATION POLICY restrict_client_types_policy
  MFA_ENROLLMENT = REQUIRED
  CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI');
Copy

Create an authentication policy that includes a client policy. The client policy sets the minimum version for two specific driver clients:

CREATE AUTHENTICATION POLICY two_driver_policy
  CLIENT_TYPES = ('DRIVERS')
  CLIENT_POLICY = (
    GO_DRIVER = (MINIMUM_VERSION = '1.14.1'),
    JDBC_DRIVER = (MINIMUM_VERSION = '3.25.0')
    )
  COMMENT = 'JDBC and Go Driver minimum versions';
Copy

The following attempt to create an authentication policy fails because the CLIENT_POLICY parameter specifies drivers that are not permitted by the CLIENT_TYPES parameter:

CREATE AUTHENTICATION POLICY go_driver_policy_test
  CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI')
  CLIENT_POLICY = (GO_DRIVER = (MINIMUM_VERSION = '1.14.1'));
Copy
004800 (22023): Authentication policy can not contain CLIENT_POLICY of 'GO_DRIVER' without including 'DRIVERS' in CLIENT_TYPES.

その他の例については、 認証ポリシー をご参照ください。