Comment se gèrent les rôles dans Snowflake ?

🎯
Objectif de cet article
Comprendre comment les rôles se gèrent dans Snowflake de manière générale.

Contexte

La gestion des accès peut sembler complexe pour ceux qui ne sont pas habitués, ce qui peut constituer une barrière significative à l'entrée mais cette notion revêt une importance cruciale en termes de sécurité.
Si vous vous êtes déjà demandé :
  • "Je ne comprends pas, je ne vois pas mes tables pourtant j’ai le bon rôle !?"
  • "Ma procédure stockée s’exécute mais j’ai l’impression qu’elle ne prend pas en compte ma nouvelle table ?!"
  • ou encore si vous avez déjà été confronté au redoutable "Error: insufficient privileges"
🎉 Alors vous êtes au bon endroit ! 🎉
Snowflake, un outil de plus en plus répandu sur le marché, est de plus en plus adopté par les entreprises. Que vous soyez un nouvel utilisateur cherchant à configurer votre compte ou un administrateur système cherchant à optimiser les paramètres d'accès, maîtriser ce concept de gestion des accès est indispensable pour tirer pleinement parti des fonctionnalités de Snowflake.

La gestion des accès dans Snowflake

Il existe 2 types d’accès dans Snowflake :

Discretionary Access Control (DAC)

Cela veut tout simplement dire que chaque objet possède un propriétaire (owner) et que seul son propriétaire peut accéder à son objet ou bien donner l’accès à celui-ci : on dit qu’il a l’ownership.

Role-Based Access Control (RBAC)

Les privilèges d'accès sont attribués à des rôles, qui sont à leur tour attribués à des utilisateurs. C’est dans cette logique que la gestion des rôles dans Snowflake est effectuée : un utilisateur peut disposer de plusieurs rôles et donc peut accéder à différents objets en fonction de son rôle.
🤔
Ok… mais qu’est-ce que ça signifie ?
Cela signifie tout simplement que, si vous souhaitez accéder à un objet Snowflake (une table, un schéma, une base de données…), il faut :
  • Soit être OWNER (propriétaire) de cet objet.
  • Soit que vous disposiez d’un rôle disposant des bons privilèges.

La gestion des rôles dans Snowflake

Concept 1 : Users

C’est grâce à ce user que vous vous authentifierez auprès de votre compte Snowflake et que vous accéderez donc aux différentes bases de données qui vous seront mises à disposition.

Concept 2 : Roles

Il s’agit d’une entité à qui on peut attribuer des privilèges. Un rôle peut être attribué à 1 ou plusieurs users ou bien peut être attribué à 1 ou plusieurs autres rôles par héritage.

Concept 3 : Privileges

En cybersécurité, on parle du principe du moindre privilège (LEAST PRIVILEGE). Cela signifie, qu’on limite les droits d’accès en fonction des tâches qui doivent être réalisées et un privilège Snowflake permet d’effectuer une action sur ses objets.
Liste des privilèges Snowflake :
Access control privileges | Snowflake Documentation
This topic describes the privileges that are available in the Snowflake access control model. Privileges are granted to roles, and roles are granted to users, to specify the operations that the users can perform on objects in the system.

Relations entre les concepts

Snowflake repose sur la gestion des rôles afin d’accorder les droits d’accès aux utilisateurs.
Ces rôles contiennent un ensemble de privilèges permettant non seulement d’effectuer des actions sur un ensemble d’objets mais aussi d’assurer une certaine sécurité en octroyant uniquement ce dont l’utilisateur a besoin (LEAST PRIVILEGES).
Image without caption
Dans l’exemple ci-dessus, nous avons 3 rôles : ROLE_3, ROLE_2, ROLE_1.
Dans Snowflake et ceux grâce à la notion d’héritage des rôles, on peut voir que :
  • Le ROLE_2 dispose du privilège C car il a hérité du ROLE_3.
  • Le ROLE_1 dispose des privilèges B et C car il a hérité du ROLE_2.
  • Le USER 1 dispose de l’ensemble des privilèges A, B et C car il dispose du ROLE_1.

Les rôles pré-définis par Snowflake

Snowflake propose 6 rôles prédéfinis et chaque rôle a des spécificités qui lui sont propres :

ORGADMIN

Ce rôle est chargé de superviser et de faciliter les opérations générales au sein de l'organisation, et il offre quelques fonctionnalités utiles pour le faire :
  • Création de nouveaux comptes au sein de l'organisation
  • Gérer tous les comptes existants dans l'organisation
  • Voir les différentes régions où les ressources de Snowflake sont déployées.
  • Suivre l'utilisation des ressources dans toute l'organisation
En résumé, le rôle de gestion des opérations au niveau de l'organisation est crucial pour maintenir Snowflake en bon état de fonctionnement au sein de votre organisation. En permettant de créer des comptes, de voir les comptes et les régions, ainsi que de suivre l'utilisation, ce rôle simplifie la gestion de Snowflake pour vous et votre équipe.

ACCOUNTADMIN

Ce rôle combine les rôles prédéfinis SYSADMIN et SECURITYADMIN. Il s’agit du plus haut rôle dans la hiérarchie Snowflake, il est important de limiter son attribution à un petit groupe d'utilisateurs pour maintenir un contrôle strict sur les autorisations et la sécurité du système.

SECURITYADMIN

Ce rôle permet de gérer les privilèges au niveau des utilisateurs et rôles. Il détient le privilège de sécurité MANAGE GRANTS pour pouvoir accorder (GRANT) ou retirer (REVOKE) certains privilèges à des rôles.
sql
-- Exemple USE SECURITYADMIN; -- Pour donner les droits de lecture à une table, il faut d'abord : -- 1) Donner le privilège d'utiliser la base de données où est contenue la table GRANT USAGE ON DATABASE <database_name> TO ROLE role_A; -- 2) Donner le privilège d'utiliser le schema où est contenue la table GRANT USAGE ON SCHEMA <database_name>.<schema_name> TO ROLE role_A; -- 3) Donner le privilège de sélection sur la table GRANT SELECT ON TABLE <database_name>.<schema_name>.<table_name> TO ROLE role_A; -- 4) Donner le rôle à l'utilisateur GRANT ROLE role_A TO USER <snowflake_username>;

USERADMIN

Ce rôle détient le privilège de sécurité "CREATE USER" et "CREATE ROLE" qui permet de gérer la création des utilisateurs et les rôles seulement.
sql
-- Exemple USE USERADMIN; -- Création d'un rôle Snowflake CREATE OR REPLACE ROLE role_A;

SYSADMIN

Ce rôle détient les privilèges de créer des objets Snowflake (Warehouse, database, schema, table…) au sein du compte Snowflake. Il s’agit d’un rôle orienté système afin de gérer les comptes, les utilisateurs etc… pour le bon déroulement de la plateforme.
sql
-- Exemple USE SYSADMIN; -- Création d'un warehouse CREATE WAREHOUSE <warehouse_name> WITH WAREHOUSE_SIZE = 'SMALL'; -- Historique d'utilisation du warehouse SELECT * FROM TABLE(INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY(WAREHOUSE_NAME => '<warehouse_name>'));

PUBLIC

Il s’agit d’un rôle par défaut où chaque utilisateur peut utiliser. Il peut posséder des objets et comme son nom l’indique, il s’agit d’un rôle où tous les utilisateurs sont considérés comme égaux en ce qui concerne leurs droits d’accès. Ce rôle est très peu, voir quasiment, jamais utilisé.
🤔
Ok je pense avoir compris mais pourquoi j’utiliserais ces rôles ?
On peut facilement se perdre dans la gestion des accès dans Snowflake si on est pas familier avec l’outil, c’est pour cela que Snowflake a mis en place ces rôles pré-définis en y intégrant la notion d’héritage.
Voici comment est géré l’héritage des rôles par défaut de Snowflake :
Image without caption
Par conséquent, il est important de respecter l’utilisation de ces rôles par défaut, définis par l’outil, selon vos besoins pour éviter les effets de bord.
Documentation officielle :
Overview of Access Control | Snowflake Documentation
This topic provides information on the main access control topics in Snowflake.

Conclusion

Cet article a été rédigé de manière simple et accessible afin de permettre à tous les lecteurs de s'y retrouver aisément. Bien que Snowflake dispose de nombreux autres concepts et fonctionnalités, notre attention s'est concentrée ici spécifiquement sur la gestion des accès.
Si vous avez des besoins spécifiques concernant Snowflake ou si vous souhaitez explorer d'autres aspects de cette plateforme puissante, n'hésitez pas à nous contacter 😃 
Notre équipe est là pour vous aider à tirer le meilleur parti de Snowflake et à répondre à vos besoins de manière efficace et personnalisée.

Powered by Notaku