Connectivité privée avec fonctions externes : modèle ARM Azure

Cette rubrique fournit des détails de configuration pour configurer une connectivité privée à un service externe en appelant une fonction externe pour les comptes Snowflake sur Microsoft Azure. Vous pouvez utiliser le modèle ARM pour configurer les ressources dans Microsoft Azure. Ensuite, vous pouvez créer une intégration API et une fonction externe dans Snowflake. Enfin, vous pouvez appeler la fonction externe pour valider la connectivité privée au service externe.

Facturation et tarification

Vous payez pour le point de terminaison de la connectivité privée et pour toutes les données traitées. Pour connaître les prix de ces éléments, consultez le tableau de consommation des services de Snowflake.

Aperçu du processus

Voici un aperçu général du processus de configuration. Les étapes dans Snowflake doivent être effectuées par un utilisateur disposant du rôle ACCOUNTADMIN. Les étapes dans Azure sont effectuées par un utilisateur disposant des droits d’utilisation des ressources correspondantes, sauf indication contraire.

Les étapes suivantes sont les mêmes que celles utilisées pour l’utilisation de fonctions externes avec l’Internet public :

  1. Suivez les étapes préalables pour les fonctions externes sur Microsoft Azure.

  2. Dans le portail Azure, créez une application.

  3. Dans le portail Azure, créez le service distant.

Cependant, vous souhaiterez peut-être créer de nouvelles ressources pour différencier complètement vos besoins de connectivité privée de vos besoins Internet public. Consultez vos administrateurs de sécurité interne pour déterminer la meilleure approche adaptée à vos besoins.

Ces étapes sont propres aux fonctions externes qui utilisent une connectivité privée pour un service externe :

  1. Dans Snowflake, créez un point de terminaison privé.

  2. Dans le portail Azure, approuvez le point de terminaison privé.

    Cette action est effectuée par le propriétaire de la ressource Azure API Management.

  3. Dans Snowflake, créez une intégration API.

    Vous avez besoin d’une intégration API dédiée pour prendre en charge la connectivité privée au service externe.

  4. Dans Snowflake, créez une fonction externe. Utilisez l’URL de connectivité privée comme URL d’invocation dans la fonction externe.

  5. Dans Snowflake, appelez la fonction externe pour permettre à Snowflake de se connecter au service externe à l’aide d’une connectivité privée.

Configuration

Effectuez ces étapes dans le portail Azure :

  1. Si vous avez déjà un modèle ARM configuré et que vous souhaitez réutiliser le service distant et le service proxy, passez aux étapes de connectivité privée. Sinon, procédez comme suit :

  2. Complétez les prérequis des fonctions externes sur Microsoft Azure.

  3. Dans le portail Azure, créez une application.

  4. Créez le service distant de la façon suivante :

    1. Dans le portail Azure, recherchez Deploy a custom template.

    2. Dans l’onglet Select a template, sélectionnez Build your own template.

    3. Sélectionnez Load file.

    4. Naviguez vers le répertoire de la machine où vous avez téléchargé le modèle, puis sélectionnez ce modèle.

    5. Sélectionnez Save. Cela vous amène à l’écran Custom deployment .

  5. Continuez avec ces étapes :

    1. Créer la fonction Azure et le service API Management.

    2. Obtenir les URLs requises pour l’intégration API et la fonction externe.

Suivez ces étapes pour configurer la connectivité privée :

  1. Dans Snowflake, exécutez la commande CREATE API INTEGRATION pour créer une intégration API afin de prendre en charge la connectivité privée au service externe. Mettez à jour les valeurs des propriétés pour les aligner sur votre abonnement 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. Dans Snowflake, appelez la fonction système SYSTEM$PROVISION_PRIVATELINK_ENDPOINT pour créer le point de terminaison privé. Mettez à jour les valeurs des arguments pour les aligner sur votre abonnement 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. Dans le portail Azure et en tant que propriétaire de la ressource Azure API Management, approuvez le point de terminaison privé. Pour plus de détails, consultez le processus d’approbation.

  4. Liez l’intégration API pour Azure au service proxy pour permettre à Snowflake d’envoyer les demandes de l’API au service Azure API Management.

  5. Vous pouvez choisir de bloquer l’accès public à la ressource Azure API Management. Pour plus d’informations, voir Accès sécurisé à la ressource Azure API Management (dans cette rubrique).

  6. Dans Snowflake, si vous disposez déjà d’une base de données et d’un schéma pour stocker la fonction externe et que vous souhaitez utiliser ces objets, assurez-vous que ces objets sont utilisé ou sélectionnez-les dans Snowsight. Sinon, créez une base de données et un schéma pour stocker la fonction externe à utiliser avec une connectivité privée à un service externe :

    CREATE DATABASE private_external_service_db;
    CREATE SCHEMA private_ext_functions;
    
    Copy
  7. Dans Snowflake, exécutez la commande CREATE EXTERNAL FUNCTION pour créer la fonction externe à utiliser avec une connectivité privée au service externe. Assurez-vous de mettre à jour l’URL d’invocation avec l’URL du service externe connectivité privée :

    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

    Le format de l’URL dépend du fait que vous créez une fonction externe à l’aide du portail Azure ou du modèle ARM Azure. Pour plus de détails, voir format de l’URL d’invocation.

  8. Dans Snowflake, appelez la fonction externe pour tester la connectivité privée au service externe :

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

Si la sortie de la fonction renvoie le résultat qui correspond à la configuration du service distant au début de la procédure, vous avez confirmé que la connectivité privée au service externe fonctionne comme prévu.

Accès sécurisé à la ressource Azure API Management

Vous pouvez sécuriser l’accès à la ressource Azure API Management associée au point de terminaison privé pour une utilisation avec des fonctions externes. Pour la ressource Azure API Management, Snowflake est une connexion entrante. En sécurisant l’accès, vous réduisez la probabilité d’attaques qui pourraient compromettre votre utilisation de fonctions externes.

Par exemple, vous souhaiterez peut-être exécuter cette commande CLI apim Azure pour bloquer l’accès public :

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

Mettez à jour les valeurs de l’espace réservé avec les valeurs qui correspondent au nom de la ressource Azure API Management et le nom du groupe de ressources.

Pour plus de détails et d’options, consultez ces rubriques :