Lisez notre article sur

class="lazyload

.

Comment nous avons automatisé la gestion d'un compte de plus de 50 utilisateurs tout en respectant les normes de gouvernance de data .

De plus en plus d'entreprises placent Snowflake au cœur de leurs plateformes data . Même s'il s'agit d'une solution gérée, vous devez toujours administrer l'environnement. Cela peut être un défi, surtout pour les grandes entreprises.

L'un des défis est le contrôle d'accès. Il s'agit d'un élément essentiel de tout programme de gouvernance data . Snowflake fournit des fonctionnalités prêtes à l'emploi pour aider à relever ce défi. Mais lorsque vous avez des dizaines d'utilisateurs et des téraoctets de data, les fonctions intégrées ne suffisent pas. Vous devez réfléchir à une stratégie pour gérer votre compte.

Nous sommes passés par là. Pour l'un de nos clients, nous avons géré un compte comptant plus de 50 utilisateurs actifs. Nous avons conçu une solution permettant d'échelonner la gestion du contrôle d'accès.

Cet article décrit les principaux enseignements tirés de l'année écoulée.

Initial situation

Avant que nous ne rejoignions l'entreprise, le compte avait été configuré et de nombreuses bonnes idées avaient été mises en œuvre. Des rôles personnalisés avaient été créés. Les utilisateurs étaient gérés avec soin. Mais il y avait quelques limitations :

  • L'administration se faisait manuellement, ce qui prenait beaucoup de temps aux responsables.
  • Data Les analystes et les développeurs utilisaient leurs comptes pour des tâches automatisées. Cela posait un problème car les employés devaient partager leurs mots de passe. Outre l'important problème de sécurité, il y avait des bogues dus à la révocation des identifiants lorsque les employés quittaient l'entreprise.
  • Il n' y avait pas de documentation sur les rôles en place, ce qui rendait difficile l'audit des autorisations actuelles et leur révision régulière.

  • Les utilisateurs étaient gérés exclusivement à partir de Snowflake. Lorsque des employés quittaient l'entreprise, les administrateurs de l'environnement Snowflake devaient en être conscients. L'équipe en charge de la gestion des utilisateurs (Active Directory) n'était pas la même que celle en charge du compte Snowflake. Il y avait donc un risque que d'anciens employés puissent accéder au site data de l'entreprise après leur départ.

Nous avons créé un nouveau système pour gérer le contrôle d'accès et lutter contre ces lacunes.

Access control framework design

Tout d'abord, nous avons révoqué tous les rôles attribués par défaut (SYSADMIN, USERADMIN ...) aux utilisateurs ... Seules quelques personnes ont pu assumer ces rôles. Il s'agissait des personnes chargées de l'administration.

Deuxièmement, nous avons créé un cadre de contrôle d'accès basé sur des rôles personnalisés. Nous avons défini deux types de rôles personnalisés :

  • Les rôles d'accès couvrent un ensemble de privilèges de bas niveau sur les objets Snowflake. Par exemple, un rôle d'accès peut englober des privilèges de lecture seule sur une base de données particulière. Ils ne sont pas accordés directement aux utilisateurs.

  • Les rôles fonctionnels sont les rôles accordés aux utilisateurs. Ils englobent un ensemble de rôles d'accès. Ils sont créés pour une équipe spécifique.

Nous avons choisi de définir les rôles d'accès au niveau de la base de données. Cela permet de répliquer facilement les privilèges d'un environnement à l'autre en utilisant le clonage sans copie. Il s'agissait également d'un compromis entre la flexibilité que nous accordons aux utilisateurs finaux et l'application stricte du principe du moindre privilège.

Au niveau de la base de données, nous avons défini 3 niveaux de rôles d'accès :

  • Lecture seule

  • Lire et écrire

  • Administrateur

Nous avons appliqué une stratégie similaire à l'accès aux entrepôts avec deux types de rôles :

  • Utilisateur

  • Administrateur

Vous trouverez ci-dessous une illustration de notre cadre. Les flèches représentent les subventions.

Vous trouverez ci-dessous une illustration de notre cadre. Les flèches représentent les subventions. Flocons de neige

À ce stade, nous avions une meilleure idée de la manière dont nous allions gérer les autorisations, mais nous avions également des problèmes avec la gestion des utilisateurs.

User management

Nous avons mis en place l'authentification unique pour permettre aux utilisateurs de Snowflake de se connecter via Azure Active Directory (AAD). Ainsi, nous avons supprimé la complexité liée à la gestion de deux bases de données d'utilisateurs et le processus de désinscription a été plus robuste. En effet, il nous suffisait de désactiver l'utilisateur dans AAD et la suppression était automatiquement répliquée sur Snowflake.

Comme il existe une correspondance entre les groupes AD et les rôles dans Snowflake, nous avons pu attribuer un rôle à chaque utilisateur que nous avons créé. Nous suivons le même processus pour chaque nouvel utilisateur.

  • Ils envoient une demande via notre système de billetterie dans laquelle ils expliquent l'équipe à laquelle ils appartiennent et leurs besoins en termes d'accès.
  • Nous ajoutons l'utilisateur au(x) groupe(s) AD correspondant(s).

  • La synchronisation se fait en arrière-plan

  • L'utilisateur peut accéder à Snowflake et utiliser le rôle qui lui a été attribué.

Il s'agit du processus pour les utilisateurs humains réels, mais il ne répond pas à l'une des limitations mentionnées au début de cet article : l'utilisation d'informations d'identification personnelles pour des tâches automatisées.

C'est pourquoi nous avons introduit les comptes de service. La gestion des comptes de service est très similaire à ce que nous venons de décrire. La seule différence est que nous créons un rôle fonctionnel pour chaque compte de service. Il existe une relation univoque entre les comptes de service et leurs rôles. Ainsi, nous limitons strictement l'étendue des permissions pour chaque compte de service.

Ces étapes ont constitué de grandes améliorations. Tout était documenté. Les équipes ont rapidement adopté le nouveau cadre. Nous étions heureux.

Mais nous passions encore beaucoup de temps à accorder des accès manuellement, et comme c'était très manuel, c'était aussi une source d'erreurs. La nécessité d'un outil permettant d'automatiser ces tâches était évidente.

Automation to the rescue

Plusieurs options s'offraient à nous :

  • Utiliser le fournisseur Snowflake Terraform pour gérer l'environnement
  • Rédiger des scripts bash pour automatiser la création d'utilisateurs et l'octroi de permissions.
  • Écrire notre propre CLI dans un langage comme Python ou Go

Nous avons finalement créé un CLI en Python.

Nous préférons utiliser Terraform pour déployer l'infrastructure et uniquement l'infrastructure. Des comportements indésirables peuvent se produire lorsque vous commencez à gérer vos utilisateurs et vos permissions avec Terraform. Par exemple, la rotation des secrets est très difficile à gérer.

Nous aimons bien bash mais seulement pour des opérations simples et ad-hoc. Ici, nous avons besoin de charger des fichiers de configuration, d'interagir avec l'API Snowflake et de manipuler les structures data . C'est possible, mais ce serait difficile à maintenir à long terme.

En plus de cet aspect, nous avions besoin de fiabilité. Une façon d'y parvenir est d'écrire des tests. Cela est plus facile à faire dans les langages de programmation tels que Python.

Lorsque vous exécutez l'outil, voici ce qui se passe en coulisses.

class="lazyload

Par conception, l'outil ne crée pas un rôle qui existe déjà. Il en va de même pour les privilèges. L'outil calcule la différence entre la configuration et l'environnement distant et applique les changements nécessaires. Cela nous permet d'éviter tout temps d'arrêt.

Dans un premier temps, nous avons exécuté cet outil localement. Mais cela pouvait poser des problèmes. Par exemple, nous pouvions avoir des conflits entre deux ingénieurs essayant d'apporter des modifications en même temps. C'est pourquoi nous avons mis en place un flux de travail basé sur les capacités CI/CD d'Azure DevOps (ADO).

Note : nous avons utilisé ADO mais vous pouvez faire la même chose avec GitHub, GitLab ou Bitbucket.

Voici le processus final.

Voici le processus final des flocons de neige

Ce flux de travail entièrement automatisé fonctionne très bien. Les tests détectent les défauts dès le début du pipeline CI. Et la révision obligatoire est également un moyen de prévenir les incidents.

En outre, les demandes d'extraction servent en quelque sorte de documentation pour toutes les demandes.

Conclusion

Cela fait un peu moins d'un an que nous avons commencé à utiliser cette solution. Bien que la mise en œuvre ait nécessité un investissement initial en temps, cela en valait vraiment la peine.

Nous passons désormais plus de temps à discuter avec les utilisateurs de leurs demandes qu'à les mettre en œuvre. La plupart des demandes peuvent être résolues en une dizaine de lignes de YAML. C'est très efficace et cela s'adapte bien. Nous continuons à accueillir de nouveaux utilisateurs et nous pouvons faire face à la demande. Nous avons également résolu les problèmes initiaux. C'est donc un succès !

Merci à Samy Dougui qui a relu cet article et a travaillé avec moi sur la conception de cette solution.

class="lazyload

Moyen Blog par Artefact.

Cet article a été initialement publié sur Medium.com.
Suivez-nous sur notre Medium Blog !