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 ti 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 del giorno. Le condizioni IAM sono supportate a livello di progetto, cartella e organizzazione e possono essere applicate a set di dati, tabelle, viste, routine e modelli BigQuery.

Le condizioni IAM sono utili per concedere contemporaneamente autorizzazioni di Identity and Access Management (IAM) a molte risorse correlate, incluse quelle che non esistono ancora. Per concedere le autorizzazioni a gruppi non correlati di risorse BigQuery, ti consigliamo di utilizzare i tag IAM.

Prima di iniziare

Attiva l'API IAM e concedi i ruoli IAM che forniscono agli utenti le autorizzazioni necessarie per eseguire ogni attività in questo documento.

Abilita l'API IAM

Per attivare l'API IAM, seleziona una delle seguenti opzioni:

Console

Vai alla pagina API Identity and Access Management (IAM) e attiva l'API.

Abilitare l'API

gcloud

Esegui il comando gcloud services enable:

gcloud services enable iam.googleapis.com

Autorizzazioni obbligatorie

Per ottenere l'autorizzazione necessaria per applicare le condizioni IAM alle risorse BigQuery, chiedi all'amministratore di concederti il ruolo IAM Amministratore IAM del progetto (roles/resourcemanager.projectIamAdmin). Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene l'autorizzazione resourcemanager.projects.setIamPolicy necessaria per applicare le condizioni IAM alle risorse BigQuery.

Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.

Se prevedi di utilizzare le condizioni IAM nella tua organizzazione, devi disporre anche delle autorizzazioni per gestire i criteri dell'organizzazione.

Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.

Attributi condizione

Puoi impostare 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 ulteriori dettagli ed esempi, consulta 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.
  • resource.tags: i tag associati alla risorsa BigQuery. I tag sono supportati solo nelle risorse di set di dati, tabelle e viste BigQuery. Per il formato, consulta le tabelle in Formati degli attributi e nella documentazione di IAM.

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
resource.tags Supporta hasTagKey, hasTagKeyId, matchTag e matchTagId. Per ulteriori informazioni, consulta Tag delle risorse.

Quando crei condizioni per le tabelle e le viste 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
resource.tags Supporta hasTagKey, hasTagKeyId, matchTag e matchTagId. Per ulteriori informazioni, consulta Tag delle risorse.

Quando crei 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'accesso
  • DATASET_ID: l'ID del set di dati a cui stai concedendo l'accesso
  • TABLE_ID: l'ID della tabella o della vista a cui stai concedendo l'accesso
  • ROUTINE_ID: l'ID della routine a cui stai concedendo l'accesso
  • MODEL_ID: l'ID del modello a cui stai concedendo l'accesso

Aggiungere condizioni a una risorsa

Per aggiungere una condizione a un set di dati, una tabella, una vista, 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 o resource.service, perché i tipi non supportati utilizzano la stringa vuota e corrispondono a quasi tutte le condizioni negative. Per maggiori dettagli, consulta Condizioni negative.
  • Includi resource.type, resource.name e resource.service nella condizione, anche se questo livello di specificità non è necessario. Questa prassi contribuisce a mantenere le condizioni man mano che le risorse nel flusso di lavoro cambiano, in modo che altre risorse non vengano incluse involontariamente in futuro.
  • Quando concedi le autorizzazioni, includi il set più limitato possibile per assicurarti di non concedere involontariamente un accesso eccessivamente permissivo.
  • Usa resource.name.startsWith con cautela. I percorsi delle tabelle e delle visualizzazioni BigQuery sono preceduti dall'ID progetto e dall'ID set di dati principali. Condizioni non sufficientemente specifiche potrebbero concedere troppo accesso. Tuttavia, puoi utilizzare l'attributo resource.name.startsWith per consentire agli utenti di eseguire query con caratteri jolly sulle tabelle. Ad esempio, l'accesso concesso utilizzando la condizione resource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix") consente agli utenti di eseguire la query SELECT * FROM my_dataset.table_prefix*.
  • Non aggiungere condizioni per risorse BigQuery diverse da set di dati, tabelle, viste, routine e modelli.
  • Verifica di concedere le autorizzazioni corrette alla risorsa corretta. Ad esempio, l'autorizzazione per elencare le risorse (bigquery.RESOURCE.list) deve essere concessa a livello di entità superiore, mentre l'autorizzazione per eliminare le risorse (bigquery.RESOURCE.delete) 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 il viaggio nel tempo non influiscono sulle autorizzazioni.

Condizioni negative

Condizioni negative come resource.name != resource possono concedere inavvertitamente accesso eccessivamente permissivo. Le risorse BigQuery non supportate hanno attributi delle risorse vuoti, il che significa che corrispondono a tutte le condizioni negative. Le risorse nei servizi esterni a BigQuery possono corrispondere anche a condizioni negative.

Inoltre, le condizioni negative creano problemi quando gli utenti eseguono query con caratteri jolly. Ad esempio, prendi in considerazione 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 può comunque eseguire query su questa tabella utilizzando una query con caratteri jolly, ad esempio SELECT * from my_project.my_dataset.secre*;.

Inoltre, le condizioni negative su tabelle, routine e modelli potrebbero consentire un accesso eccessivamente permissivo ai set di dati principali. Gli utenti potrebbero quindi essere in grado di eliminare queste risorse perché le autorizzazioni di eliminazione vengono gestite a livello di set di dati.

Limitazioni

  • Non puoi aggiungere concessioni di visualizzazioni autorizzate, routine autorizzate o set di dati autorizzati con le condizioni IAM.
  • Gli utenti con accesso condizionale a un set di dati o a una tabella non possono modificare le autorizzazioni per la risorsa tramite la console Google Cloud. Le modifiche alle autorizzazioni sono supportate solo tramite lo strumento bq e l'API BigQuery.
  • Controllo dell'accesso a livello di riga e a livello di colonna non è supportato direttamente tramite le condizioni IAM. Tuttavia, un utente con accesso condizionale può assegnare a se stesso il ruolo Amministratore BigQuery (roles/bigquery.admin) sulla 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 sulle visualizzazioni INFORMATION_SCHEMA.
  • Gli utenti con accesso solo alle tabelle con condizioni non possono eseguire le funzioni con caratteri jolly per le tabelle.

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 assegna a cloudysanfrancisco@gmail.com 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": [cloudysanfrancisco@gmail.com],
  "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
  }
}

Concedere l'accesso in elenco a un set di dati specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il ruolo Visualizzatore metadati BigQuery sul 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": [cloudysanfrancisco@gmail.com],
  "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 di tutti i set di dati con un prefisso specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il ruolo Proprietario dati BigQuery su tutte le tabelle di tutti i set di dati che iniziano con il prefisso public_:

{
  "members": [cloudysanfrancisco@gmail.com],
  "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 con un prefisso specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il ruolo Proprietario dati BigQuery su tutte le tabelle, i modelli e le routine di tutti i set di dati che iniziano con il prefisso general_:

{
  "members": [cloudysanfrancisco@gmail.com],
  "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": [cloudysanfrancisco@gmail.com],
  "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": [cloudysanfrancisco@gmail.com],
  "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