CREATE SECURITY INTEGRATION (外部 OAuth)

アカウントに新しい外部 OAuth セキュリティ統合を作成するか、既存の統合を置き換えます。外部 OAuth セキュリティ統合により、クライアントはサードパーティの認証サーバーを使用して、Snowflakeとのやり取りに必要なアクセストークンを取得できます。

他の型のセキュリティ統合(例: Snowflake OAuth)の作成については、 CREATE SECURITY INTEGRATION をご参照ください。

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

ALTER SECURITY INTEGRATION (外部 OAuth)DROP INTEGRATIONSHOW INTEGRATIONS

構文

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = EXTERNAL_OAUTH
  ENABLED = { TRUE | FALSE }
  EXTERNAL_OAUTH_TYPE = { OKTA | AZURE | PING_FEDERATE | CUSTOM }
  EXTERNAL_OAUTH_ISSUER = '<string_literal>'
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = { '<string_literal>' | ('<string_literal>' [ , '<string_literal>' , ... ] ) }
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = { 'LOGIN_NAME' | 'EMAIL_ADDRESS' }
  [ EXTERNAL_OAUTH_JWS_KEYS_URL = { '<string_literal>' | ('<string_literal>' [ , '<string_literal>' , ... ] ) } ]
  [ EXTERNAL_OAUTH_BLOCKED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ EXTERNAL_OAUTH_ALLOWED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY = <public_key1> ]
  [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = <public_key2> ]
  [ EXTERNAL_OAUTH_AUDIENCE_LIST = { '<string_literal>' | ('<string_literal>' [ , '<string_literal>' , ... ] ) } ]
  [ EXTERNAL_OAUTH_ANY_ROLE_MODE = { DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE } ]
  [ EXTERNAL_OAUTH_SCOPE_DELIMITER = '<string_literal>' ]
  [ EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = '<string_literal>' ]
  [ COMMENT = '<string_literal>' ]
Copy

必須パラメーター

name

統合の識別子(つまり、名前)を指定する文字列。アカウント内で一意である必要があります。

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

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

TYPE = EXTERNAL_OAUTH

外部 OAuth 統合と Snowflake OAuth 統合を区別します。

ENABLED = { TRUE | FALSE }

統合の操作を開始するか、中断するかを指定します。

  • TRUE は、パイプ定義で指定されたパラメーターに基づいて統合を許可します。

  • FALSE は、メンテナンスのために統合を一時停止します。Snowflakeとサードパーティサービス間の統合はいずれも機能しません。

EXTERNAL_OAUTH_TYPE = { OKTA | AZURE | PING_FEDERATE | CUSTOM }

OAuth 2.0認証サーバーをOkta、Microsoft Azure AD、Ping Identity PingFederate、またはカスタム OAuth 2.0認証サーバーに指定します。

EXTERNAL_OAUTH_ISSUER = 'string_literal'

OAuth 2.0認証サーバーを定義する URL を指定します。

EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = { 'string_literal' | ('string_literal' [ , 'string_literal' , ... ] ) }

アクセストークンをユーザー記録にマップする、アクセストークンクレーム(複数可)を指定します。

クレームのデータ型は、文字列または文字列のリストである必要があります。

EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = { 'LOGIN_NAME' | 'EMAIL_ADDRESS' }

アクセストークンをユーザー記録にマップするために使用する、Snowflakeユーザー記録属性を示します。

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

EXTERNAL_OAUTH_JWS_KEYS_URL = { 'string_literal' | ('string_literal' [ , 'string_literal' , ... ] ) }

外部 OAuth アクセストークンを検証するための公開キーまたは証明書をダウンロードする、 URL または URLs のリストを指定します。

EXTERNAL_OAUTH_TYPE パラメーターを AZURE に設定した場合は、最大3つの URLs を指定できます。たとえば、2つの URLs を指定するには、次の構文を使用します。

EXTERNAL_OAUTH_JWS_KEYS_URL = ('https://example.ca', 'https://example.co.uk')
Copy

EXTERNAL_OAUTH_TYPE パラメーターを OKTAPING_FEDERATE、または CUSTOM に設定した場合、指定できる URL は1つだけです。例:

EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://example.ca'
Copy
EXTERNAL_OAUTH_RSA_PUBLIC_KEY = public_key1

-----BEGIN PUBLIC KEY----- および -----END PUBLIC KEY----- ヘッダーを含まない、Base64でエンコードされた RSA 公開キーを指定します。

EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = public_key2

-----BEGIN PUBLIC KEY----- および -----END PUBLIC KEY----- ヘッダーを含まない、2番目の RSA 公開キーを指定します。キーのローテーションに使用されます。

EXTERNAL_OAUTH_BLOCKED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

クライアントが プライマリロール として設定 できない ロールのリストを指定します。このリストのロールは、外部 OAuth 認証サーバーからのアクセストークンに基づいてSnowflakeセッションを作成するときには使用 できません

デフォルトで、このリストには ACCOUNTADMIN、 ORGADMIN、および SECURITYADMIN のロールが含まれています。これらの権限ロールをリストから削除するには、 ALTER ACCOUNT コマンドを使用して EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST アカウントパラメーターを FALSE に設定します。

EXTERNAL_OAUTH_ALLOWED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

クライアントがプライマリロールとして設定できるロールのリストを指定します。

このリストのロールは、外部 OAuth 認証サーバーからのアクセストークンに基づいてSnowflakeセッションを作成するときに使用できます。

注意

このパラメーターは、 ACCOUNTADMIN、 ORGADMIN、および SECURITYADMIN のシステムロールをサポートします。

これらの高度な権限を持つロールをプライマリロールとして設定してSnowflakeセッションを作成する場合は、注意が必要です。

EXTERNAL_OAUTH_AUDIENCE_LIST = { 'string_literal' | ('string_literal' [ , 'string_literal' , ... ] ) }

お客様のSnowflakeアカウント URL (つまり、 <アカウント識別子>.snowflakecomputing.com)の使用に加えて、アクセストークンのオーディエンス検証用に追加の値を指定します。詳細については、 アカウント識別子 をご参照ください。

Power BI SSO を使用する場合のこのパラメーターの詳細については、 Power BI SSO のセキュリティ統合 をご参照ください。

現在、複数のオーディエンス URLs は、 外部 OAuth カスタムクライアント に対してのみ指定できます。各 URL は、各 URL をコンマで区切って、単一引用符で囲む必要があります。例:

EXTERNAL_OAUTH_AUDIENCE_LIST = ('https://example.com/api/v2/', 'https://example.com')
Copy
EXTERNAL_OAUTH_ANY_ROLE_MODE = { DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE }

OAuth クライアントまたはユーザーが、 OAuth アクセストークンで定義されていないロールを使用できるかどうかを指定します。 Power BI からSnowflakeへの統合 では、このパラメーターが有効になっていても、 PowerBI ユーザーはロールを切り替えることができないことに注意してください。

  • DISABLE の場合は、 OAuth クライアントまたはユーザーがロールを切り替える(つまり、 USE ROLE role;)ことはできません。デフォルト。

  • ENABLE の場合、 OAuth クライアントまたはユーザーは、ロールを切り替えられます。

  • ENABLE_FOR_PRIVILEGE OAuth クライアントまたはユーザーは、 USE_ANY_ROLE 権限を持つクライアントまたはユーザーのロールのみを切り替えられます。この権限は、ユーザーが使用できる1つ以上のロールに対して付与および取り消しができます。例:

    GRANT USE_ANY_ROLE ON INTEGRATION external_oauth_1 TO role1;
    
    Copy
    REVOKE USE_ANY_ROLE ON INTEGRATION external_oauth_1 FROM role1;
    
    Copy

値は必要に応じて一重引用符で囲むことができることに注意してください(例: DISABLE または 'DISABLE' のいずれか)。

EXTERNAL_OAUTH_SCOPE_DELIMITER = 'string_literal'

認証トークンのスコープ区切り文字を指定し、デフォルトの区切り文字 ',' を上書きします。区切り文字は、コンマ(',')やスペース(' ')などの任意の1文字にすることができます。

このプロパティは、 EXTERNAL_OAUTH_TYPE パラメーターを CUSTOM に設定した場合にのみ使用できます。

EXTERNAL_OAUTH_SCOPE_MAPPING_ATTRIBUTE = 'string_literal'

アクセストークンをアカウントロールにマップする、アクセストークンクレームを指定します。

このパラメーターは、 scp または scope にのみ設定できます。

このパラメーターは、 EXTERNAL_OAUTH_TYPE パラメーターを CUSTOM に設定した場合にのみ使用できます。

COMMENT = 'string_literal'

統合のコメントを指定します。

デフォルト: 値なし

アクセス制御の要件

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

権限

オブジェクト

メモ

CREATE INTEGRATION

アカウント

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

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

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

使用上の注意

  • メタデータについて。

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

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

Microsoft Azure AD の例

次の例では、Microsoft Azure AD OAuth 2.0認証サーバーの外部 OAuth セキュリティ統合を作成します。

CREATE SECURITY INTEGRATION external_oauth_azure_1
    TYPE = external_oauth
    ENABLED = true
    EXTERNAL_OAUTH_TYPE = azure
    EXTERNAL_OAUTH_ISSUER = '<AZURE_AD_ISSUER>'
    EXTERNAL_OAUTH_JWS_KEYS_URL = '<AZURE_AD_JWS_KEY_ENDPOINT>'
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'upn'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name';
Copy

DESCRIBE INTEGRATION を使用して統合設定を表示します。


Copy

DESC SECURITY INTEGRATION external_oauth_azure_1;

Oktaの例

次の例では、Okta OAuth 2.0認証サーバー用の外部 OAuth セキュリティ統合を作成します。

CREATE SECURITY INTEGRATION external_oauth_okta_1
    TYPE = external_oauth
    ENABLED = true
    EXTERNAL_OAUTH_TYPE = okta
    EXTERNAL_OAUTH_ISSUER = '<OKTA_ISSUER>'
    EXTERNAL_OAUTH_JWS_KEYS_URL = '<OKTA_JWS_KEY_ENDPOINT>'
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name';
Copy

DESCRIBE INTEGRATION を使用して統合設定を表示します。

DESC SECURITY INTEGRATION external_oauth_okta_1;
Copy

Microsoft Power BI SSO の例

例については、次をご参照ください。