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

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

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

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

외부 액세스 통합을 사용하도록 앱을 구성하려면 다음을 수행합니다.

  • 자동 권한 부여 를 사용하여 외부 액세스 통합을 생성할 수 있는 권한을 컨슈머에게 요청합니다.

  • 앱에 외부 액세스 통합을 추가합니다.

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

참고

단일 앱 사양은 해당 앱이 만든 모든 외부 액세스 통합에 적용됩니다. 공급자는 하나의 앱에 대해 여러 앱 사양을 만들 수 있지만, 여러 개 만들 필요는 없습니다.

외부 액세스 통합을 위한 앱 사양 워크플로

외부 액세스 통합을 사용하도록 앱을 구성하는 일반적인 워크플로는 다음과 같습니다.

  1. 공급자는 앱에 대한 권한 자동 부여 를 구성합니다. 이를 통해 컨슈머는 앱이 외부 액세스 통합을 생성하도록 허용할 수 있습니다.

    참고

    앱 사양에 따라 매니페스트 파일을 manifest_version = 2 로 설정해야 합니다.

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

  3. 공급자는 설정 스크립트에 SQL 문을 추가하여 필요에 따라 다음 오브젝트를 만듭니다.

    설정 스크립트는 앱이 설치되거나 업그레이드될 때 또는 실행 중에 앱 사양 및 기타 오브젝트를 생성합니다.

  4. 앱을 구성할 때 컨슈머는 호스트 포트 및 기타 외부 서비스를 승인합니다. 컨슈머가 앱 사양을 보고 승인하는 방법에 대한 자세한 내용은 앱 사양을 사용하여 외부 리소스 연결 승인 섹션을 참조하세요.

외부 액세스 통합을 위한 앱 사양 정의

외부 액세스 통합을 위해 앱 사양 정의에는 다음 항목이 포함됩니다.

  • HOST_PORTS: 앱이 필요로 하는 네트워크 규칙에 정의된 호스트 포트 목록입니다.

  • PRIVATE_HOST_PORTS: Snowflake 외부 리소스에 대한 비공개 연결을 허용하는 비공개 호스트 포트 목록입니다.

참고

이러한 값은 앱이 네트워크 규칙을 생성 하는 데 사용하는 값과 일치해야 합니다.

매니페스트 파일의 버전 설정하기

앱에 대한 권한을 자동으로 부여하려면 다음 예제와 같이 매니페스트 파일의 시작 부분에 버전을 설정합니다.

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 external access integration to connect to an external service."
...
Copy

Snowflake는 :code:`manifest_version: 2`를 사용하여 앱이 설치되거나 업그레이드될 때 앱에 대한 CREATE EXTERNAL 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_PORTVALUE_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 이라는 앱 사양을 만듭니다.

컨슈머 계정에서 앱 사양 승인하기

공급자가 네트워크 규칙, 외부 액세스 통합 및 앱 사양을 생성하도록 앱을 구성한 후 컨슈머는 앱 사양을 보고 앱을 구성할 때 필요에 따라 앱 사양을 승인하거나 거부할 수 있습니다. 자세한 내용은 앱 사양을 사용하여 외부 리소스 연결 승인 섹션을 참조하십시오.