Controlla l'accesso alle risorse con IAM

Questo documento descrive come visualizzare l'attuale criterio di accesso di una risorsa, come concedere l'accesso a una risorsa e come revocare l'accesso a una risorsa.

Questo documento acquisisce familiarità con il sistema Identity and Access Management (IAM) in Google Cloud.

Ruolo richiesto

Per ottenere le autorizzazioni necessarie per modificare i criteri IAM delle risorse, chiedi all'amministratore di concederti il ruolo IAM Proprietario dei dati BigQuery (roles/bigquery.dataOwner) nel progetto. Per maggiori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene le autorizzazioni necessarie per modificare i criteri IAM per le risorse. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

  • Per ottenere il criterio di accesso di un set di dati: bigquery.datasets.get
  • Per impostare i criteri di accesso di un set di dati: bigquery.datasets.update
  • Solo console, per ottenere il criterio di accesso di un set di dati: bigquery.datasets.getIamPolicy
  • Solo console, per impostare il criterio di accesso di un set di dati: bigquery.datasets.setIamPolicy
  • Per ottenere un criterio per una tabella o una vista: bigquery.tables.getIamPolicy
  • Per impostare un criterio per una tabella o una vista: bigquery.tables.setIamPolicy
  • Facoltativo, per creare lo strumento bq o i job SQL SQL: bigquery.jobs.create

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

Visualizza il criterio di accesso di una risorsa

Le seguenti sezioni descrivono come visualizzare i criteri di accesso delle diverse risorse.

Visualizza il criterio di accesso di un set di dati

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.

  3. Fai clic su Condivisione > Autorizzazioni.

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

bq

Per ottenere un criterio esistente e eseguirne l'output in un file locale in 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 tuo set di dati
  • PATH_TO_FILE: il percorso del file JSON sulla tua macchina locale

API

Per applicare i controlli di accesso quando viene creato il set di dati, chiama datasets.insert con un elemento dataset resource definito. Per aggiornare i controlli di accesso, chiama datasets.patch e utilizza la proprietà access nella risorsa Dataset.

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

Visualizzare il criterio di accesso di una tabella o di una visualizzazione

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 visualizzazione.

  3. Fai clic su Condividi.

    I criteri di accesso alla tabella o alla visualizzazione vengono visualizzati nel riquadro Condividi.

bq

Per ottenere un criterio di accesso esistente e generarlo in un file locale in JSON, usa 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 tuo set di dati
  • RESOURCE: il nome della tabella o della vista di cui vuoi visualizzare il criterio
  • PATH_TO_FILE: il percorso del file JSON sulla tua macchina locale

API

Per recuperare il criterio attuale, chiama il metodo tables.getIamPolicy.

Concedi l'accesso a una risorsa

Le seguenti sezioni descrivono come concedere l'accesso a risorse diverse.

Concedere l'accesso a un set di dati

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 alle entità l'accesso ai set di dati, utilizza l'istruzione DCL di GRANT:

  1. In Google Cloud Console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor 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: tipo di risorsa a cui viene applicato il ruolo

      I valori supportati includono SCHEMA (equivalente al set di dati), TABLE, VIEW e EXTERNAL TABLE.

    • RESOURCE_NAME: il nome della risorsa per 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, consulta user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta la sezione Esecuzione di query interattive.

bq

  1. Per scrivere le informazioni del 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 tuo set di dati
    • PATH_TO_FILE: il percorso del file JSON sulla tua macchina locale
  2. Apporta modifiche alla sezione access del file JSON. Puoi aggiungere una qualsiasi delle voci specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi anche aggiungere uno dei seguenti valori: 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"
      }
     ],
     ...
    }
    

  3. Una volta apportate le 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
    
  4. Per verificare le modifiche al controllo dell'accesso, utilizza nuovamente il comando bq show senza scrivere le informazioni in un file:

    bq show --format=prettyjson PROJECT_ID:DATASET
    

API

Per applicare i controlli di accesso quando viene creato il set di dati, chiama il metodo datasets.insert con una risorsa set di dati definita. Per aggiornare i controlli di 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 di accesso.

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di BigQuery.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateDatasetAccessControl demonstrates how the access control policy of a dataset
// can be amended by adding an additional entry corresponding to a specific user identity.
func updateDatasetAccessControl(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	// Append a new access control entry to the existing access list.
	update := bigquery.DatasetMetadataToUpdate{
		Access: append(meta.Access, &bigquery.AccessEntry{
			Role:       bigquery.ReaderRole,
			EntityType: bigquery.UserEmailEntity,
			Entity:     "sample.bigquery.dev@gmail.com"},
		),
	}

	// Leverage the ETag for the update to assert there's been no modifications to the
	// dataset since the metadata was originally read.
	if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

import com.google.cloud.bigquery.Acl;
import com.google.cloud.bigquery.Acl.Role;
import com.google.cloud.bigquery.Acl.User;
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 java.util.ArrayList;

public class UpdateDatasetAccess {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Create a new ACL granting the READER role to "sample.bigquery.dev@gmail.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    Acl newEntry = Acl.of(new User("sample.bigquery.dev@gmail.com"), Role.READER);

    updateDatasetAccess(datasetName, newEntry);
  }

  public static void updateDatasetAccess(String datasetName, Acl newEntry) {
    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();

      Dataset dataset = bigquery.getDataset(datasetName);

      // Get a copy of the ACLs list from the dataset and append the new entry
      ArrayList<Acl> acls = new ArrayList<>(dataset.getAcl());
      acls.add(newEntry);

      bigquery.update(dataset.toBuilder().setAcl(acls).build());
      System.out.println("Dataset Access Control updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Dataset Access control was not updated \n" + e.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di BigQuery.

Imposta la proprietà dataset.access_entries con i controlli di accesso per un set di dati. Quindi chiama la funzione client.update_dataset() per aggiornare la proprietà.

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
dataset_id = "your-project.your_dataset"

# TODO(developer): Set entity_id to the ID of the email or group from whom
# you are adding access. Alternatively, to the JSON REST API representation
# of the entity, such as a view's table reference.
entity_id = "user-or-group-to-add@example.com"

from google.cloud.bigquery.enums import EntityTypes

# TODO(developer): Set entity_type to the type of entity you are granting access to.
# Common types include:
#
# * "userByEmail" -- A single user or service account. For example "fred@example.com"
# * "groupByEmail" -- A group of users. For example "example@googlegroups.com"
# * "view" -- An authorized view. For example
#       {"projectId": "p", "datasetId": "d", "tableId": "v"}
#
# For a complete reference, see the REST API reference documentation:
# https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#Dataset.FIELDS.access
entity_type = EntityTypes.GROUP_BY_EMAIL

# TODO(developer): Set role to a one of the "Basic roles for datasets"
# described here:
# https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
role = "READER"

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

dataset = client.get_dataset(dataset_id)  # Make an API request.

entries = list(dataset.access_entries)
entries.append(
    bigquery.AccessEntry(
        role=role,
        entity_type=entity_type,
        entity_id=entity_id,
    )
)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ["access_entries"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with modified user permissions.".format(full_dataset_id)
)

Concedere l'accesso a una tabella o 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 ai dettagli, fai clic su Chiudi.

SQL

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

  1. In Google Cloud Console, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor 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: tipo di risorsa a cui viene applicato il ruolo

      I valori supportati includono SCHEMA (equivalente al set di dati), TABLE, VIEW e EXTERNAL TABLE.

    • RESOURCE_NAME: il nome della risorsa per 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, consulta user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta la sezione Esecuzione di query interattive.

bq

  1. Per scrivere la tabella o le informazioni di visualizzazione esistenti (inclusi i controlli di accesso) in un file JSON, utilizza il comando bq get-iam-policy:

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

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • DATASET: il nome del set di dati che contiene la tabella o la vista che vuoi aggiornare
    • TABLE_OR_VIEW: il nome della risorsa da aggiornare
    • PATH_TO_FILE: il percorso del file JSON sulla macchina locale
  2. Apporta modifiche alla sezione access del file JSON. Puoi aggiungere una qualsiasi delle voci specialGroup: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi anche aggiungere uno dei seguenti valori: userByEmail, groupByEmail e domain. Ad esempio, la sezione access di un file JSON di una tabella o di una vista 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"
      }
     ],
     ...
    }
    

  3. Utilizza il comando set-iam-policy per aggiornare il criterio:

    bq set-iam-policy \
        PROJECT_ID:DATASET.TABLE_OR_VIEW \
        > PATH_TO_FILE
    

  4. Per verificare le modifiche al controllo dell'accesso, utilizza nuovamente il comando bq get-iam-policy senza scrivere le informazioni in un file:

    bq get-iam-policy --format=prettyjson \
        PROJECT_ID:DATASET.TABLE_OR_VIEW
    

API

  1. Per recuperare il criterio attuale, chiama il metodo tables.getIamPolicy.
  2. Modifica il criterio per aggiungere membri e/o associazioni. Per il formato richiesto per le norme, consulta l'argomento delle norme Norme.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

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;

// Sample to create iam policy for table
public class CreateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    createIamPolicy(datasetName, tableName);
  }

  public static void createIamPolicy(String datasetName, String tableName) {
    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();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      policy
          .toBuilder()
          .addIdentity(Role.of("roles/bigquery.dataViewer"), Identity.allUsers())
          .build();
      bigquery.setIamPolicy(tableId, policy);
      System.out.println("Iam policy created successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not created. \n" + e.toString());
    }
  }
}

Revoca accesso a una risorsa

Le sezioni seguenti descrivono come revocare l'accesso alle diverse risorse.

Revoca accesso a un set di dati

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.

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

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

  5. Fai clic su Rimuovi entità.

  6. Nella finestra di dialogo Rimuovi 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 ai set di dati dalle entità, utilizza l'istruzione DCL di REVOKE:

  1. In Google Cloud Console, vai alla pagina BigQuery.

    Vai a BigQuery

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

    REVOKE 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 revocare
    • RESOURCE_TYPE: tipo di risorsa da cui viene revocato il ruolo

      I valori supportati includono SCHEMA (equivalente al set di dati), TABLE, 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 con i ruoli revocati

      Per un elenco dei formati validi, consulta user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta la sezione Esecuzione di query interattive.

bq

  1. Per scrivere le informazioni del 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 tuo set di dati
    • PATH_TO_FILE: il percorso del file JSON sulla macchina locale
  2. Apporta modifiche alla sezione access del file JSON. Puoi rimuovere qualsiasi voce 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"
      }
     ],
     ...
    }
    

  3. Una volta apportate le 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
    
  4. Per verificare le modifiche al controllo dell'accesso, utilizza nuovamente il comando show senza scrivere le informazioni in un file:

    bq show --format=prettyjson PROJECT_ID:DATASET
    

API

Chiama il numero datasets.patch e utilizza la proprietà access nella risorsa Dataset per aggiornare i controlli di accesso.

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

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di BigQuery.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// revokeDatasetAccess updates the access control on a dataset to remove all
// access entries that reference a specific entity.
func revokeDatasetAccess(projectID, datasetID, entity string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// entity := "user@mydomain.com"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}

	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,
		}
		if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
			return err
		}
	}
	return nil
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di BigQuery.

Imposta la proprietà dataset.access_entries con i controlli di accesso per un set di dati. Quindi chiama la funzione client.update_dataset() per aggiornare la proprietà.

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
dataset_id = "your-project.your_dataset"

# TODO(developer): Set entity_id to the ID of the email or group from whom you are revoking access.
entity_id = "user-or-group-to-remove@example.com"

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

dataset = client.get_dataset(dataset_id)  # Make an API request.

entries = list(dataset.access_entries)
dataset.access_entries = [
    entry for entry in entries if entry.entity_id != entity_id
]

dataset = client.update_dataset(
    dataset,
    # Update just the `access_entries` property of the dataset.
    ["access_entries"],
)  # Make an API request.

full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
print(f"Revoked dataset access for '{entity_id}' to ' dataset '{full_dataset_id}.'")

Revocare l'accesso a una tabella o 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 visualizzazione.

  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 Rimuovi ruolo dall'entità?, fai clic su Rimuovi.

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

SQL

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

  1. In Google Cloud Console, vai alla pagina BigQuery.

    Vai a BigQuery

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

    REVOKE 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 revocare
    • RESOURCE_TYPE: tipo di risorsa da cui viene revocato il ruolo

      I valori supportati includono SCHEMA (equivalente al set di dati), TABLE, 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 con i ruoli revocati

      Per un elenco dei formati validi, consulta user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta la sezione Esecuzione di query interattive.

bq

  1. Per scrivere la tabella o le informazioni di visualizzazione esistenti (inclusi i controlli di accesso) in un file JSON, utilizza il comando bq get-iam-policy:

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

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto
    • DATASET: il nome del set di dati che contiene la tabella o la vista che vuoi aggiornare
    • TABLE_OR_VIEW: il nome della risorsa da aggiornare
    • PATH_TO_FILE: il percorso del file JSON sulla macchina locale

  2. Apporta modifiche alla sezione access del file JSON. Puoi rimuovere qualsiasi voce 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 tabella o di una vista 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"
      }
     ],
     ...
    }
    

  3. Utilizza il comando bq set-iam-policy per aggiornare il criterio:

     bq set-iam-policy \
         PROJECT_ID:DATASET.TABLE_OR_VIEW \
         > PATH_TO_FILE
    

  4. Per verificare le modifiche al controllo dell'accesso, utilizza nuovamente il comando get-iam-policy senza scrivere le informazioni in un file:

    bq get-iam-policy --format=prettyjson \
        PROJECT_ID:DATASET.TABLE_OR_VIEW
    

API

  1. Per recuperare il criterio attuale, chiama il metodo tables.getIamPolicy.
  2. Modifica il criterio per rimuovere membri e/o associazioni. Per il formato richiesto per le norme, consulta l'argomento delle norme Norme.

  3. Chiama il numero tables.setIamPolicy per scrivere il criterio aggiornato. Nota: le associazioni vuote senza membri non sono consentite e generano un errore.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di BigQuery che utilizza librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

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.Map;
import java.util.Set;

// Sample to update iam policy in table
public class UpdateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    updateIamPolicy(datasetName, tableName);
  }

  public static void updateIamPolicy(String datasetName, String tableName) {
    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();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      Map<Role, Set<Identity>> binding = new HashMap<>(policy.getBindings());
      binding.remove(Role.of("roles/bigquery.dataViewer"));

      policy.toBuilder().setBindings(binding).build();
      bigquery.setIamPolicy(tableId, policy);

      System.out.println("Iam policy updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not updated. \n" + e.toString());
    }
  }
}