Lesen Sie unseren Artikel über

.

Wie wir die Verwaltung eines Kontos mit mehr als 50 Benutzern unter Einhaltung der data governance-Standards automatisiert haben

Immer mehr Unternehmen stellen Snowflake in den Mittelpunkt ihres data platforms. Auch wenn es sich um eine verwaltete Lösung handelt, müssen Sie die Umgebung dennoch verwalten. Das kann eine Herausforderung sein, besonders für große Unternehmen.

Eine der Herausforderungen ist Zugangskontrolle. Es ist ein wichtiger Bestandteil eines jeden data governance-Programms. Snowflake bietet sofort einsatzbereite Funktionen um diese Herausforderung zu meistern. Aber wenn Sie Dutzende von Benutzern und Terabytes von data haben, reichen die integrierten Funktionen nicht aus. Sie müssen sich eine Strategie für die Verwaltung Ihres Kontos überlegen.

Das haben wir schon erlebt. Für einen der unsere Kunden, verwalteten wir ein Konto mit mehr als 50 aktiven Benutzern. Wir haben eine Lösung zur Skalierung der Zugriffskontrolle entwickelt.

In diesem Artikel werden die wichtigsten Erkenntnisse des vergangenen Jahres beschrieben.

Ausgangssituation

Bevor wir zu dem Unternehmen kamen, war das Konto eingerichtet und viele gute Ideen waren umgesetzt worden. Benutzerdefinierte Rollen erstellt worden war. Die Benutzer wurden sorgfältig verwaltet. Aber es gab ein paar Einschränkungen:

  • Die Verwaltung wurde durchgeführt manuell was die Verantwortlichen sehr viel Zeit gekostet hat.
  • Data-Analysten und Entwickler nutzten ihre Konten für automatisierte Aufgaben. Das war ein Problem, weil die Mitarbeiter ihre Passwörter weitergeben mussten. Neben dem erheblichen Sicherheitsproblem kam es zu Fehlern, weil Mitarbeiter, die das Unternehmen verließen, ihre Anmeldedaten widerrufen hatten.
  • Es gab keine Dokumentation der vorhandenen Rollen, was es schwierig macht, die aktuellen Berechtigungen zu prüfen und regelmäßig zu überprüfen.

  • Die Benutzer wurden ausschließlich von Snowflake aus verwaltet. Wenn Mitarbeiter das Unternehmen verließen, mussten sich die Administratoren der Snowflake-Umgebung dessen bewusst sein. Das Team, das für die Benutzerverwaltung (Active Directory) zuständig war, war nicht dasselbe wie das, das für das Snowflake-Konto verantwortlich war. Es bestand also das Risiko, dass ehemalige Mitarbeiter nach ihrem Ausscheiden auf das data des Unternehmens zugreifen konnten.

Wir haben ein neues System entwickelt, um die Zugangskontrolle zu verwalten und diese Mängel zu bekämpfen.

Entwurf eines Rahmens für die Zugangskontrolle

Zunächst haben wir den Benutzern alle Standardrollen (SYSADMIN, USERADMIN ...) entzogen ... Nur einige wenige Personen konnten diese Rollen übernehmen. Das waren die Personen, die für die Verwaltung zuständig waren.

Zweitens haben wir einen Rahmen für die Zugriffskontrolle auf der Grundlage von benutzerdefinierten Rollen geschaffen. Wir haben zwei Arten von benutzerdefinierten Rollen definiert:

  • Zugriffsrollen umfassen eine Reihe von Privilegien auf niedriger Ebene für Snowflake-Objekte. Eine Zugriffsrolle kann z.B. nur Leseberechtigungen für eine bestimmte database umfassen. Sie werden den Benutzern nicht direkt gewährt.

  • Funktionale Rollen sind die den Benutzern zugewiesenen Rollen. Sie umfassen eine Reihe von Zugriffsrollen. Sie werden für ein bestimmtes Team erstellt.

Wir haben uns dafür entschieden, die Zugriffsrollen auf der dataGrundstufe. Es macht es einfach, die Privilegien von einer Umgebung in eine andere zu replizieren, indem es Zero-Copy-Cloning verwendet. Es war auch ein Kompromiss zwischen der Flexibilität, die wir den Endbenutzern zugestehen, und der strikten Anwendung des Prinzips der geringsten Privilegien.

Auf der Ebene database haben wir 3 Ebenen von Zugriffsrollen definiert:

  • Schreibgeschützt

  • Lesen und Schreiben

  • Admin

Wir haben eine ähnliche Strategie für den Lagerzugang mit zwei Arten von Rollen angewandt:

  • Benutzer

  • Admin

Unten sehen Sie eine Illustration unseres Rahmens. Die Pfeile stehen für Zuschüsse.

Below is an illustration of our framework. Arrows represent grants. Snowflakes

Zu diesem Zeitpunkt hatten wir eine bessere Vorstellung davon, wie wir Berechtigungen verwalten würden, aber wir hatten auch Probleme mit der Benutzerverwaltung.

Benutzerverwaltung

Wir richten ein Einmalige Anmeldung um Snowflake-Benutzern zu ermöglichen sich über Azure Active Directory (AAD) anmelden. Auf diese Weise entfiel die Komplexität der Verwaltung von zwei data-Benutzerdatenbanken, und der Offboarding-Prozess war robuster. Tatsächlich mussten wir den Benutzer nur in AAD deaktivieren und die Löschung wurde automatisch in Snowflake repliziert.

Da es in Snowflake eine Zuordnung zwischen AD-Gruppen und Rollen gibt, konnten wir jedem Benutzer, den wir erstellen, eine Rolle zuweisen. Wir folgen demselben Prozess für jeden neuen Benutzer.

  • Sie senden eine Anfrage über unser Ticketingsystem, in der sie erklären, zu welchem Team sie gehören und was sie für den Zugang benötigen.
  • Wir fügen den Benutzer zu der/den entsprechenden AD-Gruppe(n) hinzu

  • Die Synchronisierung erfolgt im Hintergrund

  • Der Benutzer kann auf Snowflake zugreifen und die ihm zugewiesene Rolle verwenden

Es handelt sich dabei um den Prozess für echte menschliche Benutzer, der jedoch eine der eingangs erwähnten Einschränkungen nicht berücksichtigt: die Verwendung persönlicher Anmeldedaten für automatisierte Aufträge.

Aus diesem Grund haben wir Servicekonten. Die Verwaltung von Servicekonten ähnelt sehr dem, was wir gerade beschrieben haben. Der einzige Unterschied besteht darin, dass wir für jedes Servicekonto eine funktionale Rolle erstellen. Es gibt eine Eins-zu-eins-Beziehung zwischen Servicekonten und ihren Rollen. Daher schränken wir den Umfang der Berechtigungen für jedes Dienstkonto streng ein.

Diese Schritte waren große Verbesserungen. Alles wurde dokumentiert. Die Teams nahmen den neuen Rahmen schnell an. Wir waren zufrieden.

Aber wir haben immer noch viel Zeit damit verbracht, den Zugriff manuell zu gewähren, und da dies sehr manuell war, war es auch fehleranfällig. Es war klar, dass wir ein Tool brauchten, um diese Aufgaben zu automatisieren.

Automatisierung zur Rettung

Wir hatten ein paar Möglichkeiten:

  • Verwenden Sie die Snowflake Terraform Anbieter um die Umwelt zu verwalten
  • Schreiben Sie Bash-Skripte, um die Erstellung von Benutzern und die Vergabe von Berechtigungen zu automatisieren.
  • Unser eigenes CLI in einer Sprache wie Python oder Go schreiben

Schließlich haben wir ein CLI in Python erstellt.

Wir bevorzugen die Verwendung von Terraform für die Bereitstellung von Infrastruktur und nur von Infrastruktur. Wenn Sie anfangen, Ihre Benutzer und Berechtigungen mit Terraform zu verwalten, kann es zu unerwünschten Verhaltensweisen kommen. Zum Beispiel ist die Rotation von Geheimnissen sehr schwer zu verwalten.

Wir mögen bash, aber nur für ad-hoc und einfache Operationen. Hier müssen wir Konfigurationsdateien laden, mit der Snowflake API interagieren und data-Strukturen manipulieren. Das ist zwar möglich, aber auf lange Sicht wäre es schwer zu pflegen.

Zusätzlich zu diesem Aspekt brauchten wir auch Zuverlässigkeit. Eine Möglichkeit, dies zu erreichen, besteht darin, Tests zu schreiben. Das ist in Programmiersprachen wie Python einfacher.

Wenn Sie das Tool ausführen, geschieht Folgendes hinter den Kulissen.

Das Tool erstellt keine Rolle, die bereits existiert. Dasselbe gilt für Privilegien. Das Tool berechnet die Unterschied zwischen der Konfiguration und der entfernten Umgebung und wendet die notwendigen Änderungen an. So können wir jegliche Ausfallzeiten vermeiden.

Wir haben dieses Tool zunächst lokal ausgeführt. Aber das konnte zu Problemen führen. So konnte es beispielsweise zu Konflikten zwischen zwei Ingenieuren kommen, die gleichzeitig Änderungen vornehmen wollten. Aus diesem Grund haben wir ein Arbeitsablauf basierend auf den CI/CD-Funktionen von Azure DevOps (ADO).

Hinweis: Wir haben ADO verwendet, aber Sie können dies auch mit GitHub, GitLab oder Bitbucket tun.

Hier ist der endgültige Prozess.

Here is the final process of snowflakes

Dieser vollständig automatisierte Arbeitsablauf funktioniert sehr gut. Die Tests fangen Fehler schon früh in der CI-Pipeline ab. Und die obligatorische Überprüfung ist auch eine Möglichkeit, Zwischenfälle zu verhindern.

Außerdem dienen Pull Requests als eine Art Dokumentation aller Anforderungen.

Fazit

Es ist jetzt etwas weniger als ein Jahr her, dass wir mit dieser Lösung begonnen haben. Obwohl die Implementierung anfangs eine gewisse Zeit in Anspruch nahm, hat sie sich absolut gelohnt.

Wir verbringen jetzt mehr Zeit damit, mit den Benutzern über ihre Wünsche zu diskutieren und weniger mit der eigentlichen Implementierung. Die meisten Anfragen können in etwa 10 Zeilen YAML gelöst werden. Das ist sehr effizient und lässt sich gut skalieren. Wir freuen uns immer noch über neue Benutzer und können die Nachfrage bewältigen. Außerdem haben wir die anfänglichen Probleme gelöst. Es war also ein Erfolg!

Dank an Samy Dougui die diesen Artikel geprüft und mit mir an der Entwicklung dieser Lösung gearbeitet haben

Mittel Blog von Artefact.

Dieser Artikel wurde ursprünglich veröffentlicht auf Medium.com.
Folgen Sie uns auf unserem Medium Blog !