Controlla l'accesso alle risorse con IAM

Questo documento descrive come visualizza il criterio di accesso attuale di una risorsa, come concedere l'accesso a una risorsa, e su come revoca l'accesso a una risorsa.

In questo documento si presume che tu abbia familiarità con Sistema IAM (Identity and Access Management) in Google Cloud.

Ruoli obbligatori

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

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

Autorizzazioni obbligatorie

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

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

Potresti anche riuscire a ottenere queste autorizzazioni con ruoli personalizzati e altri ruoli predefiniti.

Visualizza il criterio di accesso di una risorsa

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

Visualizzare 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

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per recuperare un criterio esistente e inviarlo in un file locale in JSON, utilizza il metodo Comando bq show in Cloud Shell:

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

    Sostituisci quanto segue:

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

API

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

Poiché il metodo datasets.update sostituisce l'intero risorsa dataset, datasets.patch è il metodo preferito per l'aggiornamento controlli dell'accesso.

Visualizzare il criterio di accesso di 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. Fai clic su Condividi.

    I criteri di accesso per la tabella o la visualizzazione sono visualizzati nel riquadro Condividi.

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per recuperare un criterio di accesso esistente e inviarlo in un file locale in JSON, utilizza il metodo 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 il criterio
    • PATH_TO_FILE: il percorso del file JSON sulla tua macchina locale

API

Per recuperare il criterio corrente, richiama il metodo Metodo tables.getIamPolicy.

Concedere l'accesso a una risorsa

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

Concedi 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 del set di dati, fai clic su Chiudi.

SQL

Per concedere alle entità l'accesso ai set di dati, utilizza GRANT Istruzione DCL:

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

    Vai a BigQuery

  2. Nell'editor 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 valori separati da virgole ai ruoli che vuoi concedere
    • RESOURCE_NAME: il nome della risorsa per cui vuoi concedere l'autorizzazione
    • USER_LIST: un elenco di utenti separato da virgole a cui viene concesso il ruolo

      Per un elenco di formati validi, consulta: user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

Nell'esempio seguente viene concesso il ruolo Visualizzatore dati per il set di dati myDataset:

GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per scrivere le informazioni esistenti del set di dati (inclusi i controlli di accesso) in un file JSON, utilizza 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 sulla tua macchina locale
  3. Apporta modifiche alla sezione access del file JSON. Puoi aggiungi a una qualsiasi delle specialGroup voci: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi aggiungi anche uno dei seguenti: userByEmail, groupByEmail e domain.

    Ad esempio, la sezione access del file JSON di un set di dati sarebbe simile le seguenti:

    {
     "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. Quando le modifiche sono complete, usa il comando bq update e includi file JSON utilizzando il flag --source. Se il set di dati si trova in un progetto diverso rispetto al progetto predefinito, aggiungi l'ID progetto al nome del set di dati nella nel seguente formato: PROJECT_ID:DATASET.

    bq update \
    --source PATH_TO_FILE \
    PROJECT_ID:DATASET
    
  5. Per verificare le modifiche al controllo dell'accesso, usa di nuovo il comando bq show senza scrivere le informazioni in un file:

    bq show --format=prettyjson PROJECT_ID:DATASET
    

Terraform

Utilizza la google_bigquery_dataset_iam risorse da aggiornare l'accesso a un set di dati.

Impostare il criterio di accesso per un set di dati

L'esempio seguente mostra come utilizzare il parametro google_bigquery_dataset_iam_policy risorsa per impostare il criterio IAM mydataset set di dati. Sostituisce qualsiasi criterio esistente già collegato 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:hao@altostrat.com",
    ]
  }
  binding {
    role = "roles/bigquery.dataOwner"
    members = [
      "group:dba@altostrat.com",
    ]
  }
  binding {
    role = "roles/bigquery.dataEditor"
    members = [
      "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.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 il parametro google_bigquery_dataset_iam_binding risorsa impostare l'appartenenza a un determinato ruolo mydataset set di dati. In questo modo si sostituisce qualsiasi appartenenza esistente al ruolo in questione. 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:raha@altostrat.com",
    "group:analysts@altostrat.com"
  ]
}

Impostare l'appartenenza ai ruoli per una singola entità

L'esempio seguente mostra come utilizzare il parametro google_bigquery_dataset_iam_member risorsa di aggiornare il criterio IAM per mydataset per concedere un ruolo a un'entità. Aggiornamento di questo IAM non influisce sull'accesso per altre entità che sono state a cui è stato concesso il 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:yuri@altostrat.com"
}

Per applicare la configurazione Terraform a un progetto Google Cloud, completa i passaggi nella le sezioni seguenti.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito dove 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 in Terraform di configurazione del deployment.

Prepara la directory

Ogni file di configurazione Terraform deve avere una directory (inoltre chiamato modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo all'interno di quella directory. Il nome del file deve contenere .tf, ad esempio main.tf. In questo tutorial, il file è 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 nuovo oggetto main.tf.

    Facoltativamente, copia il codice da GitHub. Opzione consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

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

    Facoltativamente, per utilizzare la versione più recente del provider Google, includi -upgrade :

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o che l'aggiornamento soddisfi le tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo questo comando e inserendo yes alla richiesta:
    terraform apply

    Attendi finché Terraform non visualizzi il messaggio "Applicazione completata!". .

  3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nella UI per assicurarti create o aggiornate da Terraform.

API

Per applicare i controlli di accesso quando il set di dati viene creato, chiama il metodo Metodo datasets.insert con un insieme di parametri risorsa set di dati. Per aggiornare i controlli di accesso, chiama il Metodo datasets.patch e uso 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 l'aggiornamento dei controlli dell'accesso.

Vai

Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Go BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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 per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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 per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Python BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

Imposta il parametro Proprietà dataset.access_entries con i controlli di accesso per un set di dati. Quindi chiama il 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 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 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 alle tabelle o alle visualizzazioni, utilizza GRANT Istruzione DCL:

  1. Nella console Google Cloud, 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 valori separati da virgole ai ruoli che vuoi concedere
    • RESOURCE_TYPE: 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 per cui vuoi concedere l'autorizzazione
    • USER_LIST: un elenco di utenti separato da virgole a cui viene concesso il ruolo

      Per un elenco di formati validi, consulta: user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

Nell'esempio seguente viene concesso il ruolo Visualizzatore dati per la tabella myTable:

GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per scrivere la tabella esistente o visualizzare le informazioni (inclusi i controlli dell'accesso) in un file JSON, utilizza 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 da aggiornare
    • TABLE_OR_VIEW: il nome della risorsa da aggiornare
    • PATH_TO_FILE: il percorso del file JSON su dalla macchina locale
  3. Apporta modifiche alla sezione bindings del file JSON. Un'associazione collega una o più entità (members) a un singolo role. Le entità possono essere account utente, account di servizio, gruppi Google e domini. Ad esempio, la sezione bindings del file JSON di una tabella o di una vista sarà simile alla seguente:

    {
      "bindings": [
        {
          "role": "roles/bigquery.dataViewer",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
      ],
      "etag": "BwWWja0YfJA=",
      "version": 1
    }
    
  4. Per aggiornare il criterio di accesso, usa il comando bq set-iam-policy:

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

  5. Per verificare le modifiche apportate al controllo dell'accesso, utilizza la Comando bq get-iam-policy senza scrivere le informazioni in un file:

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

Terraform

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

Impostare il criterio di accesso per una tabella

L'esempio seguente mostra come utilizzare il parametro google_bigquery_table_iam_policy risorsa per impostare il criterio IAM Tabella mytable. Sostituisce qualsiasi criterio esistente già collegato nella 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:raha@altostrat.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 il parametro google_bigquery_table_iam_binding risorsa impostare l'appartenenza a un determinato ruolo Tabella mytable. In questo modo si sostituisce qualsiasi appartenenza esistente al ruolo in questione. 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:analysts@altostrat.com",
  ]
}

Impostare l'appartenenza ai ruoli per una singola entità

L'esempio seguente mostra come utilizzare il parametro google_bigquery_table_iam_member risorsa di aggiornare il criterio IAM per mytable per concedere un ruolo a un'entità. Aggiornamento di questo criterio IAM in corso... non influisce sull'accesso per le altre entità concesse 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.iam.gserviceaccount.com"
}

Per applicare la configurazione Terraform a un progetto Google Cloud, completa i passaggi nella le sezioni seguenti.

Prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito dove 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 in Terraform di configurazione del deployment.

Prepara la directory

Ogni file di configurazione Terraform deve avere una directory (inoltre chiamato modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo all'interno di quella directory. Il nome del file deve contenere .tf, ad esempio main.tf. In questo tutorial, il file è 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 nuovo oggetto main.tf.

    Facoltativamente, copia il codice da GitHub. Opzione consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.

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

    Facoltativamente, per utilizzare la versione più recente del provider Google, includi -upgrade :

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o che l'aggiornamento soddisfi le tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo questo comando e inserendo yes alla richiesta:
    terraform apply

    Attendi finché Terraform non visualizzi il messaggio "Applicazione completata!". .

  3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nella UI per assicurarti create o aggiornate da Terraform.

API

  1. Per recuperare il criterio corrente, richiama il metodo Metodo tables.getIamPolicy.
  2. Modifica il criterio per aggiungere membri e/o associazioni. Per il formato richiesto per il criterio, consulta la pagina Norme. di riferimento.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Python BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

from google.cloud import bigquery

bqclient = bigquery.Client()

policy = bqclient.get_iam_policy(
    your_table_id,  # e.g. "project.dataset.table"
)

analyst_email = "example-analyst-group@google.com"
binding = {
    "role": "roles/bigquery.dataViewer",
    "members": {f"group:{analyst_email}"},
}
policy.bindings.append(binding)

updated_policy = bqclient.set_iam_policy(
    your_table_id,  # e.g. "project.dataset.table"
    policy,
)

for binding in updated_policy.bindings:
    print(repr(binding))

Revocare l'accesso a una risorsa

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

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 &gt; Autorizzazioni.

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

  5. Fai clic su Rimuovi entità.

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

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

    Vai a BigQuery

  2. Nell'editor 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 valori separati da virgole ruoli che vuoi revocare
    • RESOURCE_NAME: il nome della risorsa per cui vuoi revocare l'autorizzazione
    • USER_LIST: un elenco di utenti separato da virgole a chi verrà revocato il ruolo

      Per un elenco di formati validi, consulta: user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

L'esempio seguente revoca il ruolo Amministratore sul set di dati myDataset:

REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per scrivere le informazioni esistenti del set di dati (inclusi i controlli di accesso) in un file JSON, utilizza 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 tuo computer macchina
  3. Apporta modifiche alla sezione access del file JSON. Puoi rimuovi una qualsiasi delle specialGroup voci: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi rimuovi anche uno dei seguenti: userByEmail, groupByEmail e domain.

    Ad esempio, la sezione access del file JSON di un set di dati sarebbe simile le seguenti:

    {
     "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. Quando le modifiche sono complete, usa il comando bq update e includi file JSON utilizzando il flag --source. Se il set di dati si trova in un progetto diverso rispetto al progetto predefinito, aggiungi l'ID progetto al nome del set di dati nella nel seguente formato: PROJECT_ID:DATASET.

    bq update \
        --source PATH_TO_FILE \
        PROJECT_ID:DATASET
    
  5. Per verificare le modifiche al controllo dell'accesso, usa di nuovo il comando show senza scrivere le informazioni in un file:

    bq show --format=prettyjson PROJECT_ID:DATASET
    

API

Chiama 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 l'aggiornamento dei controlli dell'accesso.

Vai

Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Go BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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 per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Python BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

Imposta il parametro Proprietà dataset.access_entries con i controlli di accesso per un set di dati. Quindi chiama il 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 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. Nel riquadro dei dettagli, fai clic su Condividi.

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

  5. Fai clic su Elimina.

  6. Nella finestra di dialogo 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 alle tabelle o alle visualizzazioni dalle entità, utilizza REVOKE Istruzione DCL:

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

    Vai a BigQuery

  2. Nell'editor 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 valori separati da virgole ruoli che vuoi revocare
    • RESOURCE_TYPE: tipo di risorsa che il ruolo è stato revocato

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

    • RESOURCE_NAME: il nome della risorsa per cui vuoi revocare l'autorizzazione
    • USER_LIST: un elenco di utenti separato da virgole a chi verrà revocato il ruolo

      Per un elenco di formati validi, consulta: user_list.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

L'esempio seguente revoca il ruolo Amministratore nella tabella myTable:

REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"

bq

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Per scrivere la tabella esistente o visualizzare le informazioni (inclusi i controlli dell'accesso) in un file JSON, utilizza 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 da aggiornare
    • TABLE_OR_VIEW: il nome della risorsa da aggiornare
    • PATH_TO_FILE: il percorso del file JSON su dalla macchina locale

  3. Apporta modifiche alla sezione access del file JSON. Puoi rimuovi una qualsiasi delle specialGroup voci: projectOwners, projectWriters, projectReaders e allAuthenticatedUsers. Puoi rimuovi anche uno dei seguenti: userByEmail, groupByEmail e domain. Ad esempio, la sezione access del file JSON di una tabella o di una vista sarebbe simile a le seguenti:

    {
     "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. Per aggiornare il criterio di accesso, usa il comando bq set-iam-policy:

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

  5. Per verificare le modifiche al controllo dell'accesso, usa di nuovo 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 corrente, richiama il metodo Metodo tables.getIamPolicy.
  2. Modifica il criterio per rimuovere membri e/o associazioni. Per il formato richiesto per il criterio, consulta la pagina Norme. di riferimento.

  3. Chiama tables.setIamPolicy per scrivere il criterio aggiornato. Nota: non sono consentite associazioni vuote senza membri e questo risultato restituisce un errore.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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());
    }
  }
}

Nega l'accesso a una risorsa

I criteri di negazione IAM consentono di impostare misure di protezione per l'accesso alle risorse BigQuery. Puoi definire regole di negazione che impediscono alle entità selezionate di utilizzare determinate autorizzazioni, indipendentemente da i ruoli assegnati.

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