CREATE EXTERNAL ACCESS INTEGRATION¶
外部アクセス統合 を作成し、 UDF またはプロシージャハンドラーから外部ネットワークロケーションにアクセスできるようにします。
- こちらもご参照ください。
ALTER EXTERNAL ACCESS INTEGRATION、 DROP INTEGRATION、 SHOW INTEGRATIONS、 DESCRIBE INTEGRATION
構文¶
CREATE [ OR REPLACE ] EXTERNAL ACCESS INTEGRATION <name>
ALLOWED_NETWORK_RULES = ( <rule_name_1> [, <rule_name_2>, ... ] )
[ ALLOWED_API_AUTHENTICATION_INTEGRATIONS = ( <integration_name_1> [, <integration_name_2>, ... ] ) ]
[ ALLOWED_AUTHENTICATION_SECRETS = ( <secret_name_1> [, <secret_name_2>, ... ] ) ]
ENABLED = { TRUE | FALSE }
[ COMMENT = '<string_literal>' ]
必須パラメーター¶
name
外部アクセス統合の識別子。
識別子の値はアルファベットで始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子は、大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
ALLOWED_NETWORK_RULES = (rule_name [ , rule_name ... ])
許可されたネットワークルールを指定します。指定できるのはエグレスルールのみです。
ネットワークルールに関する参照情報については、 CREATE NETWORK RULE をご参照ください。
ENABLED = { TRUE | FALSE }
この統合を有効にするか無効にするかを指定します。統合が無効になっている場合、それに依存するハンドラーコードは外部ネットワークロケーションに到達できなくなります。
値では大文字と小文字が区別されません。
デフォルトは
TRUE
です。
オプションのパラメーター¶
ALLOWED_API_AUTHENTICATION_INTEGRATIONS = ( integration_name_1 [, integration_name_2, ... ] )
OAuth 認証サーバが UDF またはプロシージャで使用するシークレットを発行したセキュリティ統合を指定します。セキュリティ統合は、外部 API 統合に使用される型にする必要があります。
セキュリティ統合に関する参照情報については、 CREATE SECURITY INTEGRATION (外部 API 認証) をご参照ください。
ALLOWED_AUTHENTICATION_SECRETS = (secret_name [ , secret_name ... ])
この統合を参照する際に UDF またはプロシージャーが使用できるシークレットを指定します。
シークレットに関する参照情報については、 CREATE SECRET をご参照ください。
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. |
USAGE |
シークレット |
統合によって参照されるすべてのシークレットに必要です。 |
USAGE |
スキーマ |
統合によって参照されるシークレットを含むすべてのスキーマに必要です。 |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
Google翻訳 API へのアクセスを提供する外部アクセス統合を作成します。
より包括的な例については、 外部アクセス統合の作成と使用 をご参照ください。
認証情報を表すシークレットを作成します。
シークレットを作成するには、現在のスキーマに対する CREATE SECRET 権限を持つロールが割り当てられている必要があります。このコマンドでサポートされている他の種類のシークレットについては、 CREATE SECRET をご参照ください。この例では、
google_translate_oauth
はセキュリティ統合を意味します。詳細については、 CREATE SECURITY INTEGRATION (外部 API 認証) をご参照ください。CREATE OR REPLACE SECRET oauth_token TYPE = OAUTH2 API_AUTHENTICATION = google_translate_oauth OAUTH_REFRESH_TOKEN = 'my-refresh-token';
UDF の開発者が使えるように、シークレットに対する READ 権限を
developer
ロールに付与します。開発者がシークレットを使用する際に必要となるロールを作成します。
USE ROLE USERADMIN; CREATE OR REPLACE ROLE developer;
developer
ロールに READ 権限を付与します。USE ROLE SECURITYADMIN; GRANT READ ON SECRET oauth_token TO ROLE developer;
外部ネットワークの場所を表すネットワークルールを作成します。 CREATE NETWORK RULE で説明されている権限を持つロールを使用します。
USE ROLE SYSADMIN; CREATE OR REPLACE NETWORK RULE google_apis_network_rule MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('translation.googleapis.com');
シークレットとネットワークルールを使用して、外部アクセス統合を作成します。
USE ROLE ACCOUNTADMIN; CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION google_apis_access_integration ALLOWED_NETWORK_RULES = (google_apis_network_rule) ALLOWED_AUTHENTICATION_SECRETS = (oauth_token) ENABLED = true;
UDF の開発者が使えるように、統合に対する USAGE 権限を
developer
ロールに付与します。GRANT USAGE ON INTEGRATION google_apis_access_integration TO ROLE developer;
指定されたテキストを指定された言語のフレーズに翻訳する UDF
google_translate_python
を作成します。詳細については、 関数またはプロシージャでの外部アクセス統合の使用 をご参照ください。USE ROLE developer; CREATE OR REPLACE FUNCTION google_translate_python(sentence STRING, language STRING) RETURNS STRING LANGUAGE PYTHON RUNTIME_VERSION = 3.8 HANDLER = 'get_translation' EXTERNAL_ACCESS_INTEGRATIONS = (google_apis_access_integration) PACKAGES = ('snowflake-snowpark-python','requests') SECRETS = ('cred' = oauth_token ) AS $$ import _snowflake import requests import json session = requests.Session() def get_translation(sentence, language): token = _snowflake.get_oauth_access_token('cred') url = "https://translation.googleapis.com/language/translate/v2" data = {'q': sentence,'target': language} response = session.post(url, json = data, headers = {"Authorization": "Bearer " + token}) return response.json()['data']['translations'][0]['translatedText'] $$;
USAGE 権限を
google_translate_python
関数に付与して、ユーザーロールを持つ人がその関数を呼び出せるようにします。GRANT USAGE ON FUNCTION google_translate_python(string, string) TO ROLE user;
フレーズを翻訳するには
google_translate_python
関数を実行します。USE ROLE user; SELECT google_translate_python('Happy Thursday!', 'zh-CN');
これは以下のような出力を生成します。
------------------------------------------------------- | GOOGLE_TRANSLATE_PYTHON('HAPPY THURSDAY!', 'ZH-CN') | ------------------------------------------------------- | 快乐星期四! | -------------------------------------------------------