Controlla l'accesso con le condizioni IAM
Questo documento descrive come utilizzare le condizioni IAM per controllare l'accesso alle risorse BigQuery.
Le condizioni IAM consentono di concedere l'accesso alle risorse BigQuery solo se sono soddisfatte le condizioni specificate. Ad esempio, puoi concedere l'accesso a una risorsa per una durata limitata o periodicamente per determinate ore della giornata. Le condizioni IAM sono supportate a livello di progetto, cartella e organizzazione e possono essere applicate a set di dati, tabelle, routine e modelli di BigQuery.
Le condizioni IAM sono utili per concedere contemporaneamente le autorizzazioni Identity and Access Management (IAM) a molte risorse correlate, comprese quelle che non esistono ancora. Per concedere autorizzazioni a gruppi non correlati di risorse BigQuery, valuta l'utilizzo dei tag IAM.
Prima di iniziare
Abilita l'API IAM e concedi i ruoli IAM che concedono agli utenti le autorizzazioni necessarie per eseguire ogni attività in questo documento.
Abilita l'API IAM
Per abilitare l'API IAM, seleziona una delle seguenti opzioni:
Console
Vai alla pagina dell'API Identity and Access Management (IAM) e abilita l'API.
gcloud
Esegui il comando gcloud services enable
:
gcloud services enable iam.googleapis.com
Autorizzazioni obbligatorie
Per ottenere l'autorizzazione necessaria per
applicare condizioni IAM alle risorse BigQuery,
chiedi all'amministratore di concederti il ruolo IAM
Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin
).
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Questo ruolo predefinito contiene l'autorizzazione resourcemanager.projects.setIamPolicy
, necessaria per applicare condizioni IAM alle risorse BigQuery.
Potresti anche essere in grado di ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Se prevedi di utilizzare le condizioni IAM nella tua organizzazione, devi avere anche le autorizzazioni per gestire i criteri dell'organizzazione.Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.
Attributi condizione
Puoi impostare le condizioni IAM sulle risorse BigQuery in base ai seguenti attributi:
request.time
: l'ora in cui l'utente tenta di accedere a una risorsa BigQuery. Per maggiori dettagli ed esempi, vedi Attributo data/ora.resource.name
: il percorso della risorsa BigQuery. Per il formato, consulta le tabelle in Formati degli attributi.resource.type
: il tipo di risorsa BigQuery. Per il formato, consulta le tabelle in Formati degli attributi.resource.service
: il servizio Google Cloud utilizzato dalla risorsa BigQuery. Per il formato, consulta le tabelle in Formati degli attributi.
Formati degli attributi
Quando crei condizioni per i set di dati BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Dataset |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID |
resource.service |
bigquery.googleapis.com |
Quando crei condizioni per le tabelle BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Table |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID |
resource.service |
bigquery.googleapis.com |
Quando crei le condizioni per le routine BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Routine |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/routines/ROUTINE_ID |
resource.service |
bigquery.googleapis.com |
Quando crei condizioni per i modelli BigQuery, utilizza i seguenti formati:
Attributo | Valore |
---|---|
resource.type |
bigquery.googleapis.com/Model |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/models/MODEL_ID |
resource.service |
bigquery.googleapis.com |
Sostituisci quanto segue:
PROJECT_ID
: l'ID del progetto che contiene le risorse a cui stai concedendo l'accessoDATASET_ID
: l'ID del set di dati a cui concedi l'accessoTABLE_ID
: l'ID della tabella a cui concedi l'accessoROUTINE_ID
: l'ID della routine a cui concedi l'accessoMODEL_ID
: l'ID del modello a cui concedi l'accesso
Aggiungi condizioni a una risorsa
Per aggiungere una condizione a un set di dati, una tabella, una routine o un modello in BigQuery, consulta Consentire criteri con condizioni. Quando crei le condizioni, fai riferimento alle tabelle dei formati degli attributi.
Best practice per le condizioni
Quando crei condizioni in BigQuery, utilizza le seguenti best practice:
- Non utilizzare condizioni negative per
resource.type
,resource.name
oresource.service
, perché i tipi non supportati utilizzano la stringa vuota e soddisfano quasi tutte le condizioni negative. Per ulteriori dettagli, consulta le condizioni negative. - Includi
resource.type
,resource.name
eresource.service
nella tua condizione, anche quando questo livello di specificità non è necessario. Questa pratica aiuta a sostenere le tue condizioni mentre le risorse nel tuo flusso di lavoro cambiano in modo che altre risorse non vengano incluse involontariamente in futuro. - Quando concedi le autorizzazioni, includi il numero minimo di autorizzazioni possibile per assicurarti di non concedere involontariamente un accesso troppo permissivo.
- Fai attenzione quando utilizzi la frase
resource.name.startsWith
nella condizione, poiché i percorsi delle tabelle BigQuery sono preceduti dal relativo ID progetto principale e ID set di dati. Condizioni non sufficientemente specifiche potrebbero concedere un accesso eccessivamente permissivo. Tuttavia, la fraseresource.name.startsWith
è utile se vuoi offrire agli utenti la possibilità di eseguire query con caratteri jolly. Ad esempio, la condizioneresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")
consente agli utenti di eseguire la querySELECT * FROM my_dataset.table_prefix*
. - Non aggiungere condizioni per risorse BigQuery diverse da set di dati, tabelle, routine e modelli.
- Assicurati di concedere le autorizzazioni corrette sulla risorsa corretta. Ad esempio, l'autorizzazione per elencare le risorse (
bigquery.RESOURCE.list
) deve essere concessa a livello di padre, mentre l'autorizzazione per creare risorse (bigquery.RESOURCE.create
) deve essere concessa a livello di risorsa. L'eliminazione del set di dati, in cui vengono eliminate anche tutte le risorse contenute, richiede autorizzazioni di eliminazione di tabelle, modelli e routine sul set di dati. - Tieni presente che gli snapshot delle tabelle e i viaggi nel tempo non hanno alcun effetto sulle autorizzazioni.
Condizioni negative
Condizioni negative come resource.name != resource
possono concedere inavvertitamente
un accesso eccessivamente permissivo. Le risorse BigQuery non supportate hanno attributi di risorsa vuoti, ovvero soddisfano tutte le condizioni negative. Anche le risorse in servizi esterni a BigQuery potrebbero corrispondere a condizioni negative.
Inoltre, condizioni negative creano problemi quando gli utenti eseguono query con caratteri jolly. Ad esempio, considera la condizione negativa
resource.name != /projects/my_project/datasets/my_dataset/tables/secret
. Questa condizione sembra concedere l'accesso a tutte le risorse, ad eccezione di una tabella denominata secret
. Tuttavia, l'utente sarà comunque in grado di eseguire query sulla tabella utilizzando una query con caratteri jolly, come SELECT * from my_project.my_dataset.secre*;
.
Inoltre, condizioni negative su tabelle, routine e modelli potrebbero concedere un accesso eccessivamente permissivo ai set di dati padre. Gli utenti potrebbero quindi essere in grado di eliminare queste risorse perché le autorizzazioni di eliminazione sono gestite a livello del set di dati.
Limitazioni
- Non puoi aggiungere concessioni di visualizzazioni autorizzate o routine autorizzate con le condizioni IAM.
- Quando un utente ha accesso condizionale a un set di dati o a una tabella, non può modificare le autorizzazioni per la risorsa tramite la console Google Cloud. Sono supportati solo l'API e lo strumento bq.
- Controllo dell'accesso a livello di riga e colonna non è supportato direttamente tramite le condizioni IAM. Tuttavia, un utente con accesso condizionale può concedere a sé stesso il ruolo Amministratore BigQuery (
roles/bigquery.admin
) nella tabella e poi modificare i criteri di accesso a righe e colonne. - L'applicazione delle modifiche ai criteri IAM può richiedere fino a cinque minuti.
- Gli utenti con accesso condizionale potrebbero non essere in grado di eseguire query su
INFORMATION_SCHEMA
viste.
Esempi
Di seguito sono riportati alcuni esempi di casi d'uso per le condizioni IAM in BigQuery.
Concedere l'accesso in lettura a una tabella specifica
Questo esempio concede a [email protected]
il ruolo Visualizzatore dati BigQuery
per la tabella table_1
nel set di dati dataset_1
. Con questo ruolo, l'utente può eseguire query sulla tabella e accedervi tramite lo strumento bq. L'utente non può visualizzare la tabella nella console Google Cloud perché non dispone dell'autorizzazione bigquery.tables.list
per il set di dati.
{ "members": [[email protected]], "role": roles/bigquery.dataViewer, "condition": { "title": "Table dataset_1.table_1", "description": "Allowed to read table with name table_1 in dataset_1 dataset", "expression": resource.name == projects/project_1/datasets/dataset_1/tables/table_1 && resource.type == bigquery.googleapis.com/Table } }
Concedi l'accesso in elenco a un set di dati specifico
Questo esempio concede a [email protected]
il ruolo Visualizzatore metadati BigQuery nel set di dati dataset_2
. Con questo ruolo l'utente può elencare tutte le risorse nel set di dati, ma non può eseguire query su queste risorse.
{ "members": [[email protected]], "role": roles/bigquery.metadataViewer, "condition": { "title": "Dataset dataset_2", "description": "Allowed to list resources in dataset_2 dataset", "expression": resource.name == projects/project_2/datasets/dataset_2 && resource.type == bigquery.googleapis.com/Dataset } }
Concedi l'accesso come proprietario a tutte le tabelle in tutti i set di dati con un prefisso specifico
Questo esempio concede a [email protected]
il ruolo Proprietario dati BigQuery
in tutte le tabelle di tutti i set di dati che iniziano con il prefisso public_
:
{ "members": [[email protected]], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables public_", "description": "Allowed owner access to tables in datasets with public_ prefix", "expression": resource.name.startsWith("projects/project_3/datasets/public_") && resource.type == bigquery.googleapis.com/Table } }
Concedi l'accesso come proprietario a tutte le tabelle, i modelli e le routine in tutti i set di dati che hanno un prefisso specifico
Questo esempio concede a [email protected]
il ruolo Proprietario dati BigQuery su tutte le tabelle, i modelli e le routine in tutti i set di dati che iniziano con il prefisso general_
:
{ "members": [[email protected]], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables general_", "description": "Allowed owner access to tables in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Table } }, { "members": [[email protected]], "role": roles/bigquery.dataOwner, "condition": { "title": "Models general_", "description": "Allowed owner access to models in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Model } }, { "members": [[email protected]], "role": roles/bigquery.dataOwner, "condition": { "title": "Routines general_", "description": "Allowed owner access to routines in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Routine } }
Passaggi successivi
- Scopri di più sulla configurazione dell'accesso temporaneo utilizzando le condizioni IAM.
- Scopri di più sulla configurazione dell'accesso basato sulle risorse utilizzando le condizioni IAM.