Controlla l'accesso alle risorse con IAM

Questo documento descrive come visualizzare, concedere e revocare i controlli dell'accesso per i set di dati BigQuery e per le risorse all'interno dei set di dati: tabelle, viste e routine. Sebbene i modelli siano anche risorse a livello di set di dati, non puoi concedere l'accesso a singoli modelli utilizzando i ruoli IAM.

Puoi concedere l'accesso alle risorse Trusted Cloud by S3NS utilizzando i criteri di autorizzazione, noti anche come criteri IAM (Identity and Access Management), che sono allegati alle risorse. Puoi collegare una sola policy di autorizzazione a ogni risorsa. Il criterio di autorizzazione controlla l'accesso alla risorsa stessa e a tutti i suoi discendenti che ereditano il criterio di autorizzazione.

Per ulteriori informazioni sulle policy di autorizzazione, consulta la sezione Struttura delle policy nella documentazione di IAM.

Questo documento presuppone la conoscenza di Identity and Access Management (IAM) in Trusted Cloud by S3NS.

Limitazioni

  • Gli elenchi di controllo dell'accesso dell'accesso (ACL) di routine non sono inclusi nelle routine replicate.
  • Le routine all'interno di set di dati esterni o collegati non supportano i controlli dell'accesso.
  • Le tabelle all'interno di set di dati esterni o collegati non supportano i controlli dell'accesso.
  • I controlli dell'accesso alle routine non possono essere impostati con Terraform.
  • I controlli dell'accesso di routine non possono essere impostati con Google Cloud SDK.
  • I controlli di accesso di routine non possono essere impostati utilizzando il BigQuery Data Control Language (DCL).
  • Data Catalog non supporta i controlli di accesso di routine. Se un utente ha concesso l'accesso a livello di routine in modo condizionale, non vedrà le proprie routine nel riquadro laterale di BigQuery. Per risolvere il problema, concedi l'accesso a livello di set di dati.
  • La visualizzazione INFORMATION_SCHEMA.OBJECT_PRIVILEGES non mostra i controlli di accesso per le routine.

Prima di iniziare

Concedi i ruoli IAM (Identity and Access Management) che forniscono agli utenti le autorizzazioni necessarie per eseguire ogni attività descritta in questo documento.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per modificare i criteri IAM per le risorse, chiedi all'amministratore di concederti il ruolo IAM Proprietario dati BigQuery (roles/bigquery.dataOwner) sul progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per modificare i criteri IAM per le risorse. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per modificare i criteri IAM per le risorse sono necessarie le seguenti autorizzazioni:

  • Per ottenere i criteri di accesso di un set di dati: bigquery.datasets.get
  • Per impostare i criteri di accesso di un set di dati: bigquery.datasets.update
  • Per ottenere i criteri di accesso di un set di dati (solo consoleTrusted Cloud ): bigquery.datasets.getIamPolicy
  • Per impostare i criteri di accesso di un set di dati (solo console): bigquery.datasets.setIamPolicy
  • Per visualizzare le norme di una tabella o di una vista: bigquery.tables.getIamPolicy
  • Per impostare il criterio di una tabella o di una vista: bigquery.tables.setIamPolicy
  • Per ottenere la policy di accesso di una routine: bigquery.routines.getIamPolicy
  • Per impostare i criteri di accesso di una routine: bigquery.routines.setIamPolicy
  • Per creare lo strumento bq o job SQL BigQuery (facoltativo): bigquery.jobs.create

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

Utilizzare i controlli di accesso ai set di dati

Puoi fornire l'accesso a un set di dati concedendo a un'entità IAM un ruolo predefinito o personalizzato che determina cosa può fare l'entità con il set di dati. Questa operazione è nota anche come collegamento di una policy di autorizzazione a una risorsa. Dopo aver concesso l'accesso, puoi visualizzare i controlli di accesso del set di dati e revocare l'accesso al set di dati.

Concedere l'accesso a un set di dati

Non puoi concedere l'accesso a un set di dati quando lo crei utilizzando l'interfaccia utente web BigQuery o lo strumento a riga di comando bq. Devi prima creare il set di dati e poi concedere l'accesso. L'API ti consente di concedere l'accesso durante la creazione del set di dati chiamando il metodo datasets.insert con una risorsa del set di dati definita.

Un progetto è la risorsa principale per un set di dati, mentre un set di dati è la risorsa principale per tabelle e viste, routine e modelli. Quando concedi un ruolo a livello di progetto, il ruolo e le relative autorizzazioni vengono ereditati dal set di dati e dalle risorse del set di dati. Allo stesso modo, quando concedi un ruolo a livello di set di dati, il ruolo e le relative autorizzazioni vengono ereditati dalle risorse all'interno del set di dati.

Puoi fornire l'accesso a un set di dati concedendo un'autorizzazione del ruolo IAM per accedere al set di dati o concedendo l'accesso in modo condizionale utilizzando una condizione IAM. Per saperne di più sulla concessione dell'accesso condizionale, consulta Controllare l'accesso con le condizioni IAM.

Per concedere a un ruolo IAM l'accesso a un set di dati senza utilizzare condizioni, seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto e seleziona un set di dati da condividere.

  3. Fai clic su Condivisione > Autorizzazioni.

  4. Fai clic su Aggiungi entità.

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

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

  7. Fai clic su Salva.

  8. Per tornare alle informazioni sul set di dati, fai clic su Chiudi.

SQL

Per concedere ai principal l'accesso ai set di dati, utilizza l'istruzione DCL GRANT:

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    GRANT `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    TO "USER_LIST"

    Sostituisci quanto segue:

    • ROLE_LIST: un ruolo o un elenco di ruoli separati da virgole che vuoi concedere
    • RESOURCE_NAME: il nome del set di dati a cui stai concedendo l'accesso
    • USER_LIST: un elenco separato da virgole di utenti a cui viene concesso il ruolo

      Per un elenco dei formati validi, consulta user_list.

  3. Fai clic su Esegui.

Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

L'esempio seguente concede il ruolo Visualizzatore dati BigQuery a myDataset:

GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:user@example.com", "user:user2@example.com"

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per scrivere le informazioni sul set di dati esistente (inclusi i controlli dell'accesso) in un file JSON, utilizza il comando bq show:

    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 sul computer locale
  3. Apporta modifiche alla sezione access del file JSON. Puoi aggiungere a una delle voci specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi anche aggiungere uno dei seguenti elementi: userByEmail, groupByEmail e domain.

    Ad esempio, la sezione access del file JSON di un set di dati avrebbe il seguente aspetto:

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      },
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      },
      {
       "role": "READER",
       "domain": "domain_name"
      },
      {
       "role": "WRITER",
       "userByEmail": "user_email"
      },
      {
       "role": "READER",
       "groupByEmail": "group_email"
      }
     ],
     ...
    }
  4. Al termine delle modifiche, utilizza il comando bq update e includi il file JSON utilizzando il flag --source. Se il set di dati si trova in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: PROJECT_ID:DATASET.

      bq update 
    --source PATH_TO_FILE
    PROJECT_ID:DATASET

  5. Per verificare le modifiche controllo dell'accesso, utilizza di nuovo il comando bq show senza scrivere le informazioni in un file:

    bq show --format=prettyjson PROJECT_ID:DATASET
  6. Terraform

    Utilizza le risorse google_bigquery_dataset_iam per aggiornare l'accesso a un set di dati.

    Impostare i criteri di accesso per un set di dati

    L'esempio seguente mostra come utilizzare la risorsa google_bigquery_dataset_iam_policy per impostare il criterio IAM per il set di dati mydataset. In questo modo viene sostituita qualsiasi policy esistente già collegata al set di dati:

    # This file sets the IAM policy for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    data "google_iam_policy" "iam_policy" {
      binding {
        role = "roles/bigquery.admin"
        members = [
          "user:user@example.com",
        ]
      }
      binding {
        role = "roles/bigquery.dataOwner"
        members = [
          "group:data.admin@example.com",
        ]
      }
      binding {
        role = "roles/bigquery.dataEditor"
        members = [
          "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com",
        ]
      }
    }
    
    resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" {
      dataset_id  = google_bigquery_dataset.default.dataset_id
      policy_data = data.google_iam_policy.iam_policy.policy_data
    }

    Impostare l'appartenenza ai ruoli per un set di dati

    L'esempio seguente mostra come utilizzare la risorsa google_bigquery_dataset_iam_binding per impostare l'appartenenza a un determinato ruolo per il set di dati mydataset. In questo modo, l'eventuale appartenenza esistente a questo ruolo viene sostituita. Gli altri ruoli all'interno del criterio IAM per il set di dati vengono conservati:

    # This file sets membership in an IAM role for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      role       = "roles/bigquery.jobUser"
    
      members = [
        "user:user@example.com",
        "group:group@example.com"
      ]
    }

    Impostare l'appartenenza al ruolo per una singola entità

    L'esempio seguente mostra come utilizzare la risorsa google_bigquery_dataset_iam_member per aggiornare il criterio IAM per il set di dati mydataset per concedere un ruolo a un'entità. L'aggiornamento di questo criterio IAM non influisce sull'accesso per altre entità a cui è stato concesso questo ruolo per il set di dati.

    # This file adds a member to an IAM role for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    resource "google_bigquery_dataset_iam_member" "dataset_iam_member" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      role       = "roles/bigquery.user"
      member     = "user:user@example.com"
    }

    Per applicare la configurazione di Terraform in un progetto Trusted Cloud , completa i passaggi nelle sezioni seguenti.

    Prepara Cloud Shell

    1. Avvia Cloud Shell.
    2. Imposta il progetto Trusted Cloud predefinito in cui vuoi applicare le configurazioni Terraform.

      Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

    Prepara la directory

    Ogni file di configurazione di Terraform deve avere la propria directory (chiamata anche modulo radice).

    1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file viene denominato main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

      Copia il codice campione nel main.tf appena creato.

      (Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

    3. Rivedi e modifica i parametri di esempio da applicare al tuo ambiente.
    4. Salva le modifiche.
    5. Inizializza Terraform. Devi effettuare questa operazione una sola volta per directory.
      terraform init

      (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

    2. Applica la configurazione di Terraform eseguendo il comando seguente e inserendo yes al prompt:
      terraform apply

      Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

    3. Apri il tuo Trusted Cloud progetto per visualizzare i risultati. Nella console Trusted Cloud , vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

    API

    Per applicare i controlli dell'accesso durante la creazione del set di dati, chiama il metodo datasets.insert con una risorsa del set di dati definita. Per aggiornare i controlli dell'accesso, chiama il metodo datasets.patch e utilizza la proprietà access nella risorsa Dataset.

    Poiché il metodo datasets.update sostituisce l'intera risorsa del set di dati, datasets.patch è il metodo preferito per aggiornare i controlli dell'accesso.

    Vai

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Imposta il nuovo elenco di accesso aggiungendo la nuova voce all'elenco esistente con il tipo DatasetMetadataToUpdate . Quindi chiama la funzione dataset.Update() per aggiornare la proprietà.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // grantAccessToDataset creates a new ACL conceding the READER role to the group "example-analyst-group@google.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func grantAccessToDataset(w io.Writer, projectID, datasetID string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    
    	ctx := context.Background()
    
    	// Create BigQuery handler.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Create dataset handler
    	dataset := client.Dataset(datasetID)
    
    	// Get metadata
    	meta, err := dataset.Metadata(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Metadata: %w", err)
    	}
    
    	// Find more details about BigQuery Entity Types here:
    	// https://pkg.go.dev/cloud.google.com/go/bigquery#EntityType
    	//
    	// Find more details about BigQuery Access Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/bigquery#AccessRole
    
    	entityType := bigquery.GroupEmailEntity
    	entityID := "example-analyst-group@google.com"
    	roleType := bigquery.ReaderRole
    
    	// Append a new access control entry to the existing access list.
    	update := bigquery.DatasetMetadataToUpdate{
    		Access: append(meta.Access, &bigquery.AccessEntry{
    			Role:       roleType,
    			EntityType: entityType,
    			Entity:     entityID,
    		}),
    	}
    
    	// Leverage the ETag for the update to assert there's been no modifications to the
    	// dataset since the metadata was originally read.
    	meta, err = dataset.Update(ctx, update, meta.ETag)
    	if err != nil {
    		return err
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entities: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.Acl.Entity;
    import com.google.cloud.bigquery.Acl.Group;
    import com.google.cloud.bigquery.Acl.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.ArrayList;
    import java.util.List;
    
    public class GrantAccessToDataset {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        // Group to add to the ACL
        String entityEmail = "group-to-add@example.com";
    
        grantAccessToDataset(projectId, datasetName, entityEmail);
      }
    
      public static void grantAccessToDataset(
          String projectId, String datasetName, String entityEmail) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Create a new Entity with the corresponding type and email
          // "user-or-group-to-add@example.com"
          // For more information on the types of Entities available see:
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity
          // and
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity.Type
          Entity entity = new Group(entityEmail);
    
          // Create a new ACL granting the READER role to the group with the entity email
          // "user-or-group-to-add@example.com"
          // For more information on the types of ACLs available see:
          // https://cloud.google.com/storage/docs/access-control/lists
          Acl newEntry = Acl.of(entity, Role.READER);
    
          // Get a copy of the ACLs list from the dataset and append the new entry.
          List<Acl> acls = new ArrayList<>(dataset.getAcl());
          acls.add(newEntry);
    
          // Update the ACLs by setting the new list.
          Dataset updatedDataset = bigquery.update(dataset.toBuilder().setAcl(acls).build());
          System.out.println(
              "ACLs of dataset \""
                  + updatedDataset.getDatasetId().getDataset()
                  + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("ACLs were not updated \n" + e.toString());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Imposta il nuovo elenco di accesso aggiungendo la nuova voce all'elenco esistente utilizzando il metodo Dataset#metadata. Quindi chiama la funzione Dataset#setMetadata() per aggiornare la proprietà.
    
    /**
     * TODO(developer): Update and un-comment below lines.
     */
    
    // const datasetId = "my_project_id.my_dataset_name";
    
    // ID of the user or group from whom you are adding access.
    // const entityId = "user-or-group-to-add@example.com";
    
    // One of the "Basic roles for datasets" described here:
    // https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
    // const role = "READER";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    // Type of entity you are granting access to.
    // Find allowed allowed entity type names here:
    // https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource:-dataset
    const entityType = 'groupByEmail';
    
    async function grantAccessToDataset() {
      const [dataset] = await client.dataset(datasetId).get();
    
      // The 'access entries' array is immutable. Create a copy for modifications.
      const entries = [...dataset.metadata.access];
    
      // Append an AccessEntry to grant the role to a dataset.
      // Find more details about the AccessEntry object in the BigQuery documentation:
      // https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
      entries.push({
        role,
        [entityType]: entityId,
      });
    
      // Assign the array of AccessEntries back to the dataset.
      const metadata = {
        access: entries,
      };
    
      // Update will only succeed if the dataset
      // has not been modified externally since retrieval.
      //
      // See the BigQuery client library documentation for more details on metadata updates:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
    
      // Update just the 'access entries' property of the dataset.
      await client.dataset(datasetId).setMetadata(metadata);
    
      console.log(
        `Role '${role}' granted for entity '${entityId}' in '${datasetId}'.`
      );
    }

    Python

    Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Imposta la proprietà dataset.access_entries con i controlli dell'accesso per un set di dati. Quindi chiama la funzione client.update_dataset() per aggiornare la proprietà.
    from google.api_core.exceptions import PreconditionFailed
    from google.cloud import bigquery
    from google.cloud.bigquery.enums import EntityTypes
    
    # TODO(developer): Update and uncomment the lines below.
    
    # ID of the dataset to grant access to.
    # dataset_id = "my_project_id.my_dataset"
    
    # ID of the user or group receiving access to the dataset.
    # Alternatively, the JSON REST API representation of the entity,
    # such as the view's table reference.
    # entity_id = "user-or-group-to-add@example.com"
    
    # One of the "Basic roles for datasets" described here:
    # https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
    # role = "READER"
    
    # Type of entity you are granting access to.
    # Find allowed allowed entity type names here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/enums#class-googlecloudbigqueryenumsentitytypesvalue
    entity_type = EntityTypes.GROUP_BY_EMAIL
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # The `access_entries` list is immutable. Create a copy for modifications.
    entries = list(dataset.access_entries)
    
    # Append an AccessEntry to grant the role to a dataset.
    # Find more details about the AccessEntry object here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
    entries.append(
        bigquery.AccessEntry(
            role=role,
            entity_type=entity_type,
            entity_id=entity_id,
        )
    )
    
    # Assign the list of AccessEntries back to the dataset.
    dataset.access_entries = entries
    
    # Update will only succeed if the dataset
    # has not been modified externally since retrieval.
    #
    # See the BigQuery client library documentation for more details on `update_dataset`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.client.Client#google_cloud_bigquery_client_Client_update_dataset
    try:
        # Update just the `access_entries` property of the dataset.
        dataset = client.update_dataset(
            dataset,
            ["access_entries"],
        )
    
        # Show a success message.
        full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
        print(
            f"Role '{role}' granted for entity '{entity_id}'"
            f" in dataset '{full_dataset_id}'."
        )
    except PreconditionFailed:  # A read-modify-write error
        print(
            f"Dataset '{dataset.dataset_id}' was modified remotely before this update. "
            "Fetch the latest version and retry."
        )

Ruoli predefiniti che concedono l'accesso ai set di dati

Puoi concedere l'accesso a un dataset ai seguenti ruoli IAM predefiniti.

Ruolo Descrizione
Proprietario dati BigQuery (roles/bigquery.dataOwner) Se concesso per un set di dati, questo ruolo concede le seguenti autorizzazioni:
  • Tutte le autorizzazioni per il set di dati e per tutte le risorse al suo interno: tabelle e viste, modelli e routine.
Editor dati BigQuery (roles/bigquery.dataEditor) Se concesso per un set di dati, questo ruolo concede le seguenti autorizzazioni:
  • Recupera i metadati e le autorizzazioni per il set di dati.
  • Per tabelle e viste:
    • Crea, aggiorna, recupera, elenca ed elimina le tabelle e le viste del set di dati.
    • Leggere (eseguire query), esportare, replicare e aggiornare i dati delle tabelle.
    • Crea, aggiorna ed elimina indici.
    • Crea e ripristina snapshot.
  • Tutte le autorizzazioni per le routine e i modelli del set di dati.
Visualizzatore dati BigQuery (roles/bigquery.dataViewer) Se concesso per un set di dati, questo ruolo concede le seguenti autorizzazioni:
  • Recupera i metadati e le autorizzazioni per il set di dati.
  • Elenca le tabelle, le visualizzazioni e i modelli di un set di dati.
  • Recupera i metadati e i controlli dell'accesso per le tabelle e le viste del set di dati.
  • Leggi (esegui query), replica ed esporta i dati delle tabelle e crea snapshot.
  • Elenca e richiama le routine del set di dati.
BigQuery Metadata Viewer (roles/bigquery.metadataViewer) Se concesso per un set di dati, questo ruolo concede le seguenti autorizzazioni:
  • Recupera i metadati e i controlli dell'accesso per il set di dati.
  • Recupera i metadati e i controlli dell'accesso per tabelle e viste.
  • Recupera i metadati dai modelli e dalle routine del set di dati.
  • Elenca tabelle, viste, modelli e routine nel set di dati.

Autorizzazioni set di dati

La maggior parte delle autorizzazioni che iniziano con bigquery.datasets si applicano a livello di set di dati. bigquery.datasets.create non lo fa. Per creare set di dati, è necessario concedere l'autorizzazione bigquery.datasets.create a un ruolo nel contenitore principale, ovvero il progetto.

La tabella seguente elenca tutte le autorizzazioni per i set di dati e la risorsa di livello più basso a cui può essere applicata l'autorizzazione.

Autorizzazione Risorsa Azione
bigquery.datasets.create Progetto Crea nuovi set di dati nel progetto.
bigquery.datasets.get Set di dati Recupera i metadati e i controlli dell'accesso per il set di dati. Per visualizzare le autorizzazioni nella console è necessaria anche l'autorizzazione bigquery.datasets.getIamPolicy.
bigquery.datasets.getIamPolicy Set di dati Richiesta dalla console per concedere all'utente l'autorizzazione a ottenere i controlli di accesso di un set di dati. Si apre. La console richiede anche l'autorizzazione bigquery.datasets.get per visualizzare il set di dati.
bigquery.datasets.update Set di dati Aggiorna i metadati e i controlli dell'accesso per il set di dati. L'aggiornamento dei controlli di accesso nella console richiede anche l'autorizzazione bigquery.datasets.setIamPolicy.
bigquery.datasets.setIamPolicy Set di dati Richiesta dalla console per concedere all'utente l'autorizzazione a impostare i controlli di accesso di un set di dati. Si apre. La console richiede anche l'autorizzazione bigquery.datasets.update per aggiornare il set di dati.
bigquery.datasets.delete Set di dati Elimina un set di dati.
bigquery.datasets.createTagBinding Set di dati Associa tag al set di dati.
bigquery.datasets.deleteTagBinding Set di dati Scollega i tag dal set di dati.
bigquery.datasets.listTagBindings Set di dati Elenca i tag per il set di dati.
bigquery.datasets.listEffectiveTags Set di dati Elenca i tag effettivi (applicati e ereditati) per il set di dati.
bigquery.datasets.link Set di dati Crea un set di dati collegato.
bigquery.datasets.listSharedDatasetUsage Progetto Elenca le statistiche sull'utilizzo dei set di dati condivisi per i set di dati a cui hai accesso nel progetto. Questa autorizzazione è necessaria per eseguire query sulla visualizzazione INFORMATION_SCHEMA.SHARED_DATASET_USAGE.

Visualizzare i controlli di accesso per un set di dati

Puoi visualizzare i controlli dell'accesso impostati in modo esplicito per un set di dati scegliendo una delle seguenti opzioni. Per visualizzare i ruoli ereditati, per un dataset, utilizza l'interfaccia utente web di BigQuery.

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto e seleziona un set di dati.

  3. Fai clic su Condivisione > Autorizzazioni.

    I controlli di accesso del set di dati vengono visualizzati nel riquadro Autorizzazioni set di dati.

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per ottenere una policy esistente e inviarla a 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 macchina locale
  3. SQL

    Esegui una query sulla vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES. Le query per recuperare i controlli dell'accesso per un set di dati devono specificare object_name.

    1. Nella console Trusted Cloud , vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nell'editor di query, inserisci la seguente istruzione:

      SELECT
      COLUMN_LIST
      FROM
        PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
      WHERE
      object_name = "DATASET";

      Sostituisci quanto segue:

    3. Fai clic su Esegui.

    Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

    Esempio:

    Questa query recupera i controlli dell'accesso per mydataset.

    SELECT
    object_name, privilege_type, grantee
    FROM
    my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE
    object_name = "mydataset";

    L'output dovrebbe essere simile al seguente:

    +------------------+-----------------------------+-------------------------+
    |   object_name    |  privilege_type             | grantee                 |
    +------------------+-----------------------------+-------------------------+
    | mydataset        | roles/bigquery.dataOwner    | projectOwner:myproject  |
    | mydataset        | roles/bigquery.dataViwer    | user:user@example.com   |
    +------------------+-----------------------------+-------------------------+
    

    API

    Per visualizzare i controlli dell'accesso per un set di dati, chiama il metodo datasets.get con una risorsa dataset definita.

    I controlli dell'accesso vengono visualizzati nella proprietà access della risorsa dataset.

    Vai

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione client.Dataset().Metadata(). Il criterio di accesso è disponibile nella proprietà Access.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // viewDatasetAccessPolicies retrieves the ACL for the given dataset
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func viewDatasetAccessPolicies(w io.Writer, projectID, datasetID string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    
    	ctx := context.Background()
    
    	// Create new client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get dataset's metadata.
    	meta, err := client.Dataset(datasetID).Metadata(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Client.Dataset.Metadata: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    
    	// Iterate over access permissions.
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entity: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.List;
    
    public class GetDatasetAccessPolicy {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        getDatasetAccessPolicy(projectId, datasetName);
      }
    
      public static void getDatasetAccessPolicy(String projectId, String datasetName) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Show ACL details.
          // Find more information about ACL and the Acl Class here:
          // https://cloud.google.com/storage/docs/access-control/lists
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl
          List<Acl> acls = dataset.getAcl();
          System.out.println("ACLs in dataset \"" + dataset.getDatasetId().getDataset() + "\":");
          System.out.println(acls.toString());
          for (Acl acl : acls) {
            System.out.println();
            System.out.println("Role: " + acl.getRole());
            System.out.println("Entity: " + acl.getEntity());
          }
        } catch (BigQueryException e) {
          System.out.println("ACLs info not retrieved. \n" + e.toString());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Recupera i metadati del set di dati utilizzando la funzione Dataset#getMetadata(). La policy di accesso è disponibile nella proprietà di accesso dell'oggetto metadati risultante.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const datasetId = "my_project_id.my_dataset";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const bigquery = new BigQuery();
    
    async function viewDatasetAccessPolicy() {
      const dataset = bigquery.dataset(datasetId);
    
      const [metadata] = await dataset.getMetadata();
      const accessEntries = metadata.access || [];
    
      // Show the list of AccessEntry objects.
      // More details about the AccessEntry object in the BigQuery documentation:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
      console.log(
        `${accessEntries.length} Access entries in dataset '${datasetId}':`
      );
      for (const accessEntry of accessEntries) {
        console.log(`Role: ${accessEntry.role || 'null'}`);
        console.log(`Special group: ${accessEntry.specialGroup || 'null'}`);
        console.log(`User by Email: ${accessEntry.userByEmail || 'null'}`);
      }
    }

    Python

    Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione client.get_dataset(). Il criterio di accesso è disponibile nella proprietà dataset.access_entries.
    from google.cloud import bigquery
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # TODO(developer): Update and uncomment the lines below.
    
    # Dataset from which to get the access policy.
    # dataset_id = "my_dataset"
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # Show the list of AccessEntry objects.
    # More details about the AccessEntry object here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
    print(
        f"{len(dataset.access_entries)} Access entries found "
        f"in dataset '{dataset_id}':"
    )
    
    for access_entry in dataset.access_entries:
        print()
        print(f"Role: {access_entry.role}")
        print(f"Special group: {access_entry.special_group}")
        print(f"User by Email: {access_entry.user_by_email}")

Revocare l'accesso a un set di dati

Per revocare l'accesso a un set di dati, seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Spazio di esplorazione, espandi il progetto e seleziona un set di dati.

  3. Nel riquadro dei dettagli, fai clic su Condivisione > Autorizzazioni.

  4. Nella finestra di dialogo Autorizzazioni dataset, espandi l'entità di cui vuoi revocare l'accesso.

  5. Fai clic su Rimuovi entità.

  6. Nella finestra di dialogo Vuoi rimuovere il ruolo dall'entità?, fai clic su Rimuovi.

  7. Per tornare ai dettagli del set di dati, fai clic su Chiudi.

SQL

Per rimuovere l'accesso di un'entità a un set di dati, utilizza l'istruzione DCL REVOKE:

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    REVOKE `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    FROM "USER_LIST"

    Sostituisci quanto segue:

    • ROLE_LIST: un ruolo o un elenco di ruoli separati da virgole che vuoi revocare
    • RESOURCE_NAME: il nome della risorsa per cui vuoi revocare l'autorizzazione
    • USER_LIST: un elenco separato da virgole di utenti a cui verranno revocati i ruoli

      Per un elenco dei formati validi, consulta user_list.

  3. Fai clic su Esegui.

Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

L'esempio seguente revoca il ruolo BigQuery Data Owner da myDataset:

REVOKE `roles/bigquery.dataOwner`
ON SCHEMA `myProject`.myDataset
FROM "group:group@example.com", "serviceAccount:user@test-project.s3ns-system.iam.gserviceaccount.com"

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per scrivere le informazioni sul set di dati esistente (inclusi i controlli dell'accesso) in un file JSON, utilizza il comando bq show:

    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 sul computer locale
  3. Apporta modifiche alla sezione access del file JSON. Puoi rimuovere una qualsiasi delle voci specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi anche rimuovere uno dei seguenti elementi: userByEmail, groupByEmail e domain.

    Ad esempio, la sezione access del file JSON di un set di dati avrebbe il seguente aspetto:

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      },
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      },
      {
       "role": "READER",
       "domain": "domain_name"
      },
      {
       "role": "WRITER",
       "userByEmail": "user_email"
      },
      {
       "role": "READER",
       "groupByEmail": "group_email"
      }
     ],
     ...
    }
  4. Al termine delle modifiche, utilizza il comando bq update e includi il file JSON utilizzando il flag --source. Se il set di dati si trova in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: PROJECT_ID:DATASET.

      bq update 
    --source PATH_TO_FILE
    PROJECT_ID:DATASET

  5. Per verificare le modifiche controllo dell'accesso, utilizza il comando show senza scrivere le informazioni in un file:

    bq show --format=prettyjson PROJECT_ID:DATASET
  6. API

    Chiama il metodo datasets.patch e utilizza la proprietà access nella risorsa Dataset per aggiornare i controlli dell'accesso.

    Poiché il metodo datasets.update sostituisce l'intera risorsa del set di dati, datasets.patch è il metodo preferito per aggiornare i controlli dell'accesso.

    Vai

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Imposta il nuovo elenco di accesso rimuovendo la voce dall'elenco esistente con DatasetMetadataToUpdate type . Quindi chiama la funzione dataset.Update() per aggiornare la proprietà.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // revokeAccessToDataset creates a new ACL removing the dataset access to "example-analyst-group@google.com" entity
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func revokeAccessToDataset(w io.Writer, projectID, datasetID, entity string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// entity := "user@mydomain.com"
    
    	ctx := context.Background()
    
    	// Create BigQuery client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get dataset handler
    	dataset := client.Dataset(datasetID)
    
    	// Get dataset metadata
    	meta, err := dataset.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    
    	// Create new access entry list by copying the existing and omiting the access entry entity value
    	var newAccessList []*bigquery.AccessEntry
    	for _, entry := range meta.Access {
    		if entry.Entity != entity {
    			newAccessList = append(newAccessList, entry)
    		}
    	}
    
    	// Only proceed with update if something in the access list was removed.
    	// Additionally, we use the ETag from the initial metadata to ensure no
    	// other changes were made to the access list in the interim.
    	if len(newAccessList) < len(meta.Access) {
    		update := bigquery.DatasetMetadataToUpdate{
    			Access: newAccessList,
    		}
    		meta, err = dataset.Update(ctx, update, meta.ETag)
    		if err != nil {
    			return err
    		}
    	} else {
    		return fmt.Errorf("any access entry was revoked")
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entity: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.Acl.Entity;
    import com.google.cloud.bigquery.Acl.Group;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.List;
    
    public class RevokeDatasetAccess {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        // Group to remove from the ACL
        String entityEmail = "group-to-remove@example.com";
    
        revokeDatasetAccess(projectId, datasetName, entityEmail);
      }
    
      public static void revokeDatasetAccess(String projectId, String datasetName, String entityEmail) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Create a new Entity with the corresponding type and email
          // "user-or-group-to-remove@example.com"
          // For more information on the types of Entities available see:
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity
          // and
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity.Type
          Entity entity = new Group(entityEmail);
    
          // To revoke access to a dataset, remove elements from the Acl list.
          // Find more information about ACL and the Acl Class here:
          // https://cloud.google.com/storage/docs/access-control/lists
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl
          // Remove the entity from the ACLs list.
          List<Acl> acls =
              dataset.getAcl().stream().filter(acl -> !acl.getEntity().equals(entity)).toList();
    
          // Update the ACLs by setting the new list.
          bigquery.update(dataset.toBuilder().setAcl(acls).build());
          System.out.println("ACLs of \"" + datasetName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("ACLs were not updated \n" + e.toString());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Aggiorna l'elenco di accesso al set di dati rimuovendo la voce specificata dall'elenco esistente utilizzando il metodo Dataset#get() per recuperare i metadati attuali. Modifica la proprietà di accesso per escludere l'entità desiderata, quindi chiama la funzione Dataset#setMetadata() per applicare l'elenco di accesso aggiornato.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    
    // const datasetId = "my_project_id.my_dataset"
    
    // ID of the user or group from whom you are revoking access.
    // const entityId = "user-or-group-to-remove@example.com"
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const bigquery = new BigQuery();
    
    async function revokeDatasetAccess() {
      const [dataset] = await bigquery.dataset(datasetId).get();
    
      // To revoke access to a dataset, remove elements from the access list.
      //
      // See the BigQuery client library documentation for more details on access entries:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
    
      // Filter access entries to exclude entries matching the specified entity_id
      // and assign a new list back to the access list.
      dataset.metadata.access = dataset.metadata.access.filter(entry => {
        return !(
          entry.entity_id === entityId ||
          entry.userByEmail === entityId ||
          entry.groupByEmail === entityId
        );
      });
    
      // Update will only succeed if the dataset
      // has not been modified externally since retrieval.
      //
      // See the BigQuery client library documentation for more details on metadata updates:
      // https://cloud.google.com/bigquery/docs/updating-datasets
    
      // Update just the 'access entries' property of the dataset.
      await dataset.setMetadata(dataset.metadata);
    
      console.log(`Revoked access to '${entityId}' from '${datasetId}'.`);
    }

    Python

    Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Imposta la proprietà dataset.access_entries con i controlli dell'accesso per un set di dati. Quindi chiama la funzione client.update_dataset() per aggiornare la proprietà.
    from google.cloud import bigquery
    from google.api_core.exceptions import PreconditionFailed
    
    # TODO(developer): Update and uncomment the lines below.
    
    # ID of the dataset to revoke access to.
    # dataset_id = "my-project.my_dataset"
    
    # ID of the user or group from whom you are revoking access.
    # Alternatively, the JSON REST API representation of the entity,
    # such as a view's table reference.
    # entity_id = "user-or-group-to-remove@example.com"
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # To revoke access to a dataset, remove elements from the AccessEntry list.
    #
    # See the BigQuery client library documentation for more details on `access_entries`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.Dataset#google_cloud_bigquery_dataset_Dataset_access_entries
    
    # Filter `access_entries` to exclude entries matching the specified entity_id
    # and assign a new list back to the AccessEntry list.
    dataset.access_entries = [
        entry for entry in dataset.access_entries
        if entry.entity_id != entity_id
    ]
    
    # Update will only succeed if the dataset
    # has not been modified externally since retrieval.
    #
    # See the BigQuery client library documentation for more details on `update_dataset`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.client.Client#google_cloud_bigquery_client_Client_update_dataset
    try:
        # Update just the `access_entries` property of the dataset.
        dataset = client.update_dataset(
            dataset,
            ["access_entries"],
        )
    
        # Notify user that the API call was successful.
        full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
        print(f"Revoked dataset access for '{entity_id}' to ' dataset '{full_dataset_id}.'")
    except PreconditionFailed:  # A read-modify-write error.
        print(
            f"Dataset '{dataset.dataset_id}' was modified remotely before this update. "
            "Fetch the latest version and retry."
        )

Utilizzare i controlli dell'accesso a tabelle e viste

Le viste vengono trattate come risorse di tabelle in BigQuery. Puoi fornire l'accesso a una tabella o a una vista concedendo a un'entità IAM un ruolo predefinito o personalizzato che determina cosa può fare l'entità con la tabella o la vista. Questa operazione è nota anche come collegamento di una policy di autorizzazione a una risorsa. Dopo aver concesso l'accesso, puoi visualizzare i controlli dell'accesso per la tabella o la vista e puoi revocare l'accesso alla tabella o alla vista.

Concedere l'accesso a una tabella o una vista

Per controllo dell'accesso granulare, puoi concedere un ruolo IAM predefinito o personalizzato per una tabella o una vista specifica. La tabella o la vista eredita anche i controlli dell'accesso specificati a livello di set di dati e superiore. Ad esempio, se concedi a un principal il ruolo Proprietario dati BigQuery in un set di dati, questo principal dispone anche delle autorizzazioni Proprietario dati BigQuery per le tabelle e le viste nel set di dati.

Per concedere l'accesso a una tabella o a una vista, seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto e seleziona una tabella o una vista da condividere.

  3. Fai clic su Condividi.

  4. Fai clic su Aggiungi entità.

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

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

  7. Fai clic su Salva.

  8. Per tornare alla tabella o visualizzare i dettagli, fai clic su Chiudi.

SQL

Per concedere alle entità l'accesso a tabelle o viste, utilizza l'istruzione DCL GRANT:

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    GRANT `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    TO "USER_LIST"

    Sostituisci quanto segue:

    • ROLE_LIST: un ruolo o un elenco di ruoli separati da virgole che vuoi concedere
    • RESOURCE_TYPE: il tipo di risorsa a cui viene applicato il ruolo

      I valori supportati includono TABLE, VIEW, MATERIALIZED VIEW e EXTERNAL TABLE.

    • RESOURCE_NAME: il nome della risorsa su cui vuoi concedere l'autorizzazione
    • USER_LIST: un elenco separato da virgole di utenti a cui viene concesso il ruolo

      Per un elenco dei formati validi, vedi user_list.

  3. Fai clic su Esegui.

Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

Il seguente esempio concede il ruolo Visualizzatore dati BigQuery su myTable:

GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:user@example.com", "user:user2@example.com"

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per concedere l'accesso a una tabella o a una vista, utilizza il comando bq add-iam-policy-binding:

    bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
      --table=true RESOURCE

    Sostituisci quanto segue:

    • MEMBER_TYPE: il tipo di membro, ad esempio user, group, serviceAccount o domain.
    • MEMBER: l'indirizzo email o il nome di dominio del membro.
    • ROLE: il ruolo che vuoi concedere al membro.
    • RESOURCE: il nome della tabella o della vista di cui vuoi aggiornare la policy.
  3. Terraform

    Utilizza le risorse google_bigquery_table_iam per aggiornare l'accesso a una tabella.

    Impostare la norma di accesso per una tabella

    L'esempio seguente mostra come utilizzare la risorsa google_bigquery_table_iam_policy per impostare il criterio IAM per la tabella mytable. Questa sostituisce qualsiasi policy esistente già collegata alla tabella:

    # This file sets the IAM policy for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    data "google_iam_policy" "iam_policy" {
      binding {
        role = "roles/bigquery.dataOwner"
        members = [
          "user:user@example.com",
        ]
      }
    }
    
    resource "google_bigquery_table_iam_policy" "table_iam_policy" {
      dataset_id  = google_bigquery_table.default.dataset_id
      table_id    = google_bigquery_table.default.table_id
      policy_data = data.google_iam_policy.iam_policy.policy_data
    }

    Impostare l'appartenenza ai ruoli per una tabella

    L'esempio seguente mostra come utilizzare la risorsa google_bigquery_table_iam_binding per impostare l'appartenenza a un determinato ruolo per la tabella mytable. In questo modo, l'eventuale appartenenza esistente a questo ruolo viene sostituita. Gli altri ruoli all'interno del criterio IAM per la tabella vengono conservati.

    # This file sets membership in an IAM role for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    resource "google_bigquery_table_iam_binding" "table_iam_binding" {
      dataset_id = google_bigquery_table.default.dataset_id
      table_id   = google_bigquery_table.default.table_id
      role       = "roles/bigquery.dataOwner"
    
      members = [
        "group:group@example.com",
      ]
    }

    Impostare l'appartenenza al ruolo per una singola entità

    L'esempio seguente mostra come utilizzare la risorsa google_bigquery_table_iam_member per aggiornare il criterio IAM per la tabella mytable per concedere un ruolo a un'entità. L'aggiornamento di questo criterio IAM non influisce sull'accesso per altre entità a cui è stato concesso questo ruolo per il set di dati.

    # This file adds a member to an IAM role for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    resource "google_bigquery_table_iam_member" "table_iam_member" {
      dataset_id = google_bigquery_table.default.dataset_id
      table_id   = google_bigquery_table.default.table_id
      role       = "roles/bigquery.dataEditor"
      member     = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com"
    }

    Per applicare la configurazione di Terraform in un progetto Trusted Cloud , completa i passaggi nelle sezioni seguenti.

    Prepara Cloud Shell

    1. Avvia Cloud Shell.
    2. Imposta il progetto Trusted Cloud predefinito in cui vuoi applicare le configurazioni Terraform.

      Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.

    Prepara la directory

    Ogni file di configurazione di Terraform deve avere la propria directory (chiamata anche modulo radice).

    1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file viene denominato main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

      Copia il codice campione nel main.tf appena creato.

      (Facoltativo) Copia il codice da GitHub. Questa operazione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

    3. Rivedi e modifica i parametri di esempio da applicare al tuo ambiente.
    4. Salva le modifiche.
    5. Inizializza Terraform. Devi effettuare questa operazione una sola volta per directory.
      terraform init

      (Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione -upgrade:

      terraform init -upgrade

    Applica le modifiche

    1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
      terraform plan

      Apporta le correzioni necessarie alla configurazione.

    2. Applica la configurazione di Terraform eseguendo il comando seguente e inserendo yes al prompt:
      terraform apply

      Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).

    3. Apri il tuo Trusted Cloud progetto per visualizzare i risultati. Nella console Trusted Cloud , vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

    API

    1. Per recuperare la policy corrente, chiama il metodo tables.getIamPolicy.

    2. Modifica la policy per aggiungere membri o controlli dell'accesso oppure entrambi. Per il formato richiesto per le norme, consulta l'argomento di riferimento Norme.

    3. Chiama tables.setIamPolicy per scrivere la policy aggiornata.

    Vai

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione IAM().SetPolicy() della risorsa per salvare le modifiche al criterio di accesso per una tabella o una vista.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    	"cloud.google.com/go/iam"
    )
    
    // grantAccessToResource creates a new ACL conceding the VIEWER role to the group "example-analyst-group@google.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func grantAccessToResource(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// resourceID := "myresource"
    
    	ctx := context.Background()
    
    	// Create new client
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource policy.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Find more details about IAM Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/iam#RoleName
    	entityID := "example-analyst-group@google.com"
    	roleType := iam.Viewer
    
    	// Add new policy.
    	policy.Add(fmt.Sprintf("group:%s", entityID), roleType)
    
    	// Update resource's policy.
    	err = client.Dataset(datasetID).Table(resourceID).IAM().SetPolicy(ctx, policy)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Get resource policy again expecting the update.
    	policy, err = client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    import com.google.cloud.Identity;
    import com.google.cloud.Policy;
    import com.google.cloud.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class GrantAccessToTableOrView {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_TABLE_NAME";
        // Role to add to the policy access
        Role role = Role.of("roles/bigquery.dataViewer");
        // Identity to add to the policy access
        Identity identity = Identity.user("user-add@example.com");
        grantAccessToTableOrView(projectId, datasetName, resourceName, role, identity);
      }
    
      public static void grantAccessToTableOrView(
          String projectId, String datasetName, String resourceName, Role role, Identity identity) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Add new user identity to current IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
          policy = policy.toBuilder().addIdentity(role, identity).build();
    
          // Update the IAM policy by setting the new one.
          bigquery.setIamPolicy(tableId, policy);
    
          System.out.println("IAM policy of resource \"" + resourceName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("IAM policy was not updated. \n" + e.toString());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione Table#getIamPolicy() per recuperare la policy IAM corrente per una tabella o una vista, modifica la policy aggiungendo nuove associazioni e poi utilizza la funzione Table#setIamPolicy() per salvare le modifiche alla policy di accesso.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID";
    // const datasetId = "YOUR_DATASET_ID";
    // const tableId = "YOUR_TABLE_ID";
    // const principalId = "YOUR_PRINCIPAL_ID";
    // const role = "YOUR_ROLE";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function grantAccessToTableOrView() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(tableId);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings array.
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // To grant access to a table or view
      // add bindings to the Table or View policy.
      //
      // Find more details about Policy and Binding objects here:
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Binding
      const binding = {
        role,
        members: [principalId],
      };
      policy.bindings.push(binding);
    
      // Set the IAM access policy with updated bindings.
      await table.setIamPolicy(policy);
    
      // Show a success message.
      console.log(
        `Role '${role}' granted for principal '${principalId}' on resource '${datasetId}.${tableId}'.`
      );
    }
    
    await grantAccessToTableOrView();

    Python

    Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione client.set_iam_policy() per salvare le modifiche alla policy di accesso per una tabella o una vista.
    from google.cloud import bigquery
    
    # TODO(developer): Update and uncomment the lines below.
    
    # Google Cloud Platform project.
    # project_id = "my_project_id"
    
    # Dataset where the table or view is.
    # dataset_id = "my_dataset"
    
    # Table or view name to get the access policy.
    # resource_name = "my_table"
    
    # Principal to grant access to a table or view.
    # For more information about principal identifiers see:
    # https://cloud.google.com/iam/docs/principal-identifiers
    # principal_id = "user:bob@example.com"
    
    # Role to grant to the principal.
    # For more information about BigQuery roles see:
    # https://cloud.google.com/bigquery/docs/access-control
    # role = "roles/bigquery.dataViewer"
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get the full table or view name.
    full_resource_name = f"{project_id}.{dataset_id}.{resource_name}"
    
    # Get the IAM access policy for the table or view.
    policy = client.get_iam_policy(full_resource_name)
    
    # To grant access to a table or view, add bindings to the IAM policy.
    #
    # Find more details about Policy and Binding objects here:
    # https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
    # https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Binding
    binding = {
        "role": role,
        "members": [principal_id, ],
    }
    policy.bindings.append(binding)
    
    # Set the IAM access policy with updated bindings.
    updated_policy = client.set_iam_policy(full_resource_name, policy)
    
    # Show a success message.
    print(
        f"Role '{role}' granted for principal '{principal_id}'"
        f" on resource '{full_resource_name}'."
    )

Ruoli predefiniti che concedono l'accesso a tabelle e viste

Le viste vengono trattate come risorse di tabelle in BigQuery. Per controllo dell'accesso granulare, puoi concedere un ruolo IAM predefinito o personalizzato per una tabella o una vista specifica. La tabella o la vista eredita anche i controlli dell'accesso specificati a livello di set di dati e superiore. Ad esempio, se concedi a un principal il ruolo Proprietario dati BigQuery in un set di dati, questo principal dispone anche delle autorizzazioni di proprietario dei dati per le tabelle e le viste nel set di dati.

I seguenti ruoli IAM predefiniti dispongono di autorizzazioni su tabelle o viste.

Ruolo Descrizione
Proprietario dati BigQuery (roles/bigquery.dataOwner) Se concesso a una tabella o a una vista, questo ruolo concede le seguenti autorizzazioni:
  • Tutte le autorizzazioni per la tabella o la vista.
  • Tutte le autorizzazioni per le policy di accesso alle righe, tranne l'autorizzazione a ignorare le limitazioni dello spostamento cronologico.
  • Imposta categorie e criteri per i dati a livello di colonna.
Editor dati BigQuery (roles/bigquery.dataEditor) Se concesso a una tabella o a una vista, questo ruolo concede le seguenti autorizzazioni:
  • Recupera i metadati, aggiornali, ottieni i controlli dell'accesso ed elimina la tabella o la vista.
  • Recupera (query), esporta, replica e aggiorna i dati delle tabelle.
  • Crea, aggiorna ed elimina indici.
  • Crea e ripristina snapshot.
Visualizzatore dati BigQuery (roles/bigquery.dataViewer) Se concesso a una tabella o a una vista, questo ruolo concede le seguenti autorizzazioni:
  • Recupera i metadati e i controlli dell'accesso per la tabella o la vista.
  • Recupera (query), esporta e replica i dati delle tabelle.
  • Crea snapshot.
BigQuery Metadata Viewer (roles/bigquery.metadataViewer) Se concesso a una tabella o a una vista, questo ruolo concede le seguenti autorizzazioni:
  • Recupera i metadati e i controlli dell'accesso per la tabella o la vista.

Autorizzazioni per tabelle e viste

Le viste vengono trattate come risorse di tabelle in BigQuery. Tutte le autorizzazioni a livello di tabella si applicano alle visualizzazioni.

La maggior parte delle autorizzazioni che iniziano con bigquery.tables si applicano a livello di tabella. bigquery.tables.create e bigquery.tables.list non lo fanno. Per creare ed elencare tabelle o viste, le autorizzazioni bigquery.tables.create e bigquery.tables.list devono essere concesse a un ruolo in un contenitore padre: il set di dati o il progetto.

La tabella seguente elenca tutte le autorizzazioni per tabelle e viste e la risorsa di livello più basso a cui possono essere concesse.

Autorizzazione Risorsa Azione
bigquery.tables.create Set di dati Crea nuove tabelle nel set di dati.
bigquery.tables.createIndex Tabella Crea un indice di ricerca nella tabella.
bigquery.tables.deleteIndex Tabella Elimina un indice di ricerca nella tabella.
bigquery.tables.createSnapshot Tabella Crea uno snapshot della tabella. La creazione di uno snapshot richiede diverse autorizzazioni aggiuntive a livello di tabella e set di dati. Per maggiori dettagli, vedi Autorizzazioni e ruoli per la creazione di snapshot delle tabelle.
bigquery.tables.deleteSnapshot Tabella Elimina uno snapshot della tabella.
bigquery.tables.delete Tabella Eliminare una tabella.
bigquery.tables.createTagBinding Tabella Crea associazioni di tag risorsa in una tabella.
bigquery.tables.deleteTagBinding Tabella Elimina le associazioni di tag risorsa in una tabella.
bigquery.tables.listTagBindings Tabella Elenca le associazioni di tag risorsa in una tabella.
bigquery.tables.listEffectiveTags Tabella Elenca i tag efficaci (applicati e ereditati) per la tabella.
bigquery.tables.export Tabella Esporta i dati della tabella. L'esecuzione di un job di esportazione richiede anche le autorizzazioni bigquery.jobs.create.
bigquery.tables.get Tabella Ottieni i metadati per una tabella.
bigquery.tables.getData Tabella Esegui query sui dati della tabella. L'esecuzione di un job query richiede anche le autorizzazioni bigquery.jobs.create.
bigquery.tables.getIamPolicy Tabella Ottieni i controlli dell'accesso per la tabella.
bigquery.tables.list Set di dati Elenca tutte le tabelle e i metadati delle tabelle nel set di dati.
bigquery.tables.replicateData Tabella Replica i dati della tabella. Questa autorizzazione è necessaria per creare viste materializzate della replica.
bigquery.tables.restoreSnapshot Tabella Ripristina uno snapshot della tabella.
bigquery.tables.setCategory Tabella Imposta i tag delle policy nello schema della tabella.
bigquery.tables.setColumnDataPolicy Tabella Imposta criteri di accesso a livello di colonna su una tabella.
bigquery.tables.setIamPolicy Tabella Imposta i controlli dell'accesso a una tabella.
bigquery.tables.update Tabella Aggiorna tabella. metadata. bigquery.tables.get è necessario anche per aggiornare i metadati della tabella nella console.
bigquery.tables.updateData Tabella Aggiorna i dati della tabella.
bigquery.tables.updateIndex Tabella Aggiorna un indice di ricerca nella tabella.

Visualizzare i controlli dell'accesso per una tabella o una vista

Per visualizzare i controlli dell'accesso per una tabella o una vista, scegli una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, un set di dati e seleziona una tabella o una vista.

  3. Fai clic su Condividi.

    I controlli dell'accesso alla tabella o alla vista vengono visualizzati nel riquadro Condividi.

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per ottenere una policy di accesso esistente e restituirla a un file locale in formato JSON, utilizza il comando bq get-iam-policy in Cloud Shell:

    bq get-iam-policy \
        --table=true \
        PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • DATASET: il nome del set di dati
    • RESOURCE: il nome della tabella o della vista di cui vuoi visualizzare la policy
    • PATH_TO_FILE: il percorso del file JSON sulla macchina locale
  3. SQL

    Esegui una query sulla vista INFORMATION_SCHEMA.OBJECT_PRIVILEGES. Le query per recuperare i controlli dell'accesso per una tabella o una vista devono specificare object_schema e object_name.

    1. Nella console Trusted Cloud , vai alla pagina BigQuery.

      Vai a BigQuery

    2. Nell'editor di query, inserisci la seguente istruzione:

      SELECT
      COLUMN_LIST
      FROM
        PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
      WHERE
      object_schema = "DATASET" AND object_name = "TABLE";

      Sostituisci quanto segue:

    3. Fai clic su Esegui.

    Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

    Esempio:

    SELECT
    object_name, privilege_type, grantee
    FROM
    my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE
    object_schema = "mydataset" AND object_name = "mytable";
    +------------------+-----------------------------+--------------------------+
    |   object_name    |  privilege_type             | grantee                  |
    +------------------+-----------------------------+--------------------------+
    | mytable          | roles/bigquery.dataEditor   | group:group@example.com|
    | mytable          | roles/bigquery.dataOwner    | user:user@example.com|
    +------------------+-----------------------------+--------------------------+
    

    API

    Per recuperare la policy corrente, chiama il metodo tables.getIamPolicy.

    Vai

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione IAM().Policy() della risorsa. Poi chiama la funzione Roles() per ottenere la policy di accesso per una tabella o una vista.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // viewTableOrViewAccessPolicies retrieves the ACL for the given resource
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func viewTableOrViewAccessPolicies(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "my-dataset-id"
    	// resourceID := "my-resource-id"
    
    	ctx := context.Background()
    
    	// Create new client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource's policy access.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    
    import com.google.cloud.Policy;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class GetTableOrViewAccessPolicy {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_RESOURCE_NAME";
        getTableOrViewAccessPolicy(projectId, datasetName, resourceName);
      }
    
      public static void getTableOrViewAccessPolicy(
          String projectId, String datasetName, String resourceName) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Get the table IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
    
          // Show policy details.
          // Find more information about the Policy Class here:
          // https://cloud.google.com/java/docs/reference/google-cloud-core/latest/com.google.cloud.Policy
          System.out.println(
              "IAM policy info of resource \"" + resourceName + "\" retrieved succesfully");
          System.out.println();
          System.out.println("IAM policy info: " + policy.toString());
        } catch (BigQueryException e) {
          System.out.println("IAM policy info not retrieved. \n" + e.toString());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Recupera la policy IAM per una tabella o una vista utilizzando la funzione Table#getIamPolicy(). I dettagli della policy di accesso sono disponibili nell'oggetto policy restituito.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID"
    // const datasetId = "YOUR_DATASET_ID"
    // const resourceName = "YOUR_RESOURCE_NAME";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function viewTableOrViewAccessPolicy() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(resourceName);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings if they don't exist
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // Show policy details.
      // Find more details for the Policy object here:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/Policy
      console.log(`Access Policy details for table or view '${resourceName}'.`);
      console.log(`Bindings: ${JSON.stringify(policy.bindings, null, 2)}`);
      console.log(`etag: ${policy.etag}`);
      console.log(`Version: ${policy.version}`);
    }

Revocare l'accesso a una tabella o una vista

Per revocare l'accesso a una tabella o a una vista, seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, un set di dati e seleziona una tabella o una vista.

  3. Nel riquadro dei dettagli, fai clic su Condividi.

  4. Nella finestra di dialogo Condividi, espandi l'entità di cui vuoi revocare l'accesso.

  5. Fai clic su Elimina.

  6. Nella finestra di dialogo Vuoi rimuovere il ruolo dall'entità?, fai clic su Rimuovi.

  7. Per tornare alla tabella o visualizzare i dettagli, fai clic su Chiudi.

SQL

Per rimuovere l'accesso a tabelle o viste dalle entità, utilizza l'istruzione REVOKE DCL:

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, inserisci la seguente istruzione:

    REVOKE `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    FROM "USER_LIST"

    Sostituisci quanto segue:

    • ROLE_LIST: un ruolo o un elenco di ruoli separati da virgole che vuoi revocare
    • RESOURCE_TYPE: il tipo di risorsa da cui viene revocato il ruolo

      I valori supportati includono TABLE, VIEW, MATERIALIZED VIEW e EXTERNAL TABLE.

    • RESOURCE_NAME: il nome della risorsa per cui vuoi revocare l'autorizzazione
    • USER_LIST: un elenco separato da virgole di utenti a cui verranno revocati i ruoli

      Per un elenco dei formati validi, vedi user_list.

  3. Fai clic su Esegui.

Per maggiori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

L'esempio seguente revoca il ruolo Proprietario dati BigQuery su myTable:

REVOKE `roles/bigquery.dataOwner`
ON TABLE `myProject`.myDataset.myTable
FROM "group:group@example.com", "serviceAccount:user@myproject.s3ns-system.iam.gserviceaccount.com"

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per revocare l'accesso a una tabella o a una vista, utilizza il comando bq remove-iam-policy-binding:

    bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
    --table=true RESOURCE

    Sostituisci quanto segue:

    • MEMBER_TYPE: il tipo di membro, ad esempio user, group, serviceAccount o domain
    • MEMBER: l'indirizzo email o il nome di dominio del membro
    • ROLE: il ruolo che vuoi revocare al membro
    • RESOURCE: il nome della tabella o della vista di cui vuoi aggiornare la policy
  3. API

    1. Per recuperare la policy corrente, chiama il metodo tables.getIamPolicy.

    2. Modifica la policy per rimuovere membri o associazioni oppure entrambi. Per il formato richiesto per le norme, consulta l'argomento di riferimento Norme.

    3. Chiama tables.setIamPolicy per scrivere la policy aggiornata.

    Vai

    Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Chiama la funzione policy.Remove() per rimuovere l'accesso. Quindi chiama la funzione IAM().SetPolicy() per salvare le modifiche alla policy di accesso per una tabella o una vista.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    	"cloud.google.com/go/iam"
    )
    
    // revokeTableOrViewAccessPolicies creates a new ACL removing the VIEWER role to group "example-analyst-group@google.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func revokeTableOrViewAccessPolicies(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// resourceID := "myresource"
    
    	ctx := context.Background()
    
    	// Create new client
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource policy.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Find more details about IAM Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/iam#RoleName
    	entityID := "example-analyst-group@google.com"
    	roleType := iam.Viewer
    
    	// Revoke policy access.
    	policy.Remove(fmt.Sprintf("group:%s", entityID), roleType)
    
    	// Update resource's policy.
    	err = client.Dataset(datasetID).Table(resourceID).IAM().SetPolicy(ctx, policy)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Get resource policy again expecting the update.
    	policy, err = client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    import com.google.cloud.Identity;
    import com.google.cloud.Policy;
    import com.google.cloud.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    public class RevokeAccessToTableOrView {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_RESOURCE_NAME";
        // Role to remove from the access policy
        Role role = Role.of("roles/bigquery.dataViewer");
        // Identity to remove from the access policy
        Identity user = Identity.user("user-add@example.com");
        revokeAccessToTableOrView(projectId, datasetName, resourceName, role, user);
      }
    
      public static void revokeAccessToTableOrView(
          String projectId, String datasetName, String resourceName, Role role, Identity identity) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Remove either identities or roles, or both from bindings and replace it in
          // the current IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
          // Create a copy of an immutable map.
          Map<Role, Set<Identity>> bindings = new HashMap<>(policy.getBindings());
    
          // Remove all identities with a specific role.
          bindings.remove(role);
          // Update bindings.
          policy = policy.toBuilder().setBindings(bindings).build();
    
          // Remove one identity in all the existing roles.
          for (Role roleKey : bindings.keySet()) {
            if (bindings.get(roleKey).contains(identity)) {
              // Create a copy of an immutable set if the identity is present in the role.
              Set<Identity> identities = new HashSet<>(bindings.get(roleKey));
              // Remove identity.
              identities.remove(identity);
              bindings.put(roleKey, identities);
              if (bindings.get(roleKey).isEmpty()) {
                // Remove the role if it has no identities.
                bindings.remove(roleKey);
              }
            }
          }
          // Update bindings.
          policy = policy.toBuilder().setBindings(bindings).build();
    
          // Update the IAM policy by setting the new one.
          bigquery.setIamPolicy(tableId, policy);
    
          System.out.println("IAM policy of resource \"" + resourceName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("IAM policy was not updated. \n" + e.toString());
        }
      }
    }

    Node.js

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di BigQuery per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configurare l'autenticazione per le librerie client.

    Prima di eseguire gli esempi di codice, imposta la variabile di ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.

    Recupera la policy IAM attuale per una tabella o una vista utilizzando il metodo Table#getIamPolicy(). Modifica la policy per rimuovere il ruolo o l'entità desiderati, quindi applica la policy aggiornata utilizzando il metodo Table#setIamPolicy().
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID"
    // const datasetId = "YOUR_DATASET_ID"
    // const tableId = "YOUR_TABLE_ID"
    // const roleToRemove = "YOUR_ROLE"
    // const principalToRemove = "YOUR_PRINCIPAL_ID"
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function revokeAccessToTableOrView() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(tableId);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings array.
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // To revoke access to a table or view,
      // remove bindings from the Table or View policy.
      //
      // Find more details about Policy objects here:
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
    
      if (principalToRemove) {
        // Create a copy of bindings for modifications.
        const bindings = [...policy.bindings];
    
        // Filter out the principal from each binding.
        for (const binding of bindings) {
          if (binding.members) {
            binding.members = binding.members.filter(
              m => m !== principalToRemove
            );
          }
        }
    
        // Filter out bindings with empty members.
        policy.bindings = bindings.filter(
          binding => binding.members && binding.members.length > 0
        );
      }
    
      if (roleToRemove) {
        // Filter out all bindings with the roleToRemove
        // and assign a new list back to the policy bindings.
        policy.bindings = policy.bindings.filter(b => b.role !== roleToRemove);
      }
    
      // Set the IAM access policy with updated bindings.
      await table.setIamPolicy(policy);
    
      // Both role and principal are removed
      if (roleToRemove !== null && principalToRemove !== null) {
        console.log(
          `Role '${roleToRemove}' revoked for principal '${principalToRemove}' on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // Only role is removed
      if (roleToRemove !== null && principalToRemove === null) {
        console.log(
          `Role '${roleToRemove}' revoked for all principals on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // Only principal is removed
      if (roleToRemove === null && principalToRemove !== null) {
        console.log(
          `Access revoked for principal '${principalToRemove}' on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // No changes were made
      if (roleToRemove === null && principalToRemove === null) {
        console.log(
          `No changes made to access policy for '${datasetId}.${tableId}'.`
        );
      }
    }

Utilizzare i controlli dell'accesso per le routine

Per fornire un feedback o richiedere assistenza per questa funzionalità, invia un'email all'indirizzo bq-govsec-eng@google.com.

Puoi fornire l'accesso a una routine concedendo a un'entità IAM](/iam/docs/principal-identifiers#allow) un ruolo predefinito o personalizzato che determina cosa può fare l'entità con la routine. Questa operazione è nota anche come collegamento di una policy di autorizzazione a una risorsa. Dopo aver concesso l'accesso, puoi visualizzare i controlli dell'accesso per la routine e puoi revocare l'accesso alla routine.

Concedere l'accesso a una routine

Per controllo dell'accesso granulare, puoi concedere un ruolo IAM predefinito o personalizzato per una routine specifica. La routine eredita anche i controlli di accesso specificati a livello di set di dati e superiore. Ad esempio, se concedi a un principal il ruolo Proprietario dati BigQuery in un set di dati, questo principal dispone anche delle autorizzazioni Proprietario dati per le routine nel set di dati.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, il set di dati, Routine e seleziona una routine.

  3. Fai clic su Condividi.

  4. Fai clic su Aggiungi membri.

  5. Nel campo Nuovi membri, inserisci un'entità.

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

  7. Fai clic su Salva.

  8. Per tornare alle informazioni sulla routine, fai clic su Fine.

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per scrivere le informazioni sulle routine esistenti (inclusi i controlli dell'accesso) in un file JSON, utilizza il comando bq get-iam-policy:

    bq get-iam-policy \
        PROJECT_ID:DATASET.ROUTINE \
        > PATH_TO_FILE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • DATASET: il nome del set di dati che contiene la routine che vuoi aggiornare
    • ROUTINE: il nome della risorsa da aggiornare
    • PATH_TO_FILE: il percorso del file JSON sul computer locale
  3. Apporta modifiche alla sezione bindings del file JSON. Un'associazione vincola una o più entità a un singolo role. Le entità possono essere account utente, service account, gruppi Google e domini. Ad esempio, la sezione bindings di un file JSON di una routine avrebbe il seguente aspetto:

    {
      "bindings": [
        {
          "role": "roles/bigquery.dataViewer",
          "members": [
            "user:user@example.com",
            "group:group@example.com",
            "domain:example.com",
          ]
        },
      ],
      "etag": "BwWWja0YfJA=",
      "version": 1
    }
  4. Per aggiornare la policy di accesso, utilizza il comando bq set-iam-policy:

    bq set-iam-policy PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
  5. Per verificare le modifiche controllo dell'accesso, utilizza di nuovo il comando bq get-iam-policy senza scrivere le informazioni in un file:

    bq get-iam-policy --format=prettyjson \\
        PROJECT_ID:DATASET.ROUTINE
  6. API

    1. Per recuperare la policy corrente, chiama il metodo routines.getIamPolicy.

    2. Modifica la policy per aggiungere entità, associazioni o entrambe. Per il formato richiesto per le norme, consulta l'argomento di riferimento Norme.

    3. Chiama routines.setIamPolicy per scrivere la policy aggiornata.

Ruoli predefiniti che concedono l'accesso alle routine

Per controllo dell'accesso granulare, puoi concedere un ruolo IAM predefinito o personalizzato per una routine specifica. La routine eredita anche i controlli di accesso specificati a livello di set di dati e superiore. Ad esempio, se concedi a un'entità il ruolo Proprietario dati per un set di dati, questa entità dispone anche delle autorizzazioni Proprietario dati per le routine nel set di dati tramite ereditarietà.

I seguenti ruoli IAM predefiniti dispongono di autorizzazioni sulle routine.

Ruolo Descrizione
Proprietario dati BigQuery (roles/bigquery.dataOwner) Se concesso per una routine, questo ruolo concede le seguenti autorizzazioni:
  • Tutte le autorizzazioni per la routine.

Non devi concedere il ruolo Proprietario dei dati a livello di routine. L'editor dei dati concede anche tutte le autorizzazioni per la routine ed è un ruolo con meno privilegi.

Editor dati BigQuery (roles/bigquery.dataEditor) Se concesso per una routine, questo ruolo concede le seguenti autorizzazioni:
  • Tutte le autorizzazioni per la routine.
Visualizzatore dati BigQuery (roles/bigquery.dataViewer) Se concesso per una routine, questo ruolo concede le seguenti autorizzazioni:
  • In una query, fai riferimento a una routine creata da un'altra persona.
BigQuery Metadata Viewer (roles/bigquery.metadataViewer) Se concesso per una routine, questo ruolo concede le seguenti autorizzazioni:
  • In una query, fai riferimento a una routine creata da un'altra persona.

Autorizzazioni per le routine

La maggior parte delle autorizzazioni che iniziano con bigquery.routines si applicano a livello di routine. bigquery.routines.create e bigquery.routines.list non lo fanno. Per creare ed elencare le routine, devono essere concesse le autorizzazioni bigquery.routines.create e bigquery.routines.list a un ruolo nel contenitore padre, ovvero il set di dati.

La tabella seguente elenca tutte le autorizzazioni per le routine e la risorsa di livello più basso a cui possono essere concesse.

Autorizzazione Risorsa Descrizione
bigquery.routines.create Set di dati Crea una routine nel set di dati. Questa autorizzazione richiede anche bigquery.jobs.create per eseguire un job di query che contiene un'istruzione CREATE FUNCTION.
bigquery.routines.delete Routine Elimina una routine.
bigquery.routines.get Routine Fare riferimento a una routine creata da un'altra persona. Questa autorizzazione richiede anche bigquery.jobs.create per eseguire un job di query che faccia riferimento alla routine. Inoltre, devi disporre dell'autorizzazione per accedere a qualsiasi risorsa a cui fa riferimento la routine, ad esempio tabelle o viste.
bigquery.routines.list Set di dati Elenca le routine nel set di dati e mostra i metadati delle routine.
bigquery.routines.update Routine Aggiorna le definizioni e i metadati delle routine.
bigquery.routines.getIamPolicy Routine Ottieni i controlli di accesso per la routine.
bigquery.routines.setIamPolicy Routine Imposta i controlli dell'accesso per la routine.

Visualizzare i controlli di accesso per una routine

Per visualizzare i controlli di accesso per una routine, scegli una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, il set di dati, Routine e seleziona una routine.

  3. Fai clic su Condividi.

    I controlli di accesso della routine vengono visualizzati nel riquadro Condividi.

bq

Il comando bq get-iam-policy non supporta la visualizzazione dei controlli di accesso in una routine.

SQL

La visualizzazione INFORMATION_SCHEMA.OBJECT_PRIVILEGES non mostra i controlli di accesso per le routine.

API

Per recuperare la policy corrente, chiama il metodo routines.getIamPolicy.

Revocare l'accesso a una routine

Per revocare l'accesso a una routine, seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, espandi il progetto, un set di dati, Routine e seleziona una routine.

  3. Nel riquadro dei dettagli, fai clic su Condivisione > Autorizzazioni.

  4. Nella finestra di dialogo Autorizzazioni di routine, espandi l'entità di cui vuoi revocare l'accesso.

  5. Fai clic su Rimuovi entità.

  6. Nella finestra di dialogo Vuoi rimuovere il ruolo dall'entità?, fai clic su Rimuovi.

  7. Fai clic su Chiudi.

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Per scrivere le informazioni sulle routine esistenti (inclusi i controlli dell'accesso) in un file JSON, utilizza il comando bq get-iam-policy:

    bq get-iam-policy --routine PROJECT_ID:DATASET.ROUTINE > PATH_TO_FILE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • DATASET: il nome del set di dati che contiene la routine che vuoi aggiornare
    • ROUTINE: il nome della risorsa da aggiornare
    • PATH_TO_FILE: il percorso del file JSON sul computer locale

    Nel file delle norme, il valore di version rimane 1. Questo numero si riferisce alla versione dello schema del criterio IAM, non alla versione del criterio. Il valore per etag è il numero di versione del criterio.

  3. Apporta modifiche alla sezione access del file JSON. Puoi rimuovere una qualsiasi delle voci specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi anche rimuovere uno dei seguenti elementi: userByEmail, groupByEmail e domain.

    Ad esempio, la sezione access di un file JSON di una routine avrebbe il seguente aspetto:

    {
     "bindings": [
       {
         "role": "roles/bigquery.dataViewer",
         "members": [
           "user:user@example.com",
           "group:group@example.com",
           "domain:google.com",
         ]
       },
     ],
     "etag": "BwWWja0YfJA=",
     "version": 1
    }
  4. Per aggiornare la policy di accesso, utilizza il comando bq set-iam-policy:

    bq set-iam-policy --routine PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
  5. Per verificare le modifiche controllo dell'accesso, utilizza di nuovo il comando get-iam-policy senza scrivere le informazioni in un file:

    bq get-iam-policy --routine --format=prettyjson PROJECT_ID:DATASET.ROUTINE
  6. API

    1. Per recuperare la policy corrente, chiama il metodo routines.getIamPolicy.

    2. Modifica la policy per aggiungere entità o associazioni oppure entrambe. Per il formato richiesto per le norme, consulta l'argomento di riferimento Norme.

Visualizzare i controlli dell'accesso ereditati per una risorsa

Puoi esaminare i ruoli IAM ereditati per una risorsa utilizzando l'interfaccia utente web di BigQuery. Devi disporre delle autorizzazioni appropriate per visualizzare l'ereditarietà nella console. Per esaminare l'ereditarietà per un set di dati, una tabella, una vista o una routine:

  1. Nella console Trusted Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, seleziona il set di dati oppure espandi il set di dati e seleziona una tabella, una vista o una routine.

  3. Per un set di dati, fai clic su Condivisione. Per una tabella, una visualizzazione o una routine, fai clic su Condividi.

  4. Verifica che l'opzione Mostra ruoli ereditati nella tabella sia attiva.

    L&#39;opzione Mostra ruoli ereditati nella tabella nella console

  5. Espandi un ruolo nella tabella.

  6. Nella colonna Ereditarietà, l'icona esagonale indica se il ruolo è stato ereditato da una risorsa principale.

    L&#39;icona Ereditata da una risorsa padre

Negare l'accesso a una risorsa

I criteri di negazione IAM ti consentono di impostare sistemi di protezione per l'accesso alle risorse BigQuery. Puoi definire regole di negazione che impediscono alle entità selezionate di utilizzare determinate autorizzazioni, indipendentemente dai ruoli loro concessi.

Per informazioni su come creare, aggiornare ed eliminare le policy di negazione, consulta Nega l'accesso alle risorse.

Casi speciali

Considera i seguenti scenari quando crei criteri di negazione IAM per alcune autorizzazioni BigQuery:

  • L'accesso alle risorse autorizzate (viste, routine, set di dati, o stored procedure) ti consente di creare, eliminare> o manipolare una tabella, nonché di leggere e modificare i dati della tabella, anche se non disponi dell'autorizzazione diretta per eseguire queste operazioni. Può anche recuperare dati o metadati del modello e richiamare altre stored procedure nella tabella sottostante. Questa funzionalità implica che le risorse autorizzate dispongono delle seguenti autorizzazioni:

    • bigquery.tables.get
    • bigquery.tables.list
    • bigquery.tables.getData
    • bigquery.tables.updateData
    • bigquery.tables.create
    • bigquery.tables.delete
    • bigquery.routines.get
    • bigquery.routines.list
    • bigquery.datasets.get
    • bigquery.models.getData
    • bigquery.models.getMetadata

    Per negare l'accesso a queste risorse autorizzate, aggiungi uno dei seguenti valori al campo deniedPrincipal quando crei il criterio di negazione:

    Valore Caso d'uso
    principalSet://goog/public:all Blocca tutte le entità, incluse le risorse autorizzate.
    principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/* Blocca tutte le risorse BigQuery autorizzate nel progetto specificato. PROJECT_NUMBER è un identificatore univoco generato automaticamente per il tuo progetto di tipo INT64.
  • Per esentare determinate entità dalla policy di negazione, specifica queste entità nel campo exceptionPrincipals della policy di negazione. Ad esempio: exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*".

  • BigQuery memorizza nella cache i risultati delle query di un proprietario del job per 24 ore, a cui il proprietario del job può accedere senza bisogno dell'autorizzazione bigquery.tables.getData sulla tabella contenente i dati. Pertanto, l'aggiunta di un criterio di negazione IAM all'autorizzazione bigquery.tables.getData non blocca l'accesso ai risultati memorizzati nella cache per il proprietario del job fino alla scadenza della cache. Per bloccare l'accesso del proprietario del job ai risultati memorizzati nella cache, crea una policy di negazione separata per l'autorizzazione bigquery.jobs.create.

  • Per impedire l'accesso involontario ai dati quando utilizzi le norme di negazione per bloccare le operazioni di lettura dei dati, ti consigliamo di esaminare e revocare anche gli abbonamenti esistenti al set di dati.

  • Per creare un criterio di rifiuto IAM per la visualizzazione dei controlli dell'accesso al set di dati, nega le seguenti autorizzazioni:

    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
  • Per creare un criterio di negazione IAM per aggiornare i controlli dell'accesso al set di dati, nega le seguenti autorizzazioni:

    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy

Passaggi successivi

Scopri come utilizzare il metodo projects.testIamPermissions per testare l'accesso degli utenti a una risorsa.