SELECTSELECT

SELECT

Snowflakes neue User-Type-Property im Detail

By Jeff SkoldbergSep 22, 20244 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Was ist die User-Type-Property?

Beim Anlegen oder Ändern eines Users in Snowflake lassen sich Dutzende Properties und Parameter setzen – nachzulesen in der Snowflake-Dokumentation. Eine dieser Object Properties ist die type-Property, die sich auf person, service, legacy_service oder null setzen lässt.

Snowflake hat diese Property im 3. Quartal 2024 eingeführt, um den Zweck jedes Users nachvollziehbar zu machen. Aus meiner Sicht ist sie zugleich ein dezenter Wink von Snowflake, für Service-Accounts auf Key-Pair-Authentifizierung zu setzen – dazu weiter unten mehr.

Die einzelnen Typen im Überblick

  • person ist – wie der Name vermuten lässt – für menschliche User gedacht. Sie melden sich in Snowflake typischerweise per SSO (SAML) oder klassischer User-/Passwort-Authentifizierung an. Für User vom Typ person ist Snowflakes MFA grundsätzlich zu empfehlen.
  • Der Typ service ist für Service-Accounts vorgesehen. Die Besonderheit: Er erlaubt weder User-/Passwort-Authentifizierung noch MFA. Stattdessen muss Snowflakes Key-Pair-Authentifizierung verwendet werden. Übliche Befehle und Properties rund um MFA und Passwörter sind daher nicht zulässig. Außerdem können User vom Typ service weder Vor-, Mittel- noch Nachnamen tragen.

Einschränkungen der Snowflake User-Type-Property

  • legacy_service bezeichnet einen Service-Account, der sich per Passwort oder SAML authentifizieren kann.

Welche Vorteile bringt das?

Account-Härtung

Die Unterscheidung zwischen service und legacy_service rückt die Account-Sicherheit in den Fokus. Key-Pair-Authentifizierung gilt allgemein als sicherer als Passwort-Authentifizierung. Jeden Account zu kennzeichnen, der noch den weniger sicheren Weg nutzt, ist gute Praxis – und liefert nebenbei eine To-do-Liste für künftige Aufräumarbeiten.

Analyse der Query History

Ein weiterer Vorteil: Wer die Type-Property für alle User konsequent pflegt, kann diese Information für Analysen nutzen. Angenommen, Sie möchten in der Snowflake Query History sehen, wie sich Queries auf eine Tabelle nach Service-Typ aufschlüsseln:

select
    users.type = 'PERSON' as is_person,
    count(*)
from snowflake.account_usage.query_history
left join snowflake.account_usage.users
    on query_history.user_name=users.name
where true
    and query_history.query_text ilike '%analytics.public.orders%'
    and start_time > current_date - 30
group by 1

Codebeispiele: Die Type-Property setzen

User-Type beim Anlegen eines neuen Users setzen

Die type-Property beim Anlegen eines Users zu setzen, ist denkbar einfach:

create user if not exists my_service_user
    type = service
    rsa_public_key = <string>;

User-Type für einen bestehenden User aktualisieren

Angenommen, wir möchten type=service für einen bestehenden Service-Account setzen, der aktuell per Passwort authentifiziert. Beim Aktualisieren eines vorhandenen Users reicht im Minimalfall:

alter user my_service_user set
    type = service
    rsa_public_key = <string>
;

In diesem Fall haben wir das Passwort und andere inkompatible Properties nicht per unset entfernt. Sie bleiben gespeichert, sind aber deaktiviert. Wird der User-Typ wieder auf legacy_service, person oder null gesetzt, sind diese Properties erneut aktiv.

Für sauberes Housekeeping empfehle ich folgendes Vorgehen:

alter user my_service_user unset password;
alter user my_service_user unset first_name;
alter user my_service_user unset middle_name;
alter user my_service_user unset last_name;
alter user my_service_user set disable_mfa = true;

Einschränkungen

Aktuell (Stand September 2024) wird die type-Property in der Snowsight-UI nicht angezeigt und lässt sich ausschließlich per Code setzen. Auch der Befehl show users liefert bislang keine Spalte für den User-Typ – das wird sich hoffentlich bald ändern.

Den Typ eines Users ermitteln Sie derzeit nur über den Befehl describe user <username> oder per Abfrage der Tabelle snowflake.account_usage.users.

Fazit und Empfehlungen

Die neue type-Property in Snowflake ist eine ausgezeichnete Möglichkeit, User-Typen in Ihrem Snowflake-Account nachzuhalten. Gleichzeitig trägt sie zur Account-Härtung bei, indem sie sichtbar macht, wo Sie Service-Accounts mit veralteter Authentifizierung im Einsatz haben.

Mein Rat: Gehen Sie jeden Service-Account in Ihrem Snowflake-Konto durch und setzen Sie ihn entweder auf type = service oder type = legacy_service. Für die legacy_service-Accounts erstellen Sie einen Aktionsplan, um sie zeitnah auf type = service umzustellen.

Jeff ist Data- und Analytics-Consultant mit über 15 Jahren Erfahrung darin, Insights zu automatisieren und Geschäftsprozesse datengetrieben zu steuern. Technologisch ist er auf Snowflake + dbt + Tableau spezialisiert. Branchenseitig bringt er Erfahrung aus Versorgungswirtschaft, klinischen Studien, Verlagswesen, CPG und Fertigung mit. Kontakt jederzeit unter [email protected].