외부 함수를 사용한 비공개 연결: Azure ARM 템플릿

이 항목에서는 Microsoft Azure 에서 Snowflake 계정에 대한 외부 함수를 호출하여 외부 서비스에 대한 비공개 연결을 설정하는 데 필요한 구성 세부 정보를 제공합니다. ARM 템플릿을 사용하여 Microsoft Azure 에서 리소스를 구성할 수 있습니다. 그런 다음 Snowflake에서 API 통합과 외부 함수를 만들 수 있습니다. 마지막으로, 외부 함수를 호출하여 외부 서비스에 대한 비공개 연결을 검증할 수 있습니다.

청구 및 가격

처리된 총 데이터와 함께 각 비공개 연결 엔드포인트에 대한 비용을 지불합니다. 이러한 품목의 가격은 Snowflake서비스 사용 테이블 을 참조하십시오.

프로세스 개요

구성 프로세스에 대한 일반적인 개요는 다음과 같습니다. Snowflake의 모든 단계는 ACCOUNTADMIN 역할이 있는 사용자가 수행해야 합니다. 달리 지정하지 않는 한, Azure의 모든 단계는 해당 리소스를 사용할 권한이 있는 사용자가 수행합니다.

다음 단계는 공용 인터넷으로 외부 함수를 사용하는 것과 동일합니다.

  1. Microsoft Azure에서 외부 함수에 대한 필수 단계를 완료합니다.

  2. Azure Portal에서 애플리케이션을 만듭니다.

  3. Azure Portal에서 원격 서비스를 만듭니다.

그러나 비공개 연결 요구 사항과 공공 인터넷 요구 사항을 완벽히 구분하기 위해 새로운 리소스를 만들 수도 있습니다. 자신의 필요에 가장 적합한 접근 방식을 결정하려면 내부 보안 관리자와 상의하십시오.

이러한 단계는 외부 서비스에 대한 비공개 연결을 사용하는 외부 함수에만 고유한 단계입니다.

  1. Snowflake에서 프라이빗 엔드포인트를 만듭니다.

  2. Azure Portal에서 프라이빗 엔드포인트를 승인합니다.

    이 작업은 Azure API 관리 리소스 소유자가 수행합니다.

  3. Snowflake에서 새 API 통합을 만듭니다.

    외부 서비스에 대한 비공개 연결을 지원하려면 전용 API 통합이 필요합니다.

  4. Snowflake에서 외부 함수를 만듭니다. 외부 함수에서 비공개 연결 URL을 호출 URL로 사용합니다.

  5. Snowflake에서 외부 함수를 호출하여 Snowflake가 비공개 연결을 사용하여 외부 서비스에 연결할 수 있도록 합니다.

구성

Azure Portal에서 다음 단계를 완료합니다.

  1. 이미 ARM 템플릿이 설정되어 있고 원격 서비스와 프록시 서비스를 재사용하려는 경우 비공개 연결 단계로 건너뜁니다. 그렇지 않은 경우 다음 단계를 완료합니다.

  2. Microsoft Azure의 외부 함수에 대한 전제 조건 을 완전히 충족합니다.

  3. Azure Portal에서 애플리케이션을 만듭니다.

  4. 다음과 같이 원격 서비스를 만듭니다.

    1. Azure Portal에서 Deploy a custom template 을 검색합니다.

    2. Select a template 탭에서 Build your own template 을 선택합니다.

    3. Load file 을 선택합니다.

    4. 템플릿을 다운로드한 컴퓨터의 디렉터리로 이동하고 해당 템플릿을 선택합니다.

    5. Save 를 선택합니다. 그러면 Custom deployment 화면으로 이동합니다.

  5. 다음 단계를 계속 진행합니다.

    1. Azure 함수 및 API Management 서비스 만들기.

    2. API 통합과 외부 함수에 필요한 URLs 가져오기.

비공개 연결을 구성하려면 다음 단계를 완료합니다.

  1. Snowflake에서 CREATE API INTEGRATION 명령을 실행하여 외부 서비스에 대한 비공개 연결을 지원하는 새로운 API 통합을 만듭니다. Microsoft Azure 구독에 맞게 속성 값을 업데이트합니다.

    CREATE API INTEGRATION external_api_integration_azure_private
      API_PROVIDER = azure_private_api_management
      AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      AZURE_AD_APPLICATION_ID = 'dv3421nq-1g4s-4ap4-x89c-xrf28hna7m2o'
      API_ALLOWED_PREFIXES = ('https://aztest1-external-function-api.azure.net')
      ENABLED = TRUE
      COMMENT = 'API integration for private connectivity to an external service with external functions on Azure.';
    
    Copy
  2. Snowflake에서 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 프라이빗 엔드포인트를 생성합니다. Microsoft Azure 구독에 맞게 인자 값을 업데이트합니다.

    USE ROLE ACCOUNTADMIN;
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      '/subscriptions/f4b00c5f-f6bf-41d6-806b-e1cac4f1f36f/resourceGroups/aztest1-external-function-rg/providers/Microsoft.ApiManagement/service/aztest1-external-function-api',
      'aztest1-external-function-api.azure.net',
      'Gateway'
      );
    
    Copy
  3. Azure Portal에서 Azure API 관리 리소스의 소유자로서 비공개 엔드포인트를 승인합니다. 자세한 내용은 승인 프로세스 섹션을 참조하십시오.

  4. Azure용 API 통합을 프록시 서비스 에 연결하여 Snowflake가 Azure API Management 서비스로 API 요청을 보낼 수 있도록 합니다.

  5. Azure API Management 리소스에 대한 공개 액세스를 차단할 수 있습니다. 자세한 내용은 (이 항목의) Azure API Management 리소스에 대한 보안 액세스 섹션을 참조하십시오.

  6. Snowflake에서 외부 함수를 저장할 데이터베이스와 스키마가 이미 있고 이러한 오브젝트를 사용하려는 경우 이러한 오브젝트가 사용 중 인지 확인하거나 Snowsight 에서 이러한 오브젝트를 선택하십시오. 그렇지 않은 경우 외부 서비스에 대한 비공개 연결에 사용할 외부 함수를 저장하기 위한 데이터베이스와 스키마를 만듭니다.

    CREATE DATABASE private_external_service_db;
    CREATE SCHEMA private_ext_functions;
    
    Copy
  7. Snowflake에서 CREATE EXTERNAL FUNCTION 명령을 실행하여 외부 서비스에 대한 비공개 연결에 사용할 외부 함수를 생성합니다. 외부 서비스 비공개 연결 URL로 호출 URL을 업데이트해야 합니다.

    CREATE OR REPLACE SECURE EXTERNAL FUNCTION private_ext_function_azure_portal(
      a INTEGER , b VARCHAR)
      RETURNS VARIANT
      API_INTEGRATION = external_api_integration_azure_private
      AS 'https://aztest1-external-function-api.azure.net/my-api-url-suffix/http-function-name';
    
    Copy

    URL 형식은 외부 함수를 만드는 데 Azure Portal을 사용하는지, Azure ARM 템플릿을 사용하는지 여부에 따라 달라집니다. 자세한 내용은 호출 URL 형식 섹션을 참조하십시오.

  8. Snowflake에서 외부 서비스에 대한 비공개 연결을 테스트하려면 외부 함수를 호출합니다.

    SELECT private_ext_function_azure(66, 'Mario');
    
    Copy
    [0, 66, 'Mario']
    

함수의 출력이 프로시저 시작 시 원격 서비스의 구성과 일치하는 결과를 반환하는 경우 외부 서비스에 대한 비공개 연결이 예상대로 작동하고 있음을 확인했습니다.

Azure API Management 리소스에 대한 보안 액세스

외부 함수와 함께 사용하기 위해 프라이빗 엔드포인트에 연결된 Azure API Management 리소스에 대한 액세스를 보호할 수 있습니다. Azure API Management 리소스의 관점에서 Snowflake는 인바운드 연결입니다. 액세스 보안 조치를 취함으로써 외부 함수 사용을 훼손할 수 있는 공격 가능성을 줄입니다.

예를 들어, 이 Azure CLI apim 명령 을 실행하여 공개 액세스를 차단할 수 있습니다.

az apim update --name <api-name> --resource-group <resource group name> --public-network-access false
Copy

API Management 리소스 이름과 리소스 그룹 이름에 해당하는 값으로 자리 표시자 값을 업데이트합니다.

자세한 내용과 옵션은 다음 항목을 참조하십시오.