SELECTSELECT

SELECT

La nuova proprietà User Type di Snowflake, spiegata

By Jeff SkoldbergSep 22, 20244 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

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 tipo person.
  • 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 tipo service non possono avere First Name, Middle Name e Last Name.

Limitazioni della proprietà user type in Snowflake

  • 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].