Controlla l'accesso con le condizioni IAM

Questo documento descrive come utilizzare Condizioni IAM per controllare l'accesso a di risorse BigQuery.

Le condizioni IAM consentono di concedere l'accesso a BigQuery solo se sono soddisfatte determinate condizioni. Ad esempio, puoi concedere a una risorsa per un periodo limitato o periodicamente per determinate ore durante la giornata. Le condizioni IAM sono supportate a livello di progetto, cartella a livello di organizzazione e può essere applicata a set di dati BigQuery, tabelle, routine e modelli.

Le condizioni IAM sono utili per concedere Identity and Access Management (IAM) autorizzazioni per molte risorse correlate contemporaneamente, incluse le risorse che ancora non esistono. Per concedere le autorizzazioni a gruppi non correlati di di risorse BigQuery, valuta l'utilizzo Tag IAM.

Prima di iniziare

Abilita l'API IAM e concedi i ruoli IAM che concedi agli utenti le autorizzazioni necessarie per eseguire ciascuna 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 il API.

Abilitare l'API

gcloud

Esegui il comando gcloud services enable:

gcloud services enable iam.googleapis.com

Autorizzazioni obbligatorie

Per ottenere l'autorizzazione necessaria applicare condizioni IAM alle risorse BigQuery, chiedi all'amministratore di concederti Ruolo IAM Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin). Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene resourcemanager.projects.setIamPolicy, che è obbligatorio per e applicare condizioni IAM alle risorse BigQuery.

Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati e altri ruoli predefiniti.

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

Per ulteriori informazioni su ruoli e autorizzazioni IAM in per BigQuery, consulta Introduzione a IAM.

Attributi della condizione

Puoi impostare condizioni IAM su risorse BigQuery, in base ai seguenti attributi:

  • request.time: l'ora in cui l'utente tenta di accedere a un Risorsa BigQuery. Per ulteriori dettagli ed esempi, consulta Attributo data/ora.
  • resource.name: il percorso della risorsa BigQuery. Per consulta le tabelle in Formati degli attributi.
  • resource.type: tipo di risorsa BigQuery. Per consulta le tabelle in Formati degli attributi.
  • resource.service: il servizio Google Cloud che BigQuery gli utilizzi delle risorse. Per il formato, vedi le tabelle in Formati degli attributi.
  • resource.tags: i tag associati a BigQuery risorsa. I tag sono supportati solo sulle risorse delle tabelle e dei set di dati BigQuery. Per il formato, vedi le tabelle in Formati degli attributi e nella documentazione IAM.

Formati attributi

Quando crei le condizioni per i set di dati BigQuery, utilizza 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 la sezione Tag delle risorse.

Quando crei le condizioni per le tabelle BigQuery, utilizza quanto segue 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 la sezione Tag delle risorse.

Quando crei le condizioni per le routine BigQuery, utilizza il metodo 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 le condizioni per i modelli BigQuery, utilizza quanto segue 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 la alle risorse a cui concedi l'accesso
  • DATASET_ID: l'ID del set di dati che ti trovi concedere l'accesso a
  • TABLE_ID: l'ID della tabella che stai concedere l'accesso a
  • ROUTINE_ID: l'ID della tua routine concedere l'accesso a
  • MODEL_ID: l'ID del modello che stai concedere l'accesso a

Aggiungi condizioni a una risorsa

Per aggiungere una condizione a un set di dati, una tabella, una routine o un modello in per BigQuery, consulta Consenti criteri con condizioni. Quando crei le condizioni, fai riferimento tabelle del formato degli attributi.

Best practice per le condizioni

Quando crei condizioni in BigQuery, utilizza le seguenti best pratiche:

  • Non utilizzare condizioni escluse per resource.type, resource.name o resource.service, perché i tipi non supportati utilizzano la stringa vuota e corrispondono quasi tutte le condizioni negative. Per ulteriori dettagli, vedi condizioni negative.
  • Includi resource.type, resource.name e resource.service nel tuo anche quando questo livello di specificità non è necessario. Questa prassi aiuta a sostenere le condizioni mentre le risorse nel flusso di lavoro cambiano, non verranno incluse involontariamente in futuro.
  • Quando concedi le autorizzazioni, includi l'insieme più ristretto possibile di autorizzazioni per assicurarti di non concedere involontariamente accessi troppo permissivi.
  • Fai attenzione quando utilizzi la frase resource.name.startsWith nella tua condizione, poiché i percorsi delle tabelle BigQuery sono preceduti dal relativo ID progetto padre. e l'ID del set di dati. Potrebbero essere soddisfatte condizioni non sufficientemente specifiche o un accesso eccessivamente permissivo. Tuttavia, la frase resource.name.startsWith è è utile se vuoi offrire agli utenti la possibilità di eseguire query con caratteri jolly. Per ad esempio, 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, routine e modelli.
  • Verifica di concedere le autorizzazioni corrette sul risorsa. Ad esempio, l'autorizzazione a elencare le risorse (bigquery.RESOURCE.list) deve essere concessa dall'entità principale ma l'autorizzazione per eliminare le risorse (bigquery.RESOURCE.delete) deve essere concesso al a livello di risorsa. Eliminazione del set di dati, in cui tutte le risorse contenute vengono eliminate, richiedono le autorizzazioni di eliminazione di tabelle, modelli e routine del set di dati.
  • Tieni presente che gli snapshot delle tabelle e viaggio nel tempo non ha alcun effetto sulle autorizzazioni.

Condizioni negative

Condizioni negative come resource.name != resource possono concedere inavvertitamente o un accesso eccessivamente permissivo. Le risorse BigQuery non supportate hanno di risorse vuoti, ovvero corrispondono a tutte le condizioni negative. Risorse nei servizi esterni a BigQuery potrebbero corrispondere a condizioni negative .

Inoltre, le 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. Questo sembra concedere l'accesso a tutte le risorse, ad eccezione di una tabella denominata secret. Tuttavia, l'utente può comunque eseguire query sulla tabella utilizzando un carattere jolly come SELECT * from my_project.my_dataset.secre*;.

Inoltre, le condizioni negative su tabelle, routine e modelli potrebbero dare origine un accesso permissivo ai loro set di dati padre. Gli utenti potrebbero quindi essere in grado di eliminare perché le autorizzazioni di eliminazione sono gestite a livello del set di dati.

Limitazioni

  • Non puoi aggiungere concessioni di visualizzazione autorizzata, routine autorizzata o set di dati autorizzato con condizioni IAM.
  • Quando un utente ha accesso condizionale a un set di dati o a una tabella, non può modificare autorizzazioni alla risorsa tramite la console Google Cloud. Solo il Sono supportati lo strumento bq e l'API.
  • Controllo dell'accesso a livello di riga e di colonna non è supportato direttamente tramite Condizioni IAM. Tuttavia, un utente con accesso condizionale può concedere il ruolo Amministratore BigQuery (roles/bigquery.admin) nella tabella e e modificare i criteri di accesso a righe e colonne.
  • L'applicazione delle modifiche ai criteri IAM può richiedere fino a cinque minuti effetto.
  • Gli utenti con accesso condizionale potrebbero non essere in grado di eseguire query INFORMATION_SCHEMA visualizzazioni.
  • Gli utenti con solo accesso condizionale alla tabella non possono eseguire funzioni con caratteri jolly nelle tabelle.

Esempi

Di seguito sono riportati alcuni esempi di casi d'uso per le condizioni IAM in: in BigQuery.

Concedi l'accesso in lettura a una tabella specifica

Questo esempio concede 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 una query sulla tabella e accedervi tramite lo strumento bq. L'utente non può visualizzare nella console Google Cloud perché non hanno 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
  }
}

Concedi l'accesso all'elenco di dati per un set di dati specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il visualizzatore di metadati BigQuery nel set di dati dataset_2. Con questo ruolo, l'utente può elencare tutte le risorse nel set di dati, ma non possono 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 in tutti i set di dati con un prefisso specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il ruolo di Proprietario dati BigQuery su tutte le tabelle in 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 al proprietario l'accesso a tutte le tabelle, i modelli e le routine in tutti i set di dati che hanno un prefisso specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il ruolo di Proprietario dati BigQuery su tutte le tabelle, i modelli e le routine in tutti i set di dati che iniziano con 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