외부 액세스 통합(EAIs) 요청(앱 사양 포함)

이 항목에서는 컨슈머 계정에서 앱 사양을 사용하여 EAI(외부 액세스 통합)에 대한 액세스 권한을 요청하도록 Snowflake Native App 을 구성하는 방법을 설명합니다. EAI를 사용하면 앱이 Snowflake 외부의 엔드포인트에 연결할 수 있습니다.

앱에서 외부 엔드포인트에 액세스하기

외부 엔드포인트에 액세스하려면 앱이 네트워크 규칙과 EAI를 생성해야 합니다. EAI는 네트워크 규칙을 사용하여 특정 외부 네트워크 위치에 대한 액세스를 제한합니다. 네트워크 규칙은 앱이 액세스할 수 있는 외부 엔드포인트를 정의합니다.

EAI를 사용하도록 앱을 구성하려면 다음 단계를 따르세요.

  • 컨슈머에게 EAI를 생성하기 위한 권한을 요청하려면 :doc:`자동 권한 부여<requesting-auto-privs>`를 사용합니다.

  • 앱에 EAI를 추가합니다.

  • 애플리케이션 사양 을 사용하여 외부 엔드포인트에 연결하기 위한 권한을 컨슈머에게 요청합니다.

참고

단일 앱 사양은 앱에서 만든 모든 EAIs에 적용됩니다. 공급자는 앱에 대해 여러 앱 사양을 만들 수 있습니다. 하지만 이것이 필수적인 것은 아닙니다.

EAI에 대한 앱 사양 워크플로

  1. 공급자는 앱에 대한 :doc:`권한 자동 부여<requesting-auto-privs>`를 구성합니다. 이를 통해 컨슈머는 앱이 EAI를 생성하도록 허용할 수 있습니다.

    참고

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

  2. 공급자는 :ref:`CREATE EXTERNAL ACCESS INTEGRATION 권한<label-native_apps_app_spec_add_eai_priv>`을 추가합니다.

  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

매니페스트 파일에 CREATE EXTERNAL ACCESS INTEGRATION 권한을 추가합니다.

CREATE EXTERNAL ACCESS INTEGRATION 권한은 앱이 설치 또는 업그레이드 중에 외부 액세스 통합을 생성할 수 있도록 허용합니다.

  • 앱이 CREATE EXTERNAL ACCESS INTEGRATION 권한을 요청하도록 구성하려면 매니페스트 파일의 privileges 섹션에 다음 코드를 추가합니다.

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

매니페스트 파일에서 :code:`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_PORTVALUE_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 섹션을 참조하세요.