CREATE SECURITY INTEGRATION (外部 OAuth)¶
アカウントに新しい外部 OAuth セキュリティ統合を作成するか、既存の統合を置き換えます。外部 OAuth セキュリティ統合により、クライアントはサードパーティの認証サーバーを使用して、Snowflakeとのやり取りに必要なアクセストークンを取得できます。
他の型のセキュリティ統合(例: Snowflake OAuth)の作成については、 CREATE SECURITY INTEGRATION をご参照ください。
構文¶
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>' ] -- For OKTA | PING_FEDERATE | CUSTOM
[ EXTERNAL_OAUTH_JWS_KEYS_URL = '<string_literal>' | ('<string_literal>' [ , '<string_literal>' ... ] ) ] -- For Azure
[ 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>') ]
[ EXTERNAL_OAUTH_ANY_ROLE_MODE = DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE ]
[ EXTERNAL_OAUTH_SCOPE_DELIMITER = '<string_literal>' ] -- Only for EXTERNAL_OAUTH_TYPE = CUSTOM
必須パラメーター¶
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' [ , ... ] )
アクセストークンをSnowflakeユーザー記録にマップするために使用する、アクセストークンクレームを指定します。
クレームのデータ型は、文字列または文字列のリストである必要があります。
EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME | EMAIL_ADDRESS'
アクセストークンをSnowflakeユーザーレコードにマップするために使用する、Snowflakeユーザーレコード属性を示します。
オプションのパラメーター¶
EXTERNAL_OAUTH_JWS_KEYS_URL = 'string_literal'
外部 OAuth アクセストークンを検証するための、公開キーまたは証明書をダウンロードするエンドポイントを指定します。
この構文は、条件が
EXTERNAL_OAUTH_TYPE = OKTA | PING_FEDERATE | CUSTOM
のセキュリティ統合に適用されますEXTERNAL_OAUTH_JWS_KEYS_URL = 'string_literal' | ('string_literal' [ , 'string_literal' ... ] )
外部 OAuth アクセストークンを検証するための、公開キーまたは証明書をダウンロードするエンドポイントまたはエンドポイントのリストを指定します。リストで指定できる URLs の最大数は3です。
この構文は、条件が
EXTERNAL_OAUTH_TYPE = AZURE
のセキュリティ統合に適用されます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 と SECURITYADMIN のロールが含まれています。これらの権限ロールをリストから削除するには、 ALTER ACCOUNT コマンドを使用して EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST アカウントパラメーターを
FALSE
に設定します。EXTERNAL_OAUTH_ALLOWED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )
クライアントがプライマリロールとして設定できるロールのリストを指定します。
このリストのロールは、外部 OAuth 認証サーバーからのアクセストークンに基づいてSnowflakeセッションを作成するときに使用できます。
ご用心
このパラメーターは、ACCOUNTADMIN および SECURITYADMIN システムのロールをサポートします。
これらの高度な権限を持つロールをプライマリロールとして設定してSnowflakeセッションを作成する場合は、注意が必要です。
EXTERNAL_OAUTH_AUDIENCE_LIST = ('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')
EXTERNAL_OAUTH_ANY_ROLE_MODE = DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE
OAuth クライアントまたはユーザーが、 OAuth アクセストークンで定義されていないロールを使用できるかどうかを指定します。 Power BI からSnowflakeへの統合 では、このパラメーターが有効になっていても、 PowerBI ユーザーはロールを切り替えることができないことに注意してください。
DISABLE
の場合、 OAuth クライアントまたはユーザーは、ロール(つまり、use role <ロール>;
)を切り替えられません。デフォルト。ENABLE
の場合、 OAuth クライアントまたはユーザーは、ロールを切り替えられます。ENABLE_FOR_PRIVILEGE
OAuth クライアントまたはユーザーは、USE_ANY_ROLE
権限を持つクライアントまたはユーザーのロールのみを切り替えられます。この権限は、ユーザーが使用できる1つ以上のロールに対して付与および取り消しができます。例:
値は必要に応じて一重引用符で囲むことができることに注意してください(例:
DISABLE
または'DISABLE'
のいずれか)。grant USE_ANY_ROLE on integration external_oauth_1 to role1;
revoke USE_ANY_ROLE on integration external_oauth_1 from role1;
EXTERNAL_OAUTH_SCOPE_DELIMITER = 'string_literal'
認証トークンのスコープ区切り文字を指定します。
区切り文字は、コンマ(
','
)やスペース(' '
)などの任意の1文字にすることができます。このセキュリティ統合プロパティはオプションであり、デフォルトのコンマ区切り文字を上書きするために使用できます。このプロパティは、カスタムの外部 OAuth 統合でのみサポートされていることに注意してください。ここで、
EXTERNAL_OAUTH_TYPE = CUSTOM
Snowflakeアカウントでこのプロパティを有効にするには、 Snowflakeサポート にご連絡ください。
アクセス制御の要件¶
この 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 <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、古いオブジェクトの削除と新しいオブジェクトの作成が1つのトランザクションで処理されます。
例¶
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';DESCRIBE INTEGRATION を使用して統合設定を表示します。
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';
DESCRIBE INTEGRATION を使用して統合設定を表示します。
DESC SECURITY INTEGRATION external_oauth_okta_1;