Points de terminaison privés Azure pour les volumes de stockage gérés par Snowflake

Cette rubrique fournit des concepts ainsi que des instructions détaillées pour se connecter aux volumes de stockage gérés par Snowflake par le biais de points de terminaison privés Microsoft Azure. Les volumes de stockage gérés par Snowflake sont les emplacements de stockage pour les tables Apache Iceberg qui utilisent Snowflake comme catalogue.

Vue d’ensemble

Lorsque vous utilisez un moteur de requête externe tel que Apache Spark ou Databricks pour lire ou écrire dans une table Iceberg qui utilise le stockage géré par Snowflake, le moteur de requête communique directement avec le volume Iceberg natif hébergé sur le stockage Azure. Par défaut, ce trafic peut passer par l’Internet public.

Les points de terminaison privés Azure et Azure Private Link peuvent être combinés pour fournir une connectivité sécurisée aux volumes de stockage gérés par Snowflake. Cette configuration garantit que les opérations de lecture et d’écriture de votre moteur de requête externe vers le volume Iceberg natif utilisent le réseau interne Azure au lieu de l’internet public.

Avantages

L’implémentation de points de terminaison privés pour accéder aux volumes de stockage gérés par Snowflake apporte les avantages suivants :

  • Les données ne passent pas par l’Internet public lorsque des moteurs de requête externes lisent ou écrivent dans le volume Iceberg natif.

  • Les administrateurs peuvent assurer une sécurité et une surveillance cohérentes concernant la connexion des moteurs de requêtes aux comptes de stockage.

  • Les administrateurs n’ont pas besoin de modifier les paramètres de pare-feu pour accéder aux données des volumes de stockage.

Limitations

Microsoft Azure définit la manière dont un point de terminaison privé peut interagir avec Snowflake :

Configuration de points de terminaison privés pour accéder aux volumes de stockage gérés par Snowflake

Pour configurer des points de terminaison privés pour accéder aux volumes de stockage gérés par Snowflake, vous devez être assisté par les trois rôles suivants dans votre organisation :

  1. L’administrateur du compte Snowflake (c’est-à-dire un utilisateur disposant du rôle système ACCOUNTADMINdans Snowflake).

  2. L’administrateur Microsoft Azure.

  3. L’administrateur réseau.

Selon l’organisation, il peut être nécessaire de coordonner les efforts de configuration avec plus d’une personne ou équipe pour implémenter les étapes de configuration suivantes.

Exécutez les étapes suivantes pour configurer et implémenter l’accès sécurisé aux volumes de stockage gérés par Snowflake par le biais de points de terminaison privés Azure :

  1. Vérifiez que votre abonnement Azure est inscrit auprès du gestionnaire de ressources Azure Storage. Cette étape vous permet de vous connecter au volume de stockage géré à partir d’un point de terminaison privé.

  2. En tant qu’administrateur de compte Snowflake, exécutez les commandes suivantes dans votre compte Snowflake. Enregistrez l’ID de ressource du compte de stockage de votre volume de stockage géré par Snowflake non Fail-safe et Fail-safe, respectivement, défini par les clés privatelink-snowflake-managed-storage-volume-nfs et privatelink-snowflake-managed-storage-volume-fs. Pour plus d’informations, voir ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK et SYSTEM$GET_PRIVATELINK_CONFIG.

    USE ROLE ACCOUNTADMIN;
    ALTER ACCOUNT SET ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK = true;
    SELECT KEY, VALUE FROM TABLE(FLATTEN(input=>PARSE_JSON(SYSTEM$GET_PRIVATELINK_CONFIG())));
    
  3. En tant qu’administrateur Azure, créez un point de terminaison privé par le biais du portail Azure à chacun de vos volumes de stockage gérés par Snowflake.

    Visualisez les propriétés du point de terminaison privé et enregistrez la valeur ID de la ressource. Vous fournirez cette valeur comme argument de la fonction privateEndpointResourceID à l’étape suivante.

    Pour plus d’informations, voir la documentation Microsoft Azure Private Link.

    Important

    Avant de passer à l’étape suivante pour autoriser le point de terminaison privé, vous devez être conscient du comportement du DNS Microsoft Azure lorsqu’un point de terminaison privé est autorisé sur un emplacement de stockage pour la toute première fois.

    Lorsque le premier point de terminaison privé est connecté et autorisé, Azure crée automatiquement un enregistrement CNAME dans son DNS public.

    Dans des circonstances normales, la mise à jour du DNS ne doit pas affecter la connectivité publique existante au compte de stockage. Toutefois, si votre environnement dispose déjà de zones DNS privées configurées, cette mise à jour du DNS peut produire un comportement indésirable.

    Pour éviter ce problème, Microsoft recommande d’activer l’option Fallback to Internet dans la configuration de la zone DNS privée avant d’autoriser le premier point de terminaison privé.

  4. En tant qu’administrateur de Snowflake, appelez la fonction SYSTEM$AUTHORIZE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS en utilisant la valeur privateEndpointResourceID comme argument de fonction. Cette étape autorise l’accès au volume de stockage géré par Snowflake par le biais du point de terminaison privé.

    USE ROLE ACCOUNTADMIN;
    SELECT SYSTEM$AUTHORIZE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS('<privateEndpointResourceID>');
    

    Si nécessaire, procédez comme suit pour retirer l’accès au volume de stockage géré par Snowflake.

  5. Faites appel à votre administrateur réseau pour la mise à jour des paramètres DNS dans une zone DNS privée. Les paramètres doivent résoudre l’URL privatelink vers les adresses IP du point de terminaison privé Azure qui se connecte au compte de stockage de votre volume de stockage géré par Snowflake.

    Pour plus d’informations, consultez Configuration du DNS du point de terminaison privé Azure.

    Astuce

    • Utilisez un compte séparé Snowflake pour les tests et configurez une zone DNS privée dans un VNet de test pour tester la fonctionnalité afin que le test soit isolé et de ne pas perturber les autres charges de travail.

    • Si vous ne pouvez pas utiliser de compte Snowflake séparé, utilisez un utilisateur test pour accéder à Snowflake à partir d’un VNet où les modifications DNS sont effectuées.

    • Pour effectuer des tests à partir d’applications sur site, utilisez le transfert de DNS pour rediriger les requêtes vers le DNS privé Azure dans le VNet où les réglages du DNS sont effectués.

Blocage de l’accès public

Après avoir configuré des points de terminaison privés pour accéder au volume de stockage géré à l’aide d’Azure Private Link, vous pouvez éventuellement bloquer les requêtes provenant d’adresses IP publiques vers le volume de stockage géré. Une fois l’accès public bloqué, tout le trafic doit passer par le point de terminaison privé.

Important

Vérifiez que le trafic via la connexion privée atteint bien le volume de stockage géré avant de bloquer l’accès public. Le blocage de l’accès public sans configuration de la connectivité privée peut entraîner des interruptions involontaires.

Pour bloquer tout le trafic provenant d’adresses IP vers le volume de stockage géré, appelez la fonction suivante :

SELECT SYSTEM$BLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS();

L’exécution de la fonction peut prendre quelques minutes.

Blocage de l’accès public avec une liste d’autorisation d’adresses IP

La fonction SYSTEM$BLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_WITH_EXCEPTION vous permet de bloquer l’accès public tout en maintenant une liste autorisée d’adresses IP ou de blocs CIDR autorisés à atteindre le volume de stockage géré.

Pour bloquer l’accès public tout en autorisant des adresses IP spécifiques ou des blocs CIDR :

USE ROLE ACCOUNTADMIN;

SELECT SYSTEM$BLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_WITH_EXCEPTION('1.2.3.4/24, 100.0.0.1');

Garantir le blocage de l’accès public

Pour déterminer si les adresses IP publiques peuvent accéder à un volume de stockage géré par Snowflake, appelez la fonction SYSTEM$SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_STATUS.

SELECT SYSTEM$SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS_STATUS();

Déblocage de l’accès public

Pour autoriser l’accès public à un volume de stockage géré par Snowflake qui était auparavant bloqué, appelez la fonction SYSTEM$UNBLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS.

SELECT SYSTEM$UNBLOCK_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PUBLIC_ACCESS();

Révocation de points de terminaison privés pour accéder à des volumes de stockage gérés par Snowflake

Pour révoquer l’accès à des volumes de stockage gérés par Snowflake par le biais de points de terminaison privés Microsoft Azure, suivez les étapes suivantes :

  1. En tant qu’administrateur Snowflake, confirmez que le paramètre:ref:label-enable_snowflake_managed_storage_volume_privatelink est défini sur TRUE Par exemple :

    USE ROLE ACCOUNTADMIN;
    SHOW PARAMETERS LIKE 'ENABLE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK' IN ACCOUNT;
    
  2. En tant qu’administrateur Snowflake, appelez la fonction SYSTEM$REVOKE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS pour révoquer l’accès au point de terminaison privé et utilisez la même valeur privateEndpointResourceID que celle qui a été utilisée pour autoriser initialement l’accès.

    USE ROLE ACCOUNTADMIN;
    SELECT SYSTEM$REVOKE_SNOWFLAKE_MANAGED_STORAGE_VOLUME_PRIVATELINK_ACCESS('<privateEndpointResourceID>');
    
  3. En tant qu’administrateur Azure, supprimez le point de terminaison privé via le portail Azure.

  4. En tant qu’administrateur réseau, supprimez les enregistrements et alias DNS qui ont été utilisés pour résoudre les URLs des comptes de stockage.