外部機能とのプライベート接続: Azureポータル

このトピックでは、 Microsoft Azure でSnowflake アカウントの外部関数を呼び出して外部サービスへのアウトバウンドプライベート接続を設定するための設定詳細を、以下のように説明します:

  • Azure Portal のユーザーインターフェイスを使用して、 Microsoft Azure でリソースを構成します。

  • Snowflakeで API 統合と外部関数を作成します。

  • Snowflakeの外部関数を呼び出して、外部サービスへのプライベート接続を検証します。

請求と価格設定

各プライベート・コネクティビティ・エンドポイントの料金は、処理されるデータ総量に応じて支払われます。これらのアイテムの価格については、 Snowflake Service Consumption Table をご参照ください。

プロセス概要

以下は、コンフィギュレーション・プロセスの一般的な概要です。Snowflake のステップは、 ACCOUNTADMIN ロールを持つユーザーによって実行される必要があります。Azure Portal でのステップは、特に指定がない限り、対応するリソースを使用する権利を持つユーザーによって実行されます。

以下の手順は、パブリック・インターネットで外部機能を使用する場合と同じです:

  1. Microsoft Azure上の外部関数の前提条件の手順を完了します。

  2. Azure Portalで、リモートサービスを作成します。

  3. Azure Portalで、プロキシ・サービスを作成します。

しかし、プライベート接続のニーズとパブリック・インターネットのニーズを完全に区別するために、新しいリソースを作成したい場合もあるでしょう。社内のセキュリティ管理者と相談し、ニーズに合った最適なアプローチを決定します。

これらの手順は、外部サービスのプライベート接続を使用する外部関数特有のものです:

  1. Snowflakeで、プライベートエンドポイントを作成します。

    Snowflake は、プライベートエンドポイントの IP アドレスを内部的に保存します。

  2. Azure Portal で、プライベート・エンドポイントを承認します。

    この操作は、Azure API Management リソース(外部サービス)のオーナーが行います。

  3. Snowflake で、新しい API 統合を作成します。

    外部サービスへのプライベート接続をサポートするには、専用の API 統合が必要です。

  4. Snowflakeで外部関数を作成します。プライベートの接続性 URL は、外部関数の呼び出し URL の値です。

  5. Snowflakeで外部関数を呼び出し、プライベート接続を使用してSnowflakeが外部サービスに接続できるようにします。

  6. 不要なプライベート接続エンドポイントのデプロビジョンを行います。

設定

Azure ポータルで以下のステップを完了します:

  1. Azure API Management リソースがすでにセットアップされていて、リモートサービスとプロキシサービスを再利用したい場合は、プライベート接続のステップまでスキップしてください。そうでない場合は、以下の手順を実行します:

  2. Microsoft Azure 上の外部関数について、 前提条件 を完了します。

  3. Azure Portal で、 リモートサービスを作成します

  4. Azure Portal で、 プロキシ・サービスを作成します

プライベート接続を設定するには、以下の手順を実行します:

  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 Management リソースの所有者として、プライベートエンドポイントを承認します。詳しくは、 承認プロセス をご覧ください。

  4. API Integration for Azure をプロキシサービス にリンクして、Snowflake が API リクエストを Azure API Management サービスに送信できるようにします。

  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 テンプレートのどちらを使って外部関数を作成するかによって異なります。詳しくは、 invocation URL format をご参照ください。

  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リソースの名前とリソースグループの名前に対応する値で更新します。

詳細とオプションについては、以下のトピックを参照してください: