Qu'est-ce que la propriété User Type ?
Lors de la création ou de la modification d'un utilisateur dans Snowflake, des dizaines de propriétés et de paramètres peuvent être définis, comme l'explique la documentation Snowflake. Parmi les Object Properties configurables pour un utilisateur figure la propriété type, qui peut prendre les valeurs person, service, legacy_service ou null.
Snowflake a introduit cette propriété au troisième trimestre 2024 afin de permettre le suivi de la finalité de chaque utilisateur. À mon sens, il s'agit également d'une façon subtile pour Snowflake d'inciter ses clients à adopter l'authentification par paire de clés pour les comptes de service, comme nous le verrons plus bas.
Définition de chaque type
personest, comme son nom l'indique, destiné aux utilisateurs humains. Ceux-ci se connectent généralement à Snowflake via SSO (SAML) ou par simple authentification utilisateur / mot de passe. La MFA Snowflake est toujours recommandée pour les utilisateurs de typeperson.- Le type
serviceest destiné aux comptes de service. Sa particularité : il ne peut pas recourir à l'authentification utilisateur / mot de passe ni à la MFA. Il doit obligatoirement utiliser l'authentification par paire de clés de Snowflake ; les commandes et propriétés courantes liées à la MFA et aux mots de passe sont donc interdites. De plus, les utilisateurs de typeservicene peuvent pas avoir de prénom, de deuxième prénom ni de nom de famille.
legacy_servicedésigne un compte de service pouvant s'authentifier par mot de passe ou via SAML.
Quels sont les avantages ?
Renforcement de la sécurité du compte
Distinguer service de legacy_service permet de garder la sécurité du compte au premier plan. L'authentification par paire de clés est largement reconnue comme plus sûre que l'authentification par mot de passe ; identifier les comptes qui s'appuient encore sur l'approche la moins sécurisée relève des bonnes pratiques et constitue une feuille de route utile pour un nettoyage ultérieur.
Analyse de l'historique des requêtes
Maintenir la propriété Type pour tous les utilisateurs présente un autre avantage : pouvoir exploiter cette information à des fins d'analyse. Imaginez par exemple que vous souhaitiez connaître le nombre de requêtes exécutées sur une table, ventilées par type de service, à partir de l'historique des requêtes Snowflake :
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
Exemples de code : définir la propriété Type
Exemples de code : définir la propriété Type
Définir le type d'utilisateur à la création d'un nouvel utilisateur
Définir la propriété type à la création d'un utilisateur est simple :
create user if not exists my_service_user
type = service
rsa_public_key = <string>;
Mettre à jour le type d'un utilisateur existant
Imaginons que nous souhaitions appliquer type=service à un compte de service existant qui utilise actuellement l'authentification par mot de passe. Pour mettre à jour un utilisateur existant, on peut se contenter du strict minimum :
alter user my_service_user set
type = service
rsa_public_key = <string>
;
Ici, nous n'avons pas exécuté unset sur le mot de passe ni sur les autres propriétés incompatibles ; celles-ci seront conservées mais désactivées. Repasser le type d'utilisateur sur legacy_service, person ou null les réactiverait.
Pour une meilleure hygiène, je recommande plutôt l'approche suivante :
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;
Limitations
À ce jour (septembre 2024), la propriété type n'apparaît pas dans l'interface Snowsight et ne peut être définie que par code. La commande show users n'affiche pas non plus de colonne pour le type d'utilisateur, mais cela devrait évoluer prochainement.
Le seul moyen de connaître le type d'un utilisateur est d'utiliser la commande describe user <username> ou d'interroger la table snowflake.account_usage.users.
Conclusion et recommandations
La nouvelle propriété type de Snowflake est un excellent moyen de suivre les types d'utilisateurs dans votre compte Snowflake. Elle contribue aussi au renforcement de la sécurité, puisqu'elle vous oblige à identifier les comptes de service qui s'appuient encore sur une authentification héritée.
Je recommande de passer en revue chacun des comptes de service de votre compte Snowflake et d'attribuer à chacun la valeur type = service ou type = legacy_service. Pour les comptes legacy_service, prévoyez un plan d'action afin de les faire basculer vers le type service à court terme.
Jeff est consultant Data et Analytics. Fort de plus de 15 ans d'expérience, il automatise la production d'insights et s'appuie sur la donnée pour piloter les processus métier. Côté technologies, il est spécialisé sur Snowflake + dbt + Tableau. Côté secteurs, il intervient auprès des services publics, des essais cliniques, de l'édition, des biens de grande consommation et de l'industrie manufacturière. N'hésitez pas à le contacter : [email protected].