Controlla l'accesso con le condizioni IAM

Le condizioni IAM ti consentono di concedere l'accesso alle risorse BigQuery solo se vengono soddisfatti requisiti specifici, ad esempio per una durata limitata o durante orari pianificati. Puoi applicare l'accesso condizionale a livello di organizzazione, cartella, progetto e set di dati, con policy di autorizzazione ereditate automaticamente dalle risorse secondarie. Per maggiori dettagli, consulta le gerarchie delle risorse.

Queste regole ti aiutano a gestire le autorizzazioni per più risorse correlate contemporaneamente, incluse le risorse future. Per gestire l'accesso a raccolte non correlate di risorse BigQuery, valuta la possibilità di utilizzare i tag di Identity and Access Management (IAM).

Prima di iniziare

  1. Concedi agli utenti i ruoli IAM che contengono le autorizzazioni necessarie per eseguire ogni attività in questo documento.
  2. Abilita l'API IAM.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per applicare le condizioni IAM alle risorse BigQuery, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per applicare le condizioni IAM alle risorse BigQuery. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per applicare le condizioni IAM alle risorse BigQuery sono necessarie le seguenti autorizzazioni:

  • Imposta l'accesso IAM condizionale a livello di progetto: resourcemanager.projects.setIamPolicy
  • Imposta l'accesso IAM condizionale ai set di dati:
    • bigquery.datasets.setIamPolicy
    • bigquery.datasets.update

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Se prevedi di utilizzare le condizioni IAM in tutta l'organizzazione, devi anche disporre delle autorizzazioni per gestire le policy dell'organizzazione.

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

Abilita l'API IAM

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

Console

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

Abilitare l'API

gcloud

Esegui il comando gcloud services enable:

gcloud services enable iam.googleapis.com

Visualizza la policy di accesso condizionale su un set di dati

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.

  3. Nel riquadro Explorer, espandi il progetto, fai clic su Set di dati, quindi seleziona un set di dati.

  4. Fai clic su Condivisione > Autorizzazioni.

  5. Accanto al ruolo associato, fai clic su condizione:TITLE per visualizzare la condizione per quel ruolo.

bq

Per visualizzare o aggiornare le policy di accesso condizionale in Cloud Shell, devi utilizzare Cloud Shell versione 503.0.0 o successiva.

Per ottenere una policy di accesso esistente e restituirla in un file locale in formato JSON, utilizza il comando bq show in Cloud Shell:

bq show --format=prettyjson PROJECT_ID:DATASET > PATH_TO_FILE

Sostituisci quanto segue:

  • PROJECT_ID: il tuo ID progetto
  • DATASET: il nome del set di dati
  • PATH_TO_FILE: il percorso del file JSON sulla tua macchina locale

La proprietà access nel file JSON della risorsa del set di dati contiene la policy di accesso.

API

Per visualizzare la policy di accesso di un set di dati con condizioni, chiama datasets.get con accessPolicyVersion=3 come parametro della richiesta. La proprietà access nella risorsa del set di dati contiene la policy di accesso.

Modifica l'accesso condizionale alle risorse

Le sezioni seguenti descrivono come aggiungere o rimuovere l'accesso condizionale a diverse risorse.

Aggiungi condizioni a un'organizzazione, una cartella o un progetto

Per aggiungere l'accesso condizionale a un'organizzazione, una cartella o un progetto in BigQuery, consulta Policy di autorizzazione con condizioni. Quando crei le condizioni, consulta le tabelle dei formati degli attributi.

Aggiungi l'accesso condizionale al set di dati

Per aggiungere condizioni a un set di dati, seleziona uno dei seguenti metodi. Quando crei le condizioni, fai riferimento alle tabelle dei formati degli attributi.

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Explorer, espandi il progetto, fai clic su Set di dati, quindi seleziona un set di dati.

  4. Nel riquadro dei dettagli, fai clic su Condividi > Autorizzazioni.

  5. Fai clic su Aggiungi entità.

  6. Nel campo Nuove entità, inserisci un'entità.

  7. Nell'elenco Seleziona un ruolo, seleziona un ruolo predefinito o un ruolo personalizzato.

  8. Fai clic su Aggiungi condizione IAM.

  9. Aggiungi condizioni al campo condition utilizzando gli attributi delle condizioni.

  10. Nel riquadro Aggiungi condizione IAM, fai clic su Salva.

  11. Nel riquadro Concedi l'accesso a DATASET, fai clic su Salva.

bq

Per visualizzare o aggiornare le policy di accesso condizionale in Cloud Shell, devi utilizzare Cloud Shell versione 503.0.0 o successiva.

Per concedere l'accesso condizionale a un set di dati utilizzando Cloud Shell, segui le istruzioni per concedere l'accesso a un set di dati. Puoi aggiungere le condizioni di accesso condizionale alla sezione access del file JSON del set di dati.

Ad esempio, la seguente aggiunta alla sezione access del file JSON di un set di dati concederebbe il ruolo roles/bigquery.dataViewer a cloudysanfrancisco@gmail.com fino al 31 dicembre 2032:

"access": [
  {
    "role": "roles/bigquery.dataViewer",
    "userByEmail": "cloudysanfrancisco@gmail.com",
    "condition": {
      "title": "Grant roles/bigquery.dataViewer until 2033",
      "description": "Role expires on December 31, 2032.",
      "expression": "request.time < timestamp('2032-12-31T12:00:00Z')"
    }
  }
]

API

Per concedere l'accesso condizionale a un set di dati utilizzando l'API BigQuery, segui le istruzioni per concedere l'accesso a un set di dati con accessPolicyVersion=3 nel parametro della richiesta.

Puoi aggiungere voci con condizioni di accesso alla proprietà access.condition della risorsa del set di dati.

Per i set di dati con policy di accesso condizionale, gli utenti possono aggiornare le impostazioni di accesso incondizionato utilizzando i flussi standard di lettura, modifica e aggiornamento senza specificare il parametro di richiesta accessPolicyVersion.

Rimuovi l'accesso condizionale dai set di dati

Per rimuovere le condizioni da un set di dati, seleziona uno dei seguenti metodi. Quando crei le condizioni, fai riferimento alle tabelle dei formati degli attributi.

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Spazio di esplorazione:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

  3. Nel riquadro Explorer, espandi il progetto, fai clic su Set di dati, quindi seleziona un set di dati.

  4. Nel riquadro dei dettagli, fai clic su Condividi > Autorizzazioni.

  5. Seleziona l'entità di cui vuoi revocare l'accesso.

  6. Fai clic su Elimina.

  7. Nella finestra di dialogo Vuoi eliminare l'entità?, fai clic su Elimina.

bq

Per visualizzare o aggiornare le policy di accesso condizionale in Cloud Shell, devi utilizzare Cloud Shell versione 503.0.0 o successiva.

Per rimuovere l'accesso condizionale a un set di dati utilizzando Cloud Shell, segui le istruzioni riportate in Revoca l'accesso a un set di dati. Puoi rimuovere la voce con la condizione dalla sezione access del file JSON del set di dati.

API

Per revocare l'accesso condizionale a un set di dati utilizzando l'API BigQuery, segui le istruzioni per revocare l'accesso a un set di dati con accessPolicyVersion=3 nel parametro della richiesta.

Puoi rimuovere le voci con condizioni dalla proprietà access della risorsa del set di dati.

Per i set di dati con policy di accesso condizionale, gli utenti possono aggiornare le impostazioni di accesso incondizionato utilizzando i flussi standard di lettura, modifica e aggiornamento senza specificare il parametro di richiesta accessPolicyVersion.

Attributi delle condizioni

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 sulle 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 saperne di più, consulta Tag delle risorse.

Quando crei condizioni per tabelle e 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 saperne di più, 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

Best practice per le condizioni

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

  • Per una maggiore precisione, ti consigliamo di utilizzare condizioni positive per resource.type, resource.name e resource.service. Poiché i tipi non supportati sono rappresentati da una stringa vuota, le condizioni negative potrebbero corrispondere a un'ampia gamma di risorse. Per saperne di più, consulta le condizioni negative.
  • Le condizioni IAM a livello di set di dati devono essere utilizzate solo per i ruoli che si applicano alle risorse all'interno del set di dati, come tabelle, viste, modelli e routine. Non devono essere utilizzati per concedere ruoli che operano a livello di set di dati o di progetto, come bigquery.user o bigquery.jobUser.
  • Non utilizzare la condizione resource.type == 'bigquery.googleapis.com/Dataset' per le policy a livello di set di dati, perché non ha alcun effetto sull'autorizzazione. Questo attributo ha lo scopo di controllare l'accesso alle risorse del set di dati secondario, come tabelle, viste, routine e modelli.
  • Includi resource.type, resource.name e resource.service nella condizione, anche se questo livello di specificità non è necessario. Questa pratica aiuta a mantenere le condizioni man mano che le risorse nel workflow cambiano, in modo che altre risorse non vengano incluse involontariamente in futuro.
  • Quando concedi le autorizzazioni, includi l'insieme di autorizzazioni più ristretto possibile per assicurarti di non concedere involontariamente un accesso eccessivamente permissivo.
  • Utilizza resource.name.startsWith con cautela. I percorsi delle tabelle BigQuery e delle viste sono preceduti dall'ID progetto e dall'ID set di dati principali. Condizioni non sufficientemente specifiche potrebbero concedere un accesso eccessivo. 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 principale, ma 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 le 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

Le condizioni negative come resource.name != resource possono concedere inavvertitamente un accesso eccessivamente permissivo. Le risorse BigQuery non supportate hanno attributi delle risorse vuoti, il che significa che corrispondono a tutte le condizioni negative. Anche le 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. 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 quella 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 concedere 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 sono 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.
  • Se durante la visualizzazione di una risorsa con condizioni viene utilizzato un accessPolicyVersion incompatibile, le associazioni potrebbero contenere withcond seguito da un valore hash. Per saperne di più, consulta Risoluzione dei problemi relativi a withcond nelle policy e nelle associazioni dei ruoli.
  • Gli utenti con accesso condizionale a un set di dati o a una tabella non possono modificare le autorizzazioni per quella 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 di colonna non è supportato direttamente tramite le condizioni IAM. Tuttavia, un utente con accesso condizionale può concedersi il ruolo Amministratore BigQuery (roles/bigquery.admin) sulla tabella e quindi modificare le policy di accesso a righe e colonne.
  • L'applicazione delle modifiche alle policy IAM può richiedere fino a cinque minuti.
  • Gli utenti con accesso condizionale potrebbero non essere in grado di eseguire query sulle viste INFORMATION_SCHEMA.
  • Gli utenti con accesso condizionale solo alle tabelle non possono eseguire funzioni carattere jolly nella tabella.

Esempi

Di seguito sono riportati alcuni esempi di casi d'uso per condizioni IAM 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 query sulla tabella e accedervi tramite lo strumento bq. L'utente non può visualizzare la tabella nella console Google Cloud perché non dispone dell'autorizzazionebigquery.tables.list sul 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 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 in tutti i set di dati con un prefisso specifico

Questo esempio concede a cloudysanfrancisco@gmail.com il ruolo BigQuery Data Owner 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 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 BigQuery Data Owner su tutte le tabelle, i modelli e le routine in 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