Dans les articles (les rôles, le masquage, le filtrage par ligne, le DAC+RBAC) on a vu comment contrôler ce qu'un utilisateur peut faire une fois connecté. Sauf que tout ça part du principe que la personne est déjà connectée.

La question d'avant, est-ce qu'on accepte que n'importe qui puisse se connecter depuis n'importe où dans le monde ? La réponse est non. Et c'est exactement ce que les Network Policies règlent.

C'est quoi concrètement les Network Policies ?

Les Network Policies, c'est le premier barrage. Avant même de parler de password ou de MFA, tu peux dire à Snowflake de n'accepter que les connexions depuis certaines adresses IP.

C'est une white liste (allowed) ou une black liste (blocked) ou les deux à la fois.

Créer une Network Policy

USE ROLE SECURITYADMIN;

CREATE OR REPLACE NETWORK POLICY policy_bureau
  ALLOWED_IP_LIST = ('203.0.113.0/24', '198.51.100.50')
  BLOCKED_IP_LIST = ('203.0.113.99')
  COMMENT = 'Accès restreint aux IPs du bureau et VPN';

Dans cet exemple :

  • Toutes les IPs du range 203.0.113.0/24 sont autorisées
  • L'IP 198.51.100.50 est aussi autorisée (un VPN par exemple)
  • L'IP 203.0.113.99 est explicitement bloquée, même si elle fait partie du range autorisé
💡
La règle est simple et c'est que si ALLOWED_IP_LIST est défini, seules ces IPs peuvent se connecter et si en plus BLOCKED_IP_LIST est défini, ces IPs sont exclues même si elles sont dans la white liste. La black liste est toujours prioritaire par rapport à la white liste.

Appliquer la policy au niveau du compte

C'est la méthode globale au niveau du compte

ALTER ACCOUNT SET NETWORK_POLICY = 'policy_bureau';

Appliquer la policy à un utilisateur spécifique

Pour un user externe, un compte de service, ou un cas particulier :

-- Créer une policy spécifique pour les consultants Qlik
CREATE OR REPLACE NETWORK POLICY policy_consultant_qlik
  ALLOWED_IP_LIST = ('185.12.45.0/24')
  COMMENT = 'Accès limité au réseau aux consultants externes Qlik';

-- Appliquer à un user
ALTER USER Demo_USER SET NETWORK_POLICY = 'policy_consultant_qlik';

La priorité est user > account

Point important à savoir c'est que si une policy est définie au niveau du compte et au niveau d'un utilisateur, c'est la policy de l'utilisateur qui prend le dessus.

Par exemple la policy compte autorise le range 203.0.113.0/24. Mais l'utilisateur Demo_USER a une policy qui n'autorise que 185.12.45.0/24. Si le consultant se connecte depuis 203.0.113.10, il sera bloqué car sa policy utilisateur ne l'autorise pas, même si la policy compte le permet.

Vérifier les policies actives

-- Lister toutes les network policies du compte
SHOW NETWORK POLICIES;

-- Voir la policy appliquée au compte
SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN ACCOUNT;

-- Voir la policy appliquée à un utilisateur
SHOW PARAMETERS LIKE 'NETWORK_POLICY' IN USER Demo_USER;

Supprimer une policy

-- Retirer la policy du compte
ALTER ACCOUNT UNSET NETWORK_POLICY;

-- Retirer la policy d'un utilisateur
ALTER USER Demo_USER UNSET NETWORK_POLICY;

-- Supprimer la policy elle-même
DROP NETWORK POLICY policy_consultant_qlik;

Le piège classique

⚠️
Tu configures une network policy au niveau du compte, tu oublies d'inclure ta propre IP, et personne ne peut plus se connecter. Snowflake ne vérifie pas si ton IP est dans la liste avant d'appliquer la policy.

C'est important de :

  1. Toujours vérifier ton IP actuelle avant d'appliquer
  2. Tester d'abord la policy sur un seul utilisateur (pas sur tout le compte)
  3. Garder un utilisateur ACCOUNTADMIN avec une IP de secours en cas ou

Si tu te retrouves quand même bloqué, il faudra contacter le support Snowflake.

Exemple complet

USE ROLE SECURITYADMIN;

-- 1) Policy globale : bureau + VPN
CREATE OR REPLACE NETWORK POLICY policy_prod
  ALLOWED_IP_LIST = (
    '203.0.113.0/24',   -- Bureau Paris
    '198.51.100.0/24',  -- Bureau Lyon
    '10.0.1.0/24'       -- VPN 
  )
  COMMENT = 'Policy de production - bureau + VPN uniquement';

-- 2) Policy spécifique pour le serveur Qlik Onprem (IP fixe du serveur)
CREATE OR REPLACE NETWORK POLICY policy_qlik
  ALLOWED_IP_LIST = ('34.78.120.55')
  COMMENT = 'Accès Qlik Sense - IP serveur 34.78.120.55';

-- 3) Appliquer la policy globale au compte
ALTER ACCOUNT SET NETWORK_POLICY = 'policy_prod';

-- 4) Appliquer la policy Qlik Sense au user de service
ALTER USER QLIK_SVC SET NETWORK_POLICY = 'policy_qlik';

Tout le monde passe par le bureau ou le VPN. Qlik service peut se connecter que depuis son IP fixe.

Network Policy + Network Rules (pour aller plus loin)

Depuis les versions récentes de Snowflake, tu peux aussi utiliser les Network Rules pour définir des règles plus avancées. Au lieu de mettre les IPs directement dans la policy, tu crées des objets NETWORK RULE réutilisables :

-- Créer une règle réseau
CREATE OR REPLACE NETWORK RULE rule_bureau
  MODE = INGRESS
  TYPE = IPV4
  VALUE_LIST = ('203.0.113.0/24', '198.51.100.0/24');

CREATE OR REPLACE NETWORK RULE rule_vpn
  MODE = INGRESS
  TYPE = IPV4
  VALUE_LIST = ('10.0.1.0/24');

-- Créer la policy en pointant sur les règles
CREATE OR REPLACE NETWORK POLICY policy_prod_v2
  ALLOWED_NETWORK_RULE_LIST = ('rule_bureau', 'rule_vpn')
  COMMENT = 'Policy prod v2 avec network rules';

L'avantage c'est que tu peux réutiliser les mêmes règles dans plusieurs policies, et donc sans modifier et sans toucher à la policy elle-même.

Aller plus loin : Formation Snowflake

J'ai regroupé tous mes articles Snowflake dans un parcours complet.

👉 Formation Snowflake : tous les modules pas à pas

Vous voulez que je vous accompagne sur votre projet data (Snowflake, ingestion, modélisation, performance, coûts, gouvernance) ?

👉 Réserver un appel de 30 minutes