例 - OAuth を使用した外部アクセス¶
このトピックでは、参照を使用してプロバイダーがSnowflake外部のエンドポイントへのアクセスを許可できるようにする方法の例を示します。この例では、 OAuth2 シークレットと外部アクセス統合を使用してアクセスを許可します。
マニフェストファイルへの参照を追加する¶
OAuth を使用して外部エンドポイントへのアクセスを有効にするには、プロバイダーは manifest.yml
ファイルに次のエントリを追加できます。
USAGE 権限を使用した EXTERNAL ACCESS INTEGRATION 参照
READ 権限を使用した SECRET 参照
次の例の manifest.yml
ファイルは、これらの参照を定義する方法を示しています。
manifest_version: 1
configuration:
log_level: warn
trace_level: off
...
references:
- consumer_secret:
label: "Consumer's Secret"
description: "Needed to authenticate with xyz.com"
privileges:
- READ
object_type: SECRET
register_callback: config.register_my_secret
configuration_callback: config.get_config_for_ref
- consumer_external_access:
label: "Default External Access Integration"
description: "This is required to access xyz.com"
privileges:
- USAGE
object_type: EXTERNAL ACCESS INTEGRATION
register_callback: config.register_reference
configuration_callback: config.get_config_for_ref
required_at_setup: true
注釈
これらの参照は、 multi_valued
プロパティをtrueに設定することはできません。
シークレットと外部アクセスオブジェクトへの参照には、セットアップスクリプトに configuration_callback
関数も必要です。詳細については、 セットアップスクリプトにconfiguration_callback関数を追加する をご参照ください。
セットアップスクリプトにconfiguration_callback関数を追加する¶
シークレットおよび外部アクセスの統合の参照を追加した後、セットアップスクリプトに configuration_callback
関数を追加する必要があります。外部アクセス統合またはシークレットを作成するには、アプリケーションがホストポート、シークレットタイプ、 OAuth の承認およびトークンエンドポイントなどの値を決定できる必要があります。 configuration_callback
は、コンシューマーアカウントからアプリケーションにこの情報を提供します。
Snowsight はこのコールバックプロシージャを実行して、ユーザーにオブジェクトを構成するよう求める構成ダイアログを表示します。実行するには、プロシージャをアプリロールに付与する必要があります。
注釈
configuration_callbackは、外部アクセス統合とシークレットオブジェクトに対してのみサポートされます。
コールバック関数には次の要件があります。
コールバック関数は、参照名を含む引数を受け入れる必要があります。これにより、同じコールバック関数で複数の参照を処理できるようになります。
コールバック関数は、整形式の JSON オブジェクトを返す必要があります。JSON オブジェクトには、次のプロパティが含まれています。
type
メッセージの種類を示します。有効な値:
CONFIGURATION
: オブジェクトタイプに基づいて、オブジェクトの構成値を含むペイロードを返します。ERROR
: Snowsight に表示される関連メッセージとともにエラーを返します。
payload
type
プロパティの値と構成されているオブジェクトタイプに基づいて、応答の内容が含まれます。
構成コールバックのシグネチャは次のとおりです。
CREATE OR REPLACE PROCEDURE configuration_callback_name(ref_name string)
RETURNS STRING
language <language>
as
$$
...
$$
セットアップスクリプト内で、ストアドプロシージャを呼び出す権限を持つように、アプリの構成に使用されるアプリケーションロールに USAGE 権限を付与する必要があります。次の例は、ストアドプロシージャに USAGE 権限を付与する方法を示しています。
GRANT USAGE ON PROCEDURE configuration_callback_name(string)
TO APPLICATION ROLE app_role;
コールバック関数は JSON オブジェクトを返します。詳細については、 構成コールバック応答の JSON 形式 をご参照ください。
次の例は、外部アクセスとシークレット参照を処理するための一般的なコールバック関数を示しています。
この関数は次を実行します。
外部アクセス統合への参照の場合、このプロシージャは必要な構成情報を含む JSON オブジェクトを返します。詳細については、 外部アクセス統合の JSON 形式 をご参照ください。
シークレットへの参照の場合、このプロシージャはタイプ OAuth2 のシークレット構成を含む JSON オブジェクトを返します。詳細については、 シークレット参照の JSON 形式 をご参照ください。
CREATE OR REPLACE PROCEDURE config.get_config_for_ref(ref_name STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
CASE (ref_name)
WHEN 'CONSUMER_EXTERNAL_ACCESS' THEN
RETURN '{
"type": "CONFIGURATION",
"payload":{
"host_ports":["google.com"],
"allowed_secrets" : "LIST",
"secret_references":["CONSUMER_SECRET"]}}';
WHEN 'CONSUMER_SECRET' THEN
RETURN '{
"type": "CONFIGURATION",
"payload":{
"type" : "OAUTH2",
"security_integration": {
"oauth_scopes": ["https://www.googleapis.com/auth/analytics.readonly"],
"oauth_token_endpoint": "https://oauth2.googleapis.com/token",
"oauth_authorization_endpoint":
"https://accounts.google.com/o/oauth2/auth"}}}';
END CASE;
RETURN '';
END;
$$;
GRANT USAGE ON PROCEDURE config.get_config_for_ref(string)
TO APPLICATION ROLE app_admin;
シークレットと外部アクセスの統合にPython Permission SDK を使用する¶
Python Permission SDK は、シークレットおよび外部アクセス統合オブジェクトをサポートします。ただし、これらのオブジェクトの動作は若干異なります。
プロバイダーが permission.request_reference()
を呼び出し、 object_type
値が SECRET
または EXTERNAL ACCESS INTEGRATION
である参照の名前を渡すと、 Snowsight は自動的に次の操作を実行します。
セットアップスクリプトの
configuration_callback
関数を呼び出します。configuration_callback
関数が返す値を検証します。コンシューマーに構成ダイアログを表示します。
注釈
プロバイダーが payload.allow_secrets
プロパティを LIST
に設定して外部アクセス統合を構成する場合、シークレットの参照を要求するために別の呼び出しを行う必要はありません。シークレット構成は、外部アクセス統合構成の一部として暗黙的に含まれます。