Cos'è la proprietà User Type?
Quando si crea o si modifica un utente in Snowflake, è possibile impostare decine di proprietà e parametri, come spiegato nella documentazione di Snowflake. Tra le Object Property configurabili per gli utenti c'è la proprietà type, che può assumere i valori person, service, legacy_service oppure null.
Questa proprietà è stata introdotta da Snowflake nel Q3 2024 per offrire un modo di tracciare lo scopo di ciascun utente. A mio avviso, la novità è anche un invito velato di Snowflake a usare l'autenticazione a coppia di chiavi per i service account, come vedremo più avanti.
Definizione di ciascun tipo
personè chiaramente pensato per gli utenti umani. Questi utenti accedono in genere a Snowflake tramite SSO (SAML) o tramite semplice autenticazione con utente e password. L'MFA di Snowflake è sempre consigliata per gli utenti di tipoperson.- Il tipo
serviceè destinato ai service account. Si tratta di un tipo particolare, perché non ammette autenticazione con utente/password né MFA. Deve utilizzare l'autenticazione a coppia di chiavi di Snowflake; di conseguenza, i comandi e le proprietà tipicamente legati a MFA e password non sono ammessi. Inoltre, gli utenti di tiposervicenon possono avere First Name, Middle Name e Last Name.
legacy_serviceè un service account che può autenticarsi tramite password o SAML.
Quali sono i vantaggi?
Hardening dell'account
Distinguere tra service e legacy_service permette di tenere sempre alta l'attenzione sulla sicurezza dell'account. L'autenticazione a coppia di chiavi è universalmente considerata più sicura di quella tramite password: contrassegnare ogni account che utilizza l'approccio meno sicuro è una buona pratica e può diventare una checklist per future attività di bonifica.
Analisi della query history
Un altro vantaggio nel mantenere la proprietà Type per tutti gli utenti è poter sfruttare questa informazione a fini analitici. Ad esempio, immagini di voler vedere il numero di query eseguite su una tabella, suddivise per tipo di utente, usando la query history di 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
Codice di esempio: impostare la proprietà Type
Impostare lo user type alla creazione di un nuovo utente
Impostare la proprietà type in fase di creazione di un utente è semplice:
create user if not exists my_service_user
type = service
rsa_public_key = <string>;
Aggiornare lo user type di un utente esistente
Immagini di voler impostare type=service su un service account esistente che attualmente utilizza l'autenticazione con password. Per aggiornare un utente esistente, può limitarsi all'essenziale:
alter user my_service_user set
type = service
rsa_public_key = <string>
;
In questo caso non abbiamo eseguito l'unset della password né delle altre proprietà incompatibili: queste ultime vengono mantenute, ma disattivate. Reimpostando lo user type su legacy_service, person o null tali proprietà tornerebbero attive.
Per una gestione pulita, consiglio quanto segue:
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;
Limitazioni
Ad oggi (settembre 2024), la proprietà type non è visibile nell'interfaccia di Snowsight e può essere impostata solo via codice. Inoltre, il comando show users non riporta una colonna dedicata allo user type, anche se ci auguriamo venga aggiunta a breve.
L'unico modo per conoscere il tipo di un utente è il comando describe user <username>, oppure interrogando la tabella snowflake.account_usage.users.
Conclusioni e raccomandazioni
La nuova proprietà type di Snowflake è un ottimo strumento per tracciare le tipologie di utenti all'interno del proprio account e può contribuire all'hardening della sicurezza, perché costringe a censire i service account che ancora si appoggiano ad autenticazioni legacy.
Consiglio di passare in rassegna ogni service account presente nel proprio account Snowflake e di impostarlo come type = service oppure type = legacy_service. Per gli account legacy_service, è bene definire un piano d'azione per migrarli al tipo service in tempi brevi.
Jeff è un consulente Data and Analytics con oltre 15 anni di esperienza nell'automazione degli insight e nell'uso dei dati a supporto dei processi di business. Sul fronte tecnologico è specializzato in Snowflake + dbt + Tableau. Sul fronte dei settori, ha maturato esperienza in Public Utility, Clinical Trials, Editoria, CPG e Manifatturiero. Può contattarlo in qualsiasi momento all'indirizzo [email protected].