アプリ仕様を使用した外部アクセス統合のリクエスト(EAIs)

このトピックでは、 Snowflake Native App を構成し、コンシューマーアカウントでアプリ仕様を使用して外部アクセス統合(EAI)へのアクセスをリクエストする方法を説明します。また EAI は、アプリがSnowflakeの外部にあるエンドポイントに接続できるようにします。

アプリからの外部エンドポイントへのアクセス

外部エンドポイントにアクセスするには、アプリはネットワークルールと EAI を作成する必要があります。これはネットワークルールを使用して特定の外部ネットワークロケーションへのアクセスを制限します。ネットワークルールは、アプリがアクセスできる外部エンドポイントを定義します。

EAI を使用するようにアプリを構成するには次のステップに従います。

  • コンシューマーに EAI を作成する権限をリクエストするには、権限の自動付与 を仕様します。

  • EAI をアプリに追加します。

  • アプリケーション仕様 を使用して、コンシューマーに外部エンドポイントへの接続許可をリクエストします。

注釈

単一のアプリ仕様は、アプリによって作成されたすべての EAIs に適用されます。プロバイダーはアプリに対して複数のアプリ仕様を作成できますが、これは必須ではありません。

EAI のアプリ仕様ワークフロー

  1. プロバイダーは、アプリの :doc:` 権限の自動付与 <requesting-auto-privs>` 構成します。これにより、コンシューマーはアプリに EAI を作成する権限を与えることができます。

    注釈

    App specifications require that manifest_version: 2 be set in the manifest file.

  2. プロバイダーは、マニュフェストファイルに CREATE EXTERNAL ACCESS INTEGRATION 権限 を追加します。

  3. 次のオブジェクトを作成するためにセットアップスクリプトに SQL のステートメントを実行します。

    セットアップスクリプトは、アプリのインストール時やアップグレード時、または実行時にアプリの仕様やその他のオブジェクトを作成します。

  4. When configuring the app, consumers review and approve the host ports and external services. For more information on how consumers view and approve app specifications, see Approve app specifications.

EAI のアプリ仕様定義

EAI のアプリ仕様定義には次のエントリが含まれます。

  • HOST_PORTS:アプリが必要とするネットワークルールで定義されているホストポートのリスト。

  • PRIVATE_HOST_PORTS:Snowflake外部のリソースへのプライベート接続を許可するプライベートホストポートのリスト。

注釈

これらの値は、アプリが ネットワークルールの作成 に使用する値と一致する必要があります。

マニフェストファイルのバージョンを指定します。

To enable automated granting of privileges for an app, set the version at the beginning of the manifest file as shown in the following example:

manifest_version: 2
Copy

マニフェストファイルに CREATEEXTERNALACCESSINTEGRATION に対する権限を追加します

CREATEEXTERNALACCESSINTEGRATION の権限では、インストールまたはアップグレード時にアプリが外部アクセス統合を作成できます。

  • アプリが CREATEEXTERNALACCESSINTEGRATION 権限をリクエストするように構成するには、マニフェストファイルの privileges セクションに次のコードを追加します:

    manifest_version: 2
    ...
    privileges:
      - CREATE EXTERNAL ACCESS INTEGRATION:
          description: "Allows the app to create an EAI to connect to an external service."
    ...
    
    Copy

マニフェストファイルで manifest_version を2に設定した場合、Snowflakeは、インストールまたはアップグレード中にアプリに CREATE EXTERNAL ACCESS INTEGRATION 権限を自動的に付与します。

ネットワークルールと EAI をセットアップスクリプトに追加

EAIs は、特定の外部ネットワークロケーションへのアクセスを有効にするSnowflakeオブジェクトであり、アプリがアクセスできる外部ロケーションを指定するネットワークルールのリストが含まれています。

  • アプリのネットワークルールを作成するには、次の例に示すようにセットアップスクリプトに CREATE NETWORK RULE コマンドを追加します。

    CREATE OR REPLACE NETWORK RULE setup.my_network_rule
    TYPE = HOST_PORT
    VALUE_LIST = ( 'example.com' )
    MODE = EGRESS;
    
    Copy

HOST_PORT および VALUE_LIST プロパティは、ネットワークルールが有効なドメイン、ポート、またはポートの範囲をポイントする必要があることを示します。アプリがインストールまたはアップグレードされると、コンシューマーはアプリがこれらのドメインやポートを使用する許可を与えることになります。

EAI を作成する

  • アプリの EAI を作成するには、次の例に示すように、セットアップスクリプトに CREATE EXTERNAL ACCESS INTEGRATION コマンドを追加します。

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_app_prefix_eai_rule
      ALLOWED_NETWORK_RULES = (setup.my_network_rule)
      ENABLED = TRUE;
    
    Copy

注釈

このコマンドはコンシューマーアカウントに EAI を作成します。ただし、リクエストされたホストポートへの外部アクセスを許可するアプリ仕様をコンシューマーが承認するまで使用できません。

詳細については、 Approve app specifications をご参照ください。

外部エンドポイントにアクセスするためのユーザー定義関数を作成する

EAI を作成した後、セットアップスクリプトは、ネットワークルールで定義されたエンドポイントに接続するために使用するユーザー定義関数とストアドプロシージャを作成できます。

次の例は、``my_app_prefix_eai_rule``EAI を使用するユーザー定義関数を示しています。

CREATE OR REPLACE FUNCTION setup.EXTERNAL_ACCESS_UDF(hostname STRING)
  RETURNS STRING
  LANGUAGE JAVA
  HANDLER='TestHostNameLookup.compute'
  EXTERNAL_ACCESS_INTEGRATIONS = (my_app_prefix_eai_rule)
  AS
  '
      import java.net.InetAddress;
      import java.net.UnknownHostException;
      class TestHostNameLookup {{
          public static String compute(String hostname) throws Exception {{
              InetAddress addr = null;
              try {
                  addr = InetAddress.getByName(hostname);
              } catch(UnknownHostException ex) {
                  return "Hostname lookup failed";
              }
              return "Hostname lookup successful";
          }
      }
';
GRANT USAGE ON FUNCTION setup.EXTERNAL_ACCESS_UDF(STRING)
  TO APPLICATION ROLE app_public;
Copy

この関数は EXTERNAL_ACCESS_INTEGRATIONS の値を、以前に作成した EAI に設定します。

この関数は InetAddress Javaパッケージを使用して、プロシージャに渡されたホスト名を検索します。提供するホスト名は、EAI によって使用されるネットワークルールの VALUE_LIST プロパティで提供される値と一致する必要があります。

EAI のアプリ仕様の作成

次の例は、EAI のアプリ仕様を作成する方法を示しています。

ALTER APPLICATION SET SPECIFICATION eai_app_spec
  TYPE = EXTERNAL_ACCESS
  LABEL = 'Connection to an external API'
  DESCRIPTION = 'Access an API that exists outside Snowflake'
  HOST_PORTS = ('example.com')
Copy

このコマンドは、eai_app_spec という名前のアプリ仕様を作成します。

コンシューマーアカウントでアプリ仕様を承認する

プロバイダーがアプリを構成して、ネットワークルール、EAI とアプリ仕様を作成すると、コンシューマーはアプリ仕様を表示し、アプリの構成時に必要に応じて承認または拒否することができます。詳細については、 Approve app specifications をご参照ください。