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

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

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

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

外部アクセス統合を使用するようにアプリを構成するには、

  • 権限の自動付与 を使用して、コンシューマーに外部アクセス統合を作成する権限をリクエストします。

  • アプリに外部アクセス統合を追加する

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

注釈

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

外部アクセス統合のアプリ仕様ワークフロー

外部アクセス統合を使用するようにアプリを構成するための一般的なワークフローは次のとおりです。

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

    注釈

    アプリの仕様ではマニフェストファイルで manifest_version = 2 に設定します。

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

  3. プロバイダーが追加 必要に応じて、次のオブジェクトを作成するためにセットアップスクリプトに SQL のステートメントを実行します。

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

  4. アプリを構成するとき、コンシューマーはホストポートおよびその他の外部サービスを承認します。コンシューマーがアプリ仕様を表示し、承認する方法については、アプリの仕様を使用した外部リソースへの接続の承認 をご参照ください。

外部アクセス統合のアプリ仕様定義

外部アクセス統合の場合、アプリ仕様定義には以下の項目があります。

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

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

注釈

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

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

アプリに対する権限の自動付与を有効にするには、次の例に示すように、マニフェストファイルの先頭でバージョンを設定します。

manifest_version: 2
Copy

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

CREATEEXTERNALACCESSINTEGRATION の権限では、インストールまたはアップグレード時にアプリが外部アクセス統合を作成できます。アプリが CREATEEXTERNALACCESSINTEGRATION 権限をリクエストするように構成するには、マニフェストファイルの privileges セクションに次のコードを追加します:

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

manifest_version: 2 を使用して、アプリがインストールまたはアップグレードされると、Snowflakeは自動的に CREATEEXTERNAL ACCESS INTEGRATION 権限をアプリに付与します。

セットアップスクリプトにネットワークルールと外部アクセス統合を追加する

外部アクセス統合は、特定の外部ネットワークロケーションへのアクセスを可能にする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 プロパティは、ネットワークルールが有効なドメイン、ポート、またはポートの範囲をポイントする必要があることを示します。アプリがインストールまたはアップグレードされると、コンシューマーはアプリがこれらのドメインやポートを使用する許可を与えることになります。

外部アクセス統合を作成する

アプリの外部アクセス統合を作成するには、 次の例に示すように、セットアップスクリプトに 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

注釈

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

詳細については、 アプリの仕様を使用した外部リソースへの接続の承認 をご参照ください。

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

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

次の例は、my_app_prefix_eai_rule 外部アクセス統合を使用するユーザー定義関数を示しています。

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 以前に作成した外部アクセスを統合します。

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

外部アクセス統合のアプリ仕様の作成

次の例は、外部アクセス統合を作成する方法を示しています。

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 という名前のアプリ仕様を作成します。

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

プロバイダーがアプリを構成して、ネットワークルール、外部アクセス統合、アプリ仕様を作成すると、コンシューマーはアプリ仕様を表示し、アプリの構成時に必要に応じて承認または拒否することができます。詳細については、 アプリの仕様を使用した外部リソースへの接続の承認 をご参照ください。