Panoramica controllo dell'accesso granulare

Il controllo granulare dell'accesso di Spanner combina i vantaggi di Identity and Access Management (IAM) con controllo dell'accesso basato su ruoli SQL. Con controllo dell'accesso granulare dell'accesso, definisci i ruoli del database, concedi i privilegi ai ruoli e crei policy IAM per concedere le autorizzazioni sui ruoli del database alle entità IAM. Questa pagina descrive come utilizzare controllo dell'accesso granulare dell'accesso con Spanner per i database con dialetto GoogleSQL e PostgreSQL.

In qualità di amministratore, devi attivare controllo dell'accesso granulare dell'accesso per le singole entità IAM. Le entità per cui è abilitato il controllo dell'accesso granulare dell'accesso ("utenti con controllo dell'accesso granulare dell'accesso") devono assumere un ruolo del database per accedere alle risorse Spanner.

L'accesso alle risorse per gli utenti che non sono utenti controllo dell'accesso granulare dell'accesso è regolato dai ruoli IAM a livello di database. Il controllo granulare dell'accesso è completamente compatibile e può coesistere con controllo dell'accesso a livello di database IAM esistente. Puoi utilizzarlo per accedere ai singoli oggetti del database. Per controllare l'accesso all'intero database, utilizza i ruoli IAM.

Con il controllo granulare dell'accesso, puoi controllare l'accesso a tabelle, colonne, viste e modifiche in tempo reale.

Per gestire controllo dell'accesso granulare dell'accesso, utilizza le seguenti istruzioni DDL:

  • Istruzioni CREATE e DROP per la creazione e l'eliminazione dei ruoli del database. I ruoli del database sono raccolte di privilegi. Puoi creare fino a 100 ruoli per un database.
  • Istruzioni GRANT e REVOKE per concedere e revocare i privilegi ai ruoli del database. I privilegi includono SELECT, INSERT, UPDATE, DELETE e EXECUTE. I nomi dei privilegi corrispondono alle istruzioni SQL con lo stesso nome. Ad esempio, un ruolo con il privilegio INSERT può eseguire l'istruzione SQL INSERT sulle tabelle specificate nell'istruzione GRANT.

    Le seguenti istruzioni DDL concedono SELECT sulla tabella employees al ruolo di database hr_rep.

    GoogleSQL

    CREATE ROLE hr_rep;
    GRANT SELECT ON TABLE employees TO ROLE hr_rep;
    

    PostgreSQL

    CREATE ROLE hr_rep;
    GRANT SELECT ON TABLE employees TO hr_rep;
    

    Per ulteriori informazioni sui privilegi, consulta la pagina di riferimento sui privilegi di controllo dell'accesso granulare dell'accesso.

  • Istruzioni GRANT per concedere ruoli ad altri ruoli per creare gerarchie di ruoli, con ereditarietà dei privilegi.

Casi d'uso

Di seguito sono riportati alcuni esempi di casi d'uso per controllo dell'accesso granulare dell'accesso:

  • Un sistema di informazioni sulle risorse umane che prevede i ruoli di analista dei compensi di vendita, gestione delle vendite e analista delle RU, ciascuno con livelli di accesso diversi ai dati. Ad esempio, gli analisti delle retribuzioni e la gestione delle vendite non dovrebbero vedere i codici fiscali.
  • Un'applicazione di ride sharing con diversi service account e privilegi per passeggeri e conducenti.
  • Un ledger che consente le operazioni SELECT e INSERT, ma non le operazioni UPDATE e DELETE.

Risorse Spanner e relativi privilegi

Di seguito è riportato un elenco delle risorse Spanner e dei privilegi di controllo dell'accesso granulare dell'accesso che puoi concedere per queste risorse.

Schemi
Puoi concedere il privilegio USAGE sugli schemi a ruoli di database specifici. Per uno schema non predefinito, i ruoli del database devono disporre del privilegio USAGE per accedere agli oggetti del database. Il controllo dei privilegi è simile al seguente:

Hai USAGE nello schema?

No: rifiuta l'accesso.

Sì: disponi anche dei diritti appropriati sulla tabella?

No: rifiuta l'accesso.

Sì: puoi accedere alla tabella.

Tabelle
Puoi concedere i privilegi SELECT, INSERT, UPDATE e DELETE sulle tabelle ai ruoli del database. Per le tabelle con interleaving, un privilegio concesso alla tabella principale non si propaga alla tabella secondaria.
Colonne
Puoi concedere SELECT, INSERT e UPDATE su un sottoinsieme di colonne di una tabella. Il privilegio è quindi valido solo per queste colonne. DELETE non è consentito a livello di colonna.
Visualizzazioni
Puoi concedere il privilegio SELECT su una vista. Per le visualizzazioni è supportato solo SELECT. Spanner supporta sia le viste con diritti del chiamante sia le viste con diritti del definer. Se crei una vista con i diritti di chi richiama, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre del privilegio SELECT sulla vista e del privilegio SELECT sugli oggetti sottostanti a cui viene fatto riferimento nella vista. Se crei una vista con i diritti del definer, per eseguire query sulla vista, il ruolo o l'utente del database deve avere solo il privilegio SELECT sulla vista. Per saperne di più, consulta la panoramica delle visualizzazioni.
Modifiche in tempo reale
Puoi concedere SELECT sulle modifiche in tempo reale. Devi anche concedere EXECUTE sulla funzione di lettura associata a un feed delle modifiche in tempo reale. Per informazioni, consulta Controllo granulare dell'controllo dell'accesso per i flussi di modifiche in tempo reale.
Sequenze
Puoi concedere SELECT e UPDATE sulle sequenze. Per informazioni, consulta Controllo granulare dell'controllo dell'accesso per le sequenze.
Modelli
Puoi concedere EXECUTE sui modelli. Per informazioni, consulta Controllo granulare dell'controllo dell'accesso per i modelli.

Ruoli di sistema per controllo dell'accesso granulare dell'accesso

Il controllo granulare dell'accesso prevede ruoli di sistema predefiniti per ogni database. Come i ruoli del database definiti dall'utente, i ruoli di sistema possono controllare l'accesso alle risorse Spanner.

Ad esempio, a un utente con controllo dell'accesso granulare dell'accesso deve essere concesso il ruolo di sistema spanner_sys_reader per accedere a Key Visualizer e il ruolo di sistema spanner_info_reader per poter visualizzare i risultati non filtrati quando esegue query sulle tabelle INFORMATION_SCHEMA.

Per saperne di più, consulta Ruoli di sistema per controllo dell'accesso granulare dell'accesso.

Gerarchie ed ereditarietà dei ruoli del database

Puoi creare gerarchie di ruoli del database, in cui i ruoli secondari ereditano i privilegi dei ruoli principali. I ruoli secondari sono noti come membri del ruolo principale.

Ad esempio, considera le seguenti istruzioni GRANT:

GoogleSQL

GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;

PostgreSQL

GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;

hr_manager e hr_director sono membri del ruolo pii_access ed ereditano il privilegio SELECT sulla tabella employees.

Ereditarietà dei privilegi

Anche hr_manager e hr_director possono avere membri, che erediteranno il privilegio SELECT su employees.

Non esistono limiti alla profondità delle gerarchie dei ruoli, ma le prestazioni delle query potrebbero peggiorare con strutture di gerarchia dei ruoli profonde e ampie.

Backup e ripristino

I backup di Spanner includono le definizioni dei ruoli del database. Quando un database viene ripristinato dal backup, i ruoli del database vengono ricreati con i privilegi concessi. Tuttavia, le policy IAM non fanno parte dei backup del database, quindi devi concedere nuovamente l'accesso ai ruoli del database alle entità nel database ripristinato.

Panoramica della configurazione controllo dell'accesso granulare dell'accesso

Di seguito sono riportati i passaggi generali da seguire per iniziare a proteggere i dati con controllo dell'accesso granulare dell'accesso. Per maggiori dettagli, consulta Configura il controllo granulare dell'accesso.

Per eseguire queste attività, devi disporre dei ruoli IAM roles/spanner.admin o roles/spanner.databaseAdmin.

  1. Creare ruoli del database e concedere privilegi ai ruoli.
  2. (Facoltativo) Crea gerarchie di ruoli con ereditarietà concedendo ruoli ad altri ruoli.
  3. Esegui questi passaggi per ogni entità che deve essere un utente con controllo dell'accesso granulare dell'accesso:
    1. Abilita il controllo granulare dell'accesso per l'entità. All'entità viene quindi concesso automaticamente il ruolo database public, che non ha privilegi per impostazione predefinita. Questa operazione deve essere eseguita una sola volta per ogni entità.
    2. Concedi all'entità le autorizzazioni IAM su uno o più ruoli del database.
    3. Dopo aver concesso all'entità tutti i ruoli database richiesti, se l'entità dispone di ruoli IAM a livello di database, valuta la possibilità di revocare i ruoli a livello di database in modo che controllo dell'accesso dell'entità sia gestito da un solo metodo.

Limitazioni

  • Le operazioni di esportazione non esportano i ruoli e i privilegi del database e le operazioni di importazione non possono importarli. Devi configurare manualmente i ruoli e i privilegi al termine dell'importazione.
  • La scheda Dati della pagina TABELLA nella console Google Cloud non è disponibile per gli utenti con controllo dell'accesso granulare dell'accesso.

Passaggi successivi