例 - 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
Copy

注釈

これらの参照は、 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
$$
  ...
$$
Copy

セットアップスクリプト内で、ストアドプロシージャを呼び出す権限を持つように、アプリの構成に使用されるアプリケーションロールに USAGE 権限を付与する必要があります。次の例は、ストアドプロシージャに USAGE 権限を付与する方法を示しています。

GRANT USAGE ON PROCEDURE configuration_callback_name(string)
  TO APPLICATION ROLE app_role;
Copy

コールバック関数は 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;
Copy

シークレットと外部アクセスの統合にPython Permission SDK を使用する

Python Permission SDK は、シークレットおよび外部アクセス統合オブジェクトをサポートします。ただし、これらのオブジェクトの動作は若干異なります。

プロバイダーが permission.request_reference() を呼び出し、 object_type 値が SECRET または EXTERNAL ACCESS INTEGRATION である参照の名前を渡すと、 Snowsight は自動的に次の操作を実行します。

  • セットアップスクリプトの configuration_callback 関数を呼び出します。

  • configuration_callback 関数が返す値を検証します。

  • コンシューマーに構成ダイアログを表示します。

注釈

プロバイダーが payload.allow_secrets プロパティを LIST に設定して外部アクセス統合を構成する場合、シークレットの参照を要求するために別の呼び出しを行う必要はありません。シークレット構成は、外部アクセス統合構成の一部として暗黙的に含まれます。