Utilizza la sicurezza a livello di riga
Questo documento spiega come utilizzare la sicurezza a livello di riga in BigQuery per limitare l'accesso ai dati a livello di riga della tabella. Prima di leggere questo documento, per acquisire familiarità con una panoramica sulla sicurezza a livello di riga, consulta Introduzione alla sicurezza a livello di riga di BigQuery.
Con i criteri di accesso a livello di riga puoi eseguire le attività seguenti:
- Crea o aggiorna un criterio di accesso a livello di riga su una tavola
- Combinare i criteri di accesso a livello di riga su una tavola
- Elencare i criteri di accesso a livello di riga di una tabella
- Elimina un criterio di accesso a livello di riga da un tavola
- Eseguire query su una tabella con un criterio di accesso a livello di riga
Prima di iniziare
Concede ruoli IAM (Identity and Access Management) che concedono agli utenti le autorizzazioni necessarie per eseguire ciascuna attività in questo documento. Le autorizzazioni necessarie per eseguire sono elencate nella sezione "Autorizzazioni obbligatorie" dell'attività.
Crea o aggiorna un criterio di accesso a livello di riga
Puoi creare o aggiornare un criterio di accesso a livello di riga in una tabella BigQuery con un'istruzione DDL (Data Definition Language).
Autorizzazioni obbligatorie
Per creare un criterio di accesso a livello di riga in una tabella BigQuery, devi: le seguenti autorizzazioni IAM:
bigquery.rowAccessPolicies.create
bigquery.rowAccessPolicies.setIamPolicy
bigquery.tables.getData
(nella tabella di destinazione e in eventuali tabelle di riferimento in criteri di accesso a livello di riga per le sottoquery autorizzati)bigquery.jobs.create
(per eseguire il job di query DDL)
Per aggiornare un criterio di accesso a livello di riga in una tabella BigQuery, devi: le seguenti autorizzazioni IAM:
bigquery.rowAccessPolicies.update
bigquery.rowAccessPolicies.setIamPolicy
bigquery.tables.getData
(nella tabella di destinazione e in eventuali tabelle di riferimento in criteri di accesso a livello di riga per le sottoquery autorizzati)bigquery.jobs.create
(per eseguire il job di query DDL)
Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per creare e aggiornare un accesso a livello di riga norme:
roles/bigquery.admin
roles/bigquery.dataOwner
Il ruolo bigquery.filteredDataViewer
Quando crei correttamente un criterio di accesso a livello di riga,
concede automaticamente il ruolo bigquery.filteredDataViewer
ai membri del
dell'elenco dei beneficiari. Il ruolo bigquery.filteredDataViewer
consente di
visualizza le righe definite dall'espressione di filtro del criterio. Quando
elencare i criteri di accesso a livello di riga di una tabella
Nella console Google Cloud, il ruolo viene visualizzato
in associazione con i membri
dell'elenco dei beneficiari del criterio.
Vedi le nostre
Best practice per la sicurezza a livello di riga
quando si utilizza il ruolo bigquery.filteredDataViewer
con IAM.
Per ulteriori informazioni su ruoli e autorizzazioni IAM in per BigQuery, consulta Ruoli e autorizzazioni predefiniti.
Crea o aggiorna i criteri di accesso a livello di riga
Per creare o aggiornare un criterio di accesso a livello di riga, utilizza uno dei seguenti metodi Istruzioni DDL:
L'
CREATE ROW ACCESS POLICY
crea un nuovo criterio di accesso a livello di riga.L'istruzione
CREATE ROW ACCESS POLICY IF NOT EXISTS
crea un nuovo livello di riga criterio di accesso, se un criterio di accesso a livello di riga con lo stesso nome non esistono già nella tabella specificata.L'istruzione
CREATE OR REPLACE ROW ACCESS POLICY
aggiorna un modello esistente criterio di accesso a livello di riga con lo stesso nome nella tabella specificata.
Esempi
Crea un nuovo criterio di accesso alle righe. L'accesso alla tabella è limitato ai
utente abc@example.com
. Solo le righe in cui region = 'APAC'
sono
visibile:
CREATE ROW ACCESS POLICY apac_filter ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (region = 'APAC');
Aggiorna il criterio di accesso in modo che venga applicato all'account di servizio example@exampleproject.iam.gserviceaccount.com
:
CREATE OR REPLACE ROW ACCESS POLICY apac_filter ON project.dataset.my_table GRANT TO ('serviceAccount:example@exampleproject.iam.gserviceaccount.com') FILTER USING (region = 'APAC');
Crea un criterio di accesso alle righe che concede l'accesso a un utente e a due gruppi:
CREATE ROW ACCESS POLICY sales_us_filter ON project.dataset.my_table GRANT TO ('user:john@example.com', 'group:sales-us@example.com', 'group:sales-managers@example.com') FILTER USING (region = 'US');
Crea un criterio di accesso alle righe con allAuthenticatedUsers
come beneficiari:
CREATE ROW ACCESS POLICY us_filter ON project.dataset.my_table GRANT TO ('allAuthenticatedUsers') FILTER USING (region = 'US');
Crea un criterio di accesso alle righe con un filtro basato sull'utente corrente:
CREATE ROW ACCESS POLICY my_row_filter ON dataset.my_table GRANT TO ('domain:example.com') FILTER USING (email = SESSION_USER());
Crea un criterio di accesso alle righe con un filtro su una colonna con un
Tipo di ARRAY
:
CREATE ROW ACCESS POLICY my_reports_filter ON project.dataset.my_table GRANT TO ('domain:example.com') FILTER USING (SESSION_USER() IN UNNEST(reporting_chain));
Crea un criterio di accesso alle righe con una sottoquery per sostituire più criteri con confronto tra regioni semplici configurato per utente:
Per fornire feedback o richiedere assistenza in merito a questa funzione, invia un'email a bigquery-row-level-security-support@google.com.Considera la seguente tabella, lookup_table
:
+-----------------+--------------+ | email | region | +-----------------+--------------+ | xyz@example.com | europe-west1 | | abc@example.com | us-west1 | | abc@example.com | us-west2 | +-----------------+--------------+
CREATE OR REPLACE ROW ACCESS POLICY apac_filter ON project.dataset.my_table GRANT TO ('domain:example.com') FILTER USING (region IN ( SELECT region FROM lookup_table WHERE email = SESSION_USER()));
L'utilizzo della sottoquery su lookup_table
ti consente di evitare di creare accesso a più righe
criteri. Ad esempio, l'istruzione precedente restituisce lo stesso risultato dell'istruzione
con meno query:
CREATE OR REPLACE ROW ACCESS POLICY apac_filter ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (region = 'us-west1'); CREATE OR REPLACE ROW ACCESS POLICY apac_filter ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (region IN 'us-west1', 'us-west2'); CREATE OR REPLACE ROW ACCESS POLICY apac_filter ON project.dataset.my_table GRANT TO ('user:xyz@example.com') FILTER USING (region = 'europe-west1');
Per ulteriori informazioni sulla sintassi e sulle opzioni disponibili, consulta
CREATE ROW ACCESS POLICY
Istruzione DDL
riferimento.
Combinare i criteri di accesso a livello di riga
Se due o più criteri di accesso a livello di riga concedono a un utente o a un gruppo l'accesso al
nella stessa tabella, l'utente o il gruppo ha accesso a tutti i dati coperti da qualsiasi
delle norme.
Ad esempio, i seguenti criteri concedono all'utente
Accesso di abc@example.com
alle righe specificate nella tabella my_table
:
CREATE ROW ACCESS POLICY shoes ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (product_category = 'shoes');
CREATE OR REPLACE ROW ACCESS POLICY blue_products ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (color = 'blue');
Nell'esempio precedente, l'utente abc@example.com
ha accesso alle righe
nella tabella my_table
con il campo product_category
impostato su shoes
e abc@example.com
ha anche accesso alle righe con il campo color
impostato su blue
.
Ad esempio, abc@example.com
può accedere alle righe con informazioni
su scarpe rosse e auto blu.
Questo accesso è equivalente a quello fornito dalla seguente singola criterio di accesso a livello di riga:
CREATE ROW ACCESS POLICY shoes_and_blue_products ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (product_category = 'shoes' OR color = 'blue');
D'altra parte, per specificare un accesso che dipende da più
che la condizione sia vera, utilizza un filtro
con un operatore AND
. Ad esempio, il seguente criterio di accesso a livello di riga
concede a abc@example.com
l'accesso solo alle righe che hanno sia il
Campo product_category
impostato su shoes
e campo color
impostato su blue
:
CREATE ROW ACCESS POLICY blue_shoes ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (product_category = 'shoes' AND color = 'blue');
Con il criterio di accesso a livello di riga precedente, abc@example.com
sarebbe in grado di:
accedere alle informazioni sulle scarpe blu, ma non su scarpe rosse o auto blu.
Elenca i criteri di accesso a livello di riga della tabella
Puoi elencare e visualizzare tutti i criteri di accesso a livello di riga in una tabella
utilizzando la console Google Cloud, lo strumento a riga di comando bq o l'API RowAccessPolicies.List
.
Autorizzazioni obbligatorie
Per elencare i criteri di accesso a livello di riga in una tabella BigQuery, è necessario
l'autorizzazione IAM bigquery.rowAccessPolicies.list
.
Per visualizzare i membri di un criterio di accesso a livello di riga su un ambiente BigQuery:
devi avere la classe IAM bigquery.rowAccessPolicies.getIamPolicy
autorizzazione.
Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per elencare e visualizzare i criteri di accesso a livello di riga:
roles/bigquery.admin
roles/bigquery.dataOwner
Per ulteriori informazioni su ruoli e autorizzazioni IAM in per BigQuery, consulta Ruoli e autorizzazioni predefiniti.
Elenca i criteri di accesso a livello di riga della tabella
Per elencare i criteri di accesso a livello di riga:
Console
Per visualizzare i criteri di accesso a livello di riga, vai alla pagina di BigQuery nella console Google Cloud.
Fai clic sul nome della tabella per visualizzarne i dettagli, poi fai clic su Visualizza i criteri di accesso alle righe.
Quando si apre il riquadro Criteri di accesso alle righe, viene visualizzato un elenco di tutti i criteri di accesso a livello di riga nella tabella, per nome e
filter_expression
per ogni criterio.Per visualizzare tutti i ruoli e gli utenti interessati da un criterio di accesso a livello di riga: Fai clic su VISUALIZZA accanto alla norma. Ad esempio, nell'immagine di seguito, puoi nel riquadro Visualizza autorizzazioni, vedrai che i membri dell'elenco dei beneficiari hanno il ruolo
bigquery.filteredDataViewer
.
bq
Inserisci il comando bq ls
e fornisci il flag --row_access_policies
.
I nomi del set di dati e della tabella sono obbligatori.
bq ls --row_access_policies dataset.table
Ad esempio, il seguente comando elenca informazioni sull'impostazione
criteri di accesso su una tabella denominata my_table
in un set di dati con ID
my_dataset
:
bq ls --row_access_policies my_dataset.my_table
API
Utilizza la
Metodo RowAccessPolicies.List
nella sezione di riferimento dell'API REST.
Elimina criteri di accesso a livello di riga
Puoi eliminare uno o tutti i criteri di accesso a livello di riga in una tabella utilizzando un DDL se disponi delle autorizzazioni necessarie.
Autorizzazioni obbligatorie
Per eliminare un criterio di accesso a livello di riga, devi disporre dei seguenti IAM autorizzazioni:
bigquery.rowAccessPolicies.delete
bigquery.rowAccessPolicies.setIamPolicy
bigquery.jobs.create
(per eseguire il job di query DDL)
Per eliminare contemporaneamente tutti i criteri di accesso a livello di riga in una tabella, le seguenti autorizzazioni IAM:
bigquery.rowAccessPolicies.delete
bigquery.rowAccessPolicies.setIamPolicy
bigquery.rowAccessPolicies.list
bigquery.jobs.create
(per eseguire il job di query DDL)
Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per eliminare i criteri di accesso a livello di riga:
roles/bigquery.admin
roles/bigquery.dataOwner
Per ulteriori informazioni su ruoli e autorizzazioni IAM in per BigQuery, consulta Ruoli e autorizzazioni predefiniti.
Elimina criteri di accesso a livello di riga
Per eliminare un criterio di accesso alle righe da una tabella, utilizza quanto segue Istruzioni DDL:
L'istruzione
DROP ROW ACCESS POLICY
elimina un criterio di accesso a livello di riga su della tabella specificata.L'istruzione
DROP ROW ACCESS POLICY IF EXISTS
elimina un accesso a livello di riga se il criterio di accesso alle righe esiste nella tabella specificata.L'istruzione
DROP ALL ROW ACCESS POLICIES
elimina tutti gli accessi a livello di riga criteri nella tabella specificata.
Esempi
Elimina un criterio di accesso a livello di riga da una tabella:
DROP ROW ACCESS POLICY my_row_filter ON project.dataset.my_table;
Elimina tutti i criteri di accesso a livello di riga da una tabella:
DROP ALL ROW ACCESS POLICIES ON project.dataset.my_table;
Per ulteriori informazioni sull'eliminazione di un criterio di accesso a livello di riga, consulta
DROP ROW ACCESS POLICY
Istruzione DDL
riferimento.
Query su tabelle con criteri di accesso alle righe
Un utente deve prima avere accesso a una tabella BigQuery per poter
possono eseguire query, anche se si trovano nella sezione grantee_list
di un criterio di accesso alle righe
quella tabella. Senza questa autorizzazione, la query non va a buon fine e restituisce un errore access
denied
.
Autorizzazioni obbligatorie
Per eseguire query su una tabella BigQuery con criteri di accesso a livello di riga,
è necessaria l'autorizzazione IAM bigquery.tables.getData
e
Autorizzazione IAM bigquery.rowAccessPolicies.getFilteredData
. Tu
deve disporre dell'autorizzazione IAM bigquery.tables.getData
su tutti
alle tabelle pertinenti.
Per ottenere queste autorizzazioni con i ruoli predefiniti, devi disporre
roles/bigquery.dataViewer
e
roles/bigquery.filteredDataViewer
i ruoli IAM.
Devi disporre dell'autorizzazione datacatalog.categories.fineGrainedGet
su tutti
colonne pertinenti con livello di colonna
sicurezza. Per ottenere questa autorizzazione
con i ruoli predefiniti, devi avere il ruolo datacatalog.categoryFineGrainedReader
.
Visualizza i risultati della query
Nella console Google Cloud, quando esegui una query su una tabella con un criterio di accesso, BigQuery mostra una notifica banner che indica che i risultati possano essere filtrati in base a un criterio di accesso a livello di riga. Questo anche se fai parte dell'elenco dei beneficiari del criterio.
Statistiche job
Quando esegui una query su una tabella con un criterio di accesso a livello di riga utilizzando l'API Job,
BigQuery indica se la query legge eventuali tabelle con
criteri di accesso alle righe nell'oggetto risposta Job
:
Esempio
Questa risposta dell'oggetto Job
è stata troncata per semplicità:
{
"configuration": {
"jobType": "QUERY",
"query": {
"priority": "INTERACTIVE",
"query": "SELECT * FROM dataset.table",
"useLegacySql": false
}
},
...
"statistics": {
...
rowLevelSecurityStatistics: {
rowLevelSecurityApplied: true
},
...
},
"status": {
"state": "DONE"
},
...
}
Passaggi successivi
Per informazioni su come funziona la sicurezza a livello di riga con altri Funzionalità e servizi di BigQuery, consulta Utilizzo della sicurezza a livello di riga con altre funzionalità di BigQuery.
Per informazioni sulle best practice per la sicurezza a livello di riga, vedi Best practice per la sicurezza a livello di riga in BigQuery.