Configurare un controllo dell'accesso granulare

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina spiega come configurare il controllo dell'accesso granulare per i database Cloud Spanner.

Per informazioni sul controllo dell'accesso granulare, vedi Informazioni sul controllo dell'accesso granulare.

La configurazione di un controllo dell'accesso granulare comporta i seguenti passaggi:

  1. Creare ruoli di database e concedere privilegi.

  2. Facoltativo: crea una gerarchia di ruoli con ereditarietà.

  3. Concedi l'accesso ai ruoli del database alle entità IAM.

Dopo aver configurato i ruoli del database, un utente granulare di controllo dell'accesso deve selezionare un ruolo per eseguire query, operazioni DML o operazioni sulle righe contro il database.

Creare ruoli di database e concedere privilegi

Un ruolo di database è una raccolta di privilegi di accesso granulari. Puoi creare fino a 100 ruoli di database per ogni database.

Decidi i ruoli e le gerarchie dei ruoli nel tuo database e codificali in DDL. Come per altre modifiche allo schema in Spanner, consigliamo vivamente di eseguire le modifiche allo schema in un batch anziché separatamente. Per maggiori informazioni, consulta la pagina Limitare la frequenza degli aggiornamenti dello schema.

Console

Per creare un ruolo di database e assegnargli privilegi di accesso granulari, segui questi passaggi:

  1. Vai alla pagina Istanze in Google Cloud Console.

    Istanze

  2. Seleziona l'istanza contenente il database a cui vuoi aggiungere il ruolo.

  3. Seleziona il database.

  4. Nella pagina Panoramica, fai clic su Scrivi DDL.

  5. Nella pagina Scrivi istruzioni DDL, per ogni ruolo di database a cui vuoi creare e concedere i privilegi, segui questi passaggi:

    1. Per creare il ruolo, inserisci la seguente istruzione:

      CREATE ROLE ROLE_NAME;
      

    2. Per concedere i privilegi al ruolo, inserisci il seguente messaggio:

      GRANT PRIVILEGE_LIST ON TABLE TABLE_LIST TO ROLE ROLE_NAME;
      

      • PRIVILEGE_LIST è un elenco di privilegi delimitato da virgole. I privilegi consentiti sono SELECT, INSERT, UPDATE e DELETE. DELETE è consentito solo a livello di tabella.

      • TABLE_LIST è un elenco di tabelle delimitato da virgole.

      Ad esempio, per concedere SELECT,INSERT e UPDATE alle tabelle employees e contractors al ruolo di database hr_manager, inserisci la seguente istruzione:

      GRANT SELECT, INSERT, UPDATE ON TABLE employees, contractors TO ROLE hr_manager;
      

      Puoi concedere i privilegi a un elenco di ruoli anziché a un solo ruolo.

      Puoi concedere ciascun privilegio su un sottoinsieme di colonne della tabella. Per gli esempi, consulta Privilegi di controllo granulare dell'accesso. Per la sintassi dettagliata per l'istruzione GRANT, consulta il linguaggio di definizione dei dati SQL standard di Google.

      Puoi utilizzare un modello DDL per l'istruzione GRANT. Nel menu a discesa MODELLI DDL, seleziona Ruoli database, quindi seleziona un modello in Concedi privilegi di ruolo.

  6. Fai clic su Invia.

    Se sono presenti errori nel DDL, la console Google Cloud restituisce un errore.

gcloud

Per creare un ruolo di database e concedergli privilegi di accesso granulari, utilizza il comando gcloud spanner databases ddl update come segue:

gcloud spanner databases ddl update DATABASE_NAME \
--ddl='CREATE ROLE ROLE_NAME; GRANT PRIVILEGES ON TABLE TABLES TO ROLE ROLE_NAME;'
  • PRIVILEGES è un elenco separato da virgole di privilegi di controllo granulare dell'accesso. I privilegi consentiti sono SELECT, INSERT, UPDATE e DELETE.

  • TABLES è un elenco di tabelle delimitato da virgole.

Ad esempio, per concedere SELECT,INSERT e UPDATE alle tabelle employees e contractors al ruolo di database hr_manager, inserisci la seguente istruzione:

GRANT SELECT, INSERT, UPDATE ON TABLE employees, contractors TO ROLE hr_manager;

Puoi concedere i privilegi a un elenco di ruoli anziché a un solo ruolo.

Puoi concedere ciascun privilegio su un sottoinsieme di colonne della tabella. Per gli esempi, consulta Privilegi di controllo granulare dell'accesso. Per la sintassi dettagliata per l'istruzione GRANT, consulta il linguaggio di definizione dei dati SQL standard di Google.

Crea una gerarchia di ruoli con ereditarietà

Puoi creare una gerarchia di ruoli di database assegnando un ruolo di database a un altro. I ruoli secondari (detti ruoli membri) ereditano i privilegi dell'organizzazione principale.

Per concedere un ruolo di database a un altro ruolo di database, utilizza la seguente istruzione:

GRANT ROLE role1 TO ROLE role2;

Per saperne di più, vedi Gerarchie ed ereditarietà dei ruoli del database.

Concedi l'accesso ai ruoli del database alle entità IAM

Puoi utilizzare IAM per concedere l'accesso ai ruoli del database.

Console

Per concedere l'accesso ai ruoli del database a un'entità, segui questi passaggi:

  1. Nella pagina Panoramica del database, fai clic su MOSTRA PANNELLO INFORMAZIONI se il riquadro Informazioni non è già aperto.

  2. Fai clic su AGGIUNGI ENTITÀ.

  3. Nel riquadro Aggiungi entità e ruoli, in Nuove entità, specifica una o più entità IAM.

  4. Nel menu Ruolo, seleziona Cloud Spanner > Utente con accesso granulare a Cloud Spanner.

    Devi concedere questo ruolo solo una volta a ciascuna entità. In questo modo il principio è un utente granulare del controllo dell'accesso.

  5. Fai clic su AGGIUNGI UN ALTRO RUOLO.

  6. Nel menu Seleziona un ruolo, seleziona Cloud Spanner > Utente del ruolo Cloud Database Database.

  7. Segui questi passaggi per creare la condizione IAM che specifica i ruoli da concedere.

    1. Fai clic su AGGIUNGI CONDIZIONE.

    2. Nel riquadro Modifica condizione, inserisci un titolo e una descrizione per la condizione.

      Se concedi un singolo ruolo di database, in genere includi il nome del ruolo nel titolo della condizione. Se concedi più ruoli, puoi indicare qualcosa sull'insieme di ruoli.

    3. Fai clic su EDITOR CONDIZIONE.

    4. Nel campo Espressione, inserisci il seguente codice:

      resource.type == "spanner.googleapis.com/DatabaseRole" &&
      resource.name.endsWith("/ROLE")
      

      Sostituisci ROLE con il nome del tuo ruolo.

      In alternativa, per concedere l'accesso a più ruoli, aggiungi altre condizioni con l'operatore or (||), come mostrato nell'esempio seguente:

      resource.type == "spanner.googleapis.com/DatabaseRole" &&
      (resource.name.endsWith("/ROLE1") || resource.name.endsWith("/ROLE2"))
      

      Questo codice concede due ruoli. Sostituisci ROLE1 e ROLE2 con i nomi dei tuoi ruoli. Per concedere più di due ruoli, aggiungi più condizioni or.

      Puoi utilizzare qualsiasi espressione di condizione supportata da IAM. Per ulteriori informazioni, consulta la panoramica delle condizioni IAM.

    5. Fai clic su Salva.

    6. Torna al riquadro Aggiungi entità e verifica che la condizione venga visualizzata nella colonna Condizione accanto al campo Ruolo.

    7. Fai clic su Salva.

      Tornando al riquadro Informazioni, in Ruolo/entità, nota che Utente ruolo database Cloud Spanner viene visualizzato per ogni condizione definita. Il numero tra parentesi accanto alla condizione indica il numero di entità a cui viene concesso il ruolo di database per quella condizione.

    8. Per correggere gli errori nei nomi o nelle condizioni dei ruoli del database o per aggiungere altri ruoli del database per un'entità, segui questi passaggi:

      1. Espandi la voce Utente ruolo database Cloud Spanner che corrisponde alla condizione che vuoi.

      2. Nella pagina Edit permissions (Modifica autorizzazioni), esegui una delle seguenti operazioni:

        • Fai clic su AGGIUNGI UN ALTRO RUOLO.

        • Per modificare la condizione, fai clic sull'icona a forma di matita accanto al nome della condizione. Nella pagina Modifica condizione, fai clic su EDITOR CONDIZIONE e apporta le correzioni necessarie.

gcloud

Per concedere l'accesso ai ruoli del database a un'entità IAM, segui questi passaggi:

  1. Abilita un controllo dell'accesso granulare per l'entità utilizzando il comando gcloud spanner databases add-iam-policy-binding come segue:

    gcloud spanner databases add-iam-policy-binding DATABASE_NAME \
    --instance=INSTANCE_NAME \
    --role=roles/spanner.fineGrainedAccessUser \
    --member=MEMBER_NAME
    
    • MEMBER_NAME è l'identificatore della entità. Deve essere nel formato user|group|serviceAccount:email o domain:domain.

    • Questo comando rende l'entità un utente granulare per il controllo dell'accesso. Invia questo comando una sola volta per ogni entità.

  2. Concedi l'autorizzazione a utilizzare uno o più ruoli di database utilizzando il comando gcloud spanner databases add-iam-policy-binding nel seguente modo:

    gcloud spanner databases add-iam-policy-binding DATABASE_NAME \
    --instance=INSTANCE_NAME \
    --role=roles/spanner.databaseRoleUser \
    --member=MEMBER_NAME \
    --condition=CONDITION
    
    • MEMBER_NAME è l'identificatore della entità. Deve essere nel formato user|group|serviceAccount:email o domain:domain.

    • CONDITION è un'espressione della condizione IAM che specifica i ruoli da concedere all'entità.

      CONDITION ha il seguente formato:

      --condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/ROLE1") || resource.name.endsWith("/ROLE2"))),title=TITLE,description=DESCRIPTION'
      

      Questo codice concede due ruoli. Sostituisci ROLE1 e ROLE2 con i nomi dei tuoi ruoli. Per concedere un solo ruolo di database, elimina l'espressione dopo l'operatore ||. Per concedere più di due ruoli, aggiungi più condizioni o con l'operatore ||.

      Puoi utilizzare qualsiasi espressione di condizione supportata da IAM. Per ulteriori informazioni, consulta la panoramica delle condizioni IAM.

    L'esempio seguente concede i ruoli di database hr_rep e hr_manager all'entità jsmith@example.com.

    gcloud spanner databases add-iam-policy-binding myDatabase \
      --instance=myInstance \
      --role=roles/spanner.databaseRoleUser \
      --member=user:jsmith@example.com \
      --condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/hr_rep") || resource.name.endsWith("/hr_manager"))),title=HR roles,description=Grant permissions on HR roles'
    

Esegui la transizione di un'entità a un controllo dell'accesso granulare

Per eseguire la transizione di un'entità IAM dal controllo di accesso a livello di database a un controllo granulare degli accessi, segui questi passaggi:

  1. Abilita un controllo granulare dell'accesso per l'entità e concedi l'accesso a tutti i ruoli di database richiesti, come descritto in Concedere l'accesso ai ruoli di database alle entità IAM.

  2. Aggiorna tutte le applicazioni che vengono eseguite come questa entità. Specifica i ruoli di database appropriati nelle chiamate ai metodi della libreria client.

  3. Revoca tutti i ruoli a livello di database IAM dall'entità. In questo modo, l'accesso all'entità è regolato da un solo metodo.

    console

    gcloud

    • Per revocare un ruolo IAM a livello di database, inserisci il seguente comando:

      gcloud spanner databases remove-iam-policy-binding DATABASE_NAME \
      --instance=INSTANCE_NAME \
      --role=roles/IAM_ROLE_NAME \
      --member=MEMBER_NAME
      
      • MEMBER_NAME è l'identificatore della entità. Deve essere nel formato user|group|serviceAccount:email o domain:domain.

Elencare i ruoli del database

Per elencare i ruoli del database utilizzando Google Cloud Console, inserisci la query seguente nella pagina Query per il database:

  SELECT * FROM INFORMATION_SCHEMA.ROLES;

Visualizzare i privilegi concessi a un ruolo di database

Per visualizzare i privilegi concessi a un ruolo per tutte le tabelle, utilizza la query seguente:

  SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE grantee = ROLE_NAME;
  

Per visualizzare i privilegi concessi a un ruolo per tutte le colonne, utilizza la query seguente:

  SELECT * FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE grantee = ROLE_NAME;
  

Elimina un ruolo di database

L'eliminazione di un ruolo di database revoca automaticamente l'appartenenza di altri ruoli al ruolo e revoca l'appartenenza del ruolo ad altri ruoli.

Devi revocare tutti i privilegi di un ruolo di database prima di poterlo eliminare. Puoi eliminare un ruolo di database a prescindere dal fatto che siano presenti o meno autorizzazioni per farlo.

Prima di eliminare un ruolo di database, rimuovi eventuali associazioni di criteri IAM che fanno riferimento a tale ruolo, in modo che un ruolo di database creato in seguito con lo stesso nome non erediti tali associazioni.

Console

Per eliminare un ruolo di database:

  1. Nella pagina Panoramica del database, fai clic su Scrivi DDL.

  2. Per revocare i privilegi del ruolo, inserisci la seguente istruzione:

    REVOKE PRIVILEGE_LIST ON TABLE TABLE_LIST FROM ROLE ROLE_NAME;
    

    • PRIVILEGE_LIST è un elenco di privilegi delimitato da virgole. I privilegi consentiti sono SELECT, INSERT, UPDATE e DELETE.

    • TABLE_LIST è un elenco di tabelle delimitato da virgole.

    Ad esempio, per revocare SELECT, INSERT e UPDATE nelle tabelle employees e contractors dal ruolo di database hr_manager, inserisci la seguente istruzione:

    REVOKE SELECT, INSERT, UPDATE ON TABLE employees, contractors FROM ROLE hr_manager;
    
  3. Per abbandonare il ruolo, inserisci la seguente istruzione:

    DROP ROLE ROLE_NAME;
    

  4. Per applicare gli aggiornamenti, fai clic su Invia.

  5. Elimina qualsiasi condizione IAM associata al ruolo.

    1. Nell'elenco dei ruoli nel riquadro Informazioni, individua il ruolo Utente ruolo Cloud Spanner database con il titolo di condizione adiacente che gli interessa, quindi espandi il ruolo per visualizzare le entità che hanno accesso al ruolo.

    2. Per una delle entità, fai clic sull'icona Modifica entità (matita).

    3. Nella pagina Modifica autorizzazioni, fai clic sull'icona Modifica condizione IAM (matita) accanto alla condizione.

    4. Nella pagina Modifica condizione, fai clic su ELIMINA.

    5. Conferma l'eliminazione e fai clic su Salva.

gcloud

  1. Per revocare tutti i privilegi di un ruolo e quindi eliminarlo, utilizza il comando gcloud spanner databases ddl update come segue:

    gcloud spanner databases ddl update DATABASE_NAME \
    --instance=INSTANCE_NAME \
    --ddl='REVOKE PERMISSIONS ON TABLE TABLE_NAME FROM ROLE ROLE_NAME; DROP ROLE ROLE_NAME;'
    

    I valori validi per PERMISSIONS sono SELECT, INSERT, UPDATE e DELETE.

  2. Per eliminare eventuali condizioni IAM correlate, utilizza il comando gcloud spanner databases remove-iam-policy-binding come segue:

    gcloud spanner databases remove-iam-policy-binding DATABASE_NAME \
    --instance=INSTANCE_NAME \
    --role=ROLE_NAME \
    --member=MEMBER_NAME \
    --condition=CONDITION
    
    • MEMBER_NAME è l'identificatore della entità. Deve essere nel formato user|group|serviceAccount:email o domain:domain.

    • CONDITION è un'espressione della condizione IAM che specifica i ruoli da concedere all'entità.

      CONDITION ha il seguente formato:

      --condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/ROLE1") || resource.name.endsWith("/ROLE2"))),title=TITLE,description=DESCRIPTION'
      

      L'intera specifica della condizione deve corrispondere esattamente alla specifica della condizione utilizzata nel comando che ha concesso l'autorizzazione, inclusi titolo e descrizione.

Informazioni dettagliate