Chiavi Cloud KMS gestite dal cliente

Per impostazione predefinita, BigQuery cripta i contenuti archiviati at-rest. BigQuery gestisce questa crittografia predefinita per conto tuo senza che tu debba fare altro. Innanzitutto, i dati di una tabella BigQuery vengono criptati utilizzando una chiave di crittografia dei dati. Poi, queste chiavi di crittografia dei dati vengono criptate con chiavi di crittografia delle chiavi, il che è noto come crittografia dell'involucro. Le chiavi di crittografia delle chiavi non criptano direttamente i dati, ma vengono utilizzate per criptare le chiavi di crittografia dei dati che Google utilizza per criptare i tuoi dati.

Se vuoi controllare autonomamente la crittografia, puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) per BigQuery. Invece che Google possedere e gestire le chiavi di crittografia della chiave che proteggono i tuoi dati, sei tu a controllare e gestire le chiavi di crittografia della chiave in Cloud KMS. Questo documento fornisce dettagli sulla creazione manuale delle chiavi Cloud KMS per BigQuery.

Scopri di più sulle opzioni di crittografia su Google Cloud. Per informazioni specifiche sulle chiavi CMEK, inclusi i relativi vantaggi e limiti, consulta Chiavi di crittografia gestite dal cliente.

Prima di iniziare

  • Tutti gli asset di dati che si trovano nello spazio di archiviazione gestito di BigQuery supportanoCMEK. Tuttavia, se esegui query anche sui dati archiviati in un'origine dati esterna come Cloud Storage con dati criptati con CMEK, la crittografia dei dati è gestita da Cloud Storage. Ad esempio, le tabelle BigLake supportano i dati criptati con CMEK in Cloud Storage.

    BigQuery e le tabelle BigLake non supportano le chiavi di crittografia fornite dal cliente (CSEK).

  • Decidi se eseguire BigQuery e Cloud KMS nello stesso progetto Google Cloud o in progetti diversi. A scopo di esempio nella documentazione, viene utilizzata la seguente convenzione:

    • PROJECT_ID: l'ID progetto del progetto che esegue BigQuery
    • PROJECT_NUMBER: il numero del progetto che esegue BigQuery
    • KMS_PROJECT_ID: l'ID del progetto che esegue Cloud KMS (anche se si tratta dello stesso progetto che esegue BigQuery)
    Per informazioni sugli ID progetto e sui numeri di progetto Google Cloud, consulta Identificazione dei progetti.

  • BigQuery viene attivato automaticamente nei nuovi progetti. Se utilizzi un progetto preesistente per eseguire BigQuery, abilita l'API BigQuery.

  • Per il progetto Google Cloud che esegue Cloud KMS, abilita l'API Cloud Key Management Service.

Una chiamata di decrittografia viene eseguita utilizzando Cloud KMS una volta per query a una tabella con crittografia CMEK. Per ulteriori informazioni, consulta la pagina Prezzi di Cloud KMS.

Specifiche di crittografia

Le chiavi Cloud KMS utilizzate per proteggere i dati in BigQuery sono chiavi AES-256. Queste chiavi vengono utilizzate come chiavi di crittografia della chiave in BigQuery, in quanto criptano le chiavi di crittografia dei dati che criptano i tuoi dati.

Creazione di chiavi manuale o automatica

Puoi creare le chiavi CMEK manualmente o utilizzare Autokey di Cloud KMS. Autokey semplifica la creazione e la gestione delle chiavi CMEK automatizzando il provisioning e l'assegnazione. Con Autokey, non è necessario eseguire il provisioning di keyring, chiavi e account di servizio in anticipo. Vengono invece generate su richiesta nell'ambito della creazione delle risorse BigQuery. Per ulteriori informazioni, consulta la panoramica di Autokey.

Creare manualmente il keyring e la chiave

Per il progetto Google Cloud che esegue Cloud KMS, crea un keyring e una chiave come descritto in Creare keyring e chiavi. Crea il portachiavi in una posizione corrispondente a quella del set di dati BigQuery:

  • Qualsiasi set di dati multiregionale deve utilizzare un portachiavi multiregionale da una località corrispondente. Ad esempio, un set di dati nella regione US deve essere protetto con un mazzo di chiavi della regione us e un set di dati nella regione EU deve essere protetto con un mazzo di chiavi della regione europe.

  • I set di dati regionali devono utilizzare chiavi regionali corrispondenti. Ad esempio, un set di dati nella regione asia-northeast1 deve essere protetto con un anello di chiavi della regione asia-northeast1.

  • Non puoi utilizzare la regione global quando configuri le chiavi CMEK per BigQuery nella console Google Cloud. Tuttavia, puoi utilizzare la regione global per configurare CMEK per BigQuery utilizzando lo strumento a riga di comando bq o GoogleSQL.

Per ulteriori informazioni sulle località supportate per BigQuery e Cloud KMS, consulta Località Cloud.

Concedi l'autorizzazione per la crittografia e la decrittografia

Per proteggere i dati BigQuery con una chiave CMEK, concedi all'account di servizio BigQuery l'autorizzazione per criptare e decriptare utilizzando quella chiave. Il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS concede questa autorizzazione.

Assicurati che il tuo account di servizio sia stato creato, quindi utilizza la console Google Cloud per determinare l'ID account di servizio BigQuery. Successivamente, fornisci all'account di servizio il ruolo appropriato per la crittografia e la decrittografia utilizzando Cloud KMS.

Attiva la creazione del tuo account di servizio

L'account di servizio BigQuery non viene creato inizialmente quando crei un progetto. Per attivare la creazione dell'account di servizio, inserisci un comando che lo utilizzi, ad esempio il comando bq show --encryption_service_account, oppure chiama il metodo dell'API projects.getServiceAccount. Ad esempio:

bq show --encryption_service_account --project_id=PROJECT_ID

Determina l'ID account di servizio

L'ID account di servizio BigQuery è del seguente tipo:

bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com

Le seguenti tecniche mostrano come determinare l'ID account di servizio BigQuery per il tuo progetto.

Console

  1. Vai alla pagina Dashboard nella console Google Cloud.

    Vai alla pagina Dashboard

  2. Fai clic sull'elenco a discesa Seleziona da nella parte superiore della pagina. Nella finestra Seleziona da visualizzata, seleziona il tuo progetto.

  3. Sia l'ID progetto sia il numero di progetto vengono visualizzati nella scheda Informazioni sul progetto della dashboard del progetto:

    scheda informativa del progetto

  4. Nella stringa seguente, sostituisci PROJECT_NUMBER con il numero del progetto. La nuova stringa identifica il tuo ID account di servizio BigQuery.

    bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
    

bq

Utilizza il comando bq show con il flag --encryption_service_account per determinare l'ID account di servizio:

bq show --encryption_service_account

Il comando mostra l'ID account di servizio:

                  ServiceAccountID
-------------------------------------------------------------
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com

Assegna il ruolo di criptatore/decriptatore

Assegna il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS all'account di servizio di sistema BigQuery che hai copiato nel portachiavi. Questo account ha il seguente formato:

bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com

Console

  1. Apri la pagina Chiavi crittografiche nella console Google Cloud.

    Apri la pagina Chiavi crittografiche

  2. Fai clic sul nome del keyring che contiene la chiave.

  3. Fai clic sulla casella di controllo della chiave di crittografia a cui vuoi aggiungere il ruolo. Viene visualizzata la scheda Autorizzazioni.

  4. Fai clic su Aggiungi membro.

  5. Inserisci l'indirizzo email dell'account di servizio, bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com.

    • Se l'account di servizio è già presente nell'elenco dei membri, ha ruoli esistenti. Fai clic sull'elenco a discesa del ruolo corrente per l'account di servizio bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com.
  6. Fai clic sull'elenco a discesa Seleziona un ruolo, poi su Cloud KMS e infine sul ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS.

  7. Fai clic su Salva per applicare il ruolo all'account di servizio bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com.

gcloud

Puoi utilizzare Google Cloud CLI per assegnare il ruolo:

gcloud kms keys add-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING \
KMS_KEY

Sostituisci quanto segue:

  • KMS_PROJECT_ID: l'ID del tuo progetto Google Cloud su cui è in esecuzione Cloud KMS
  • PROJECT_NUMBER: il numero del progetto (non l'ID progetto) del tuo progetto Google Cloud su cui è in esecuzione BigQuery
  • KMS_KEY_LOCATION: il nome della posizione della chiave Cloud KMS
  • KMS_KEY_RING: il nome della raccolta di chiavi della chiave Cloud KMS
  • KMS_KEY: il nome della chiave Cloud KMS

ID risorsa della chiave

L'ID risorsa della chiave Cloud KMS è necessario per l'utilizzo di CMEK, come mostrato negli esempi. Questa chiave è sensibile alle maiuscole e ha il seguente formato:

projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY

Recupera l'ID risorsa della chiave

  1. Apri la pagina Chiavi crittografiche nella console Google Cloud.

    Apri la pagina Chiavi crittografiche

  2. Fai clic sul nome del keyring che contiene la chiave.

  3. Per la chiave di cui stai recuperando l'ID risorsa, fai clic su Altro .

  4. Fai clic su Copia nome risorsa. L'ID risorsa per la chiave viene copiato negli appunti. L'ID risorsa è noto anche come nome della risorsa.

Creare una tabella protetta da Cloud KMS

Per creare una tabella protetta da Cloud KMS:

Console

  1. Apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina BigQuery

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

  3. Espandi l'opzione Azioni e fai clic su Apri.

  4. Nel riquadro dei dettagli, fai clic su Crea tabella .

  5. Nella pagina Crea tabella, inserisci le informazioni necessarie per creare una tabella vuota con una definizione di schema. Prima di fare clic su Crea tabella, imposta il tipo di crittografia e specifica la chiave Cloud KMS da utilizzare con la tabella:

    1. Fai clic su Opzioni avanzate.
    2. Fai clic su Chiave gestita dal cliente.
    3. Seleziona la chiave. Se la chiave che vuoi utilizzare non è in elenco, inserisci il corrispondente ID risorsa.
  6. Fai clic su Crea tabella.

SQL

Utilizza l'istruzione CREATE TABLE con l'opzione kms_key_name:

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

    Vai a BigQuery

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

    CREATE TABLE DATASET_ID.TABLE_ID (
      name STRING, value INT64
    ) OPTIONS (
        kms_key_name
          = 'projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY');

  3. Fai clic su Esegui.

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

bq

Puoi utilizzare lo strumento a riga di comando bq con il flag --destination_kms_key per creare la tabella. Il flag --destination_kms_key specifica l'ID risorsa della chiave da utilizzare con la tabella.

Per creare una tabella vuota con uno schema:

bq mk --schema name:string,value:integer -t \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
DATASET_ID.TABLE_ID

Per creare una tabella da una query:

bq query --destination_table=DATASET_ID.TABLE_ID \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
"SELECT name,count FROM DATASET_ID.TABLE_ID WHERE gender = 'M' ORDER BY count DESC LIMIT 6"

Per saperne di più sullo strumento a riga di comando bq, consulta Utilizzo dello strumento a riga di comando bq.

Terraform

Utilizza la risorsa google_bigquery_table.

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

L'esempio seguente crea una tabella denominata mytable e utilizza anche le risorse google_kms_crypto_key e google_kms_key_ring per specificare una chiave Cloud Key Management Service per la tabella.

Per eseguire questo esempio, devi abilitare l'API Cloud Resource Manager e l'API Cloud Key Management Service.

resource "google_bigquery_dataset" "default" {
  dataset_id                      = "mydataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  labels = {
    billing_group = "accounting",
    pii           = "sensitive"
  }
}

resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "mytable"
  deletion_protection = false # set to "true" in production

  schema = <<EOF
[
  {
    "name": "ID",
    "type": "INT64",
    "mode": "NULLABLE",
    "description": "Item ID"
  },
  {
    "name": "Item",
    "type": "STRING",
    "mode": "NULLABLE"
  }
]
EOF

  encryption_configuration {
    kms_key_name = google_kms_crypto_key.crypto_key.id
  }

  depends_on = [google_project_iam_member.service_account_access]
}

resource "google_kms_crypto_key" "crypto_key" {
  name     = "example-key"
  key_ring = google_kms_key_ring.key_ring.id
}

resource "random_id" "default" {
  byte_length = 8
}

resource "google_kms_key_ring" "key_ring" {
  name     = "${random_id.default.hex}-example-keyring"
  location = "us"
}

# Enable the BigQuery service account to encrypt/decrypt Cloud KMS keys
data "google_project" "project" {
}

resource "google_project_iam_member" "service_account_access" {
  project = data.google_project.project.project_id
  role    = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member  = "serviceAccount:bq-${data.google_project.project.number}@bigquery-encryption.iam.gserviceaccount.com"
}

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

Prepara Cloud Shell

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

    Devi eseguire questo comando una sola volta per progetto e puoi farlo 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 una propria directory (chiamata anche modulo principale).

  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 è 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 file main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa 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

    Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

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

    Attendi che Terraform mostri il messaggio "Applicazione completata".

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

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

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

import (
	"context"
	"fmt"

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

// createTableWithCMEK demonstrates creating a table protected with a customer managed encryption key.
func createTableWithCMEK(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydatasetid"
	// tableID := "mytableid"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta := &bigquery.TableMetadata{
		EncryptionConfig: &bigquery.EncryptionConfig{
			// TODO: Replace this key with a key you have created in Cloud KMS.
			KMSKeyName: "projects/cloud-samples-tests/locations/us/keyRings/test/cryptoKeys/test",
		},
	}
	if err := tableRef.Create(ctx, meta); err != nil {
		return err
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.EncryptionConfiguration;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.StandardTableDefinition;
import com.google.cloud.bigquery.TableDefinition;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;

// Sample to create a cmek table
public class CreateTableCMEK {

  public static void runCreateTableCMEK() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String kmsKeyName = "MY_KEY_NAME";
    Schema schema =
        Schema.of(
            Field.of("stringField", StandardSQLTypeName.STRING),
            Field.of("booleanField", StandardSQLTypeName.BOOL));
    // i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}
    EncryptionConfiguration encryption =
        EncryptionConfiguration.newBuilder().setKmsKeyName(kmsKeyName).build();
    createTableCMEK(datasetName, tableName, schema, encryption);
  }

  public static void createTableCMEK(
      String datasetName, String tableName, Schema schema, EncryptionConfiguration configuration) {
    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);
      TableDefinition tableDefinition = StandardTableDefinition.of(schema);
      TableInfo tableInfo =
          TableInfo.newBuilder(tableId, tableDefinition)
              .setEncryptionConfiguration(configuration)
              .build();

      bigquery.create(tableInfo);
      System.out.println("Table cmek created successfully");
    } catch (BigQueryException e) {
      System.out.println("Table cmek was not created. \n" + e.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

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

Proteggi una nuova tabella con una chiave di crittografia gestita dal cliente impostando la proprietà Table.encryption_configuration su un oggetto EncryptionConfiguration prima di creare la tabella.
from google.cloud import bigquery

client = bigquery.Client()

# TODO(dev): Change table_id to the full name of the table you want to create.
table_id = "your-project.your_dataset.your_table_name"

# Set the encryption key to use for the table.
# TODO: Replace this key with a key you have created in Cloud KMS.
kms_key_name = "projects/your-project/locations/us/keyRings/test/cryptoKeys/test"

table = bigquery.Table(table_id)
table.encryption_configuration = bigquery.EncryptionConfiguration(
    kms_key_name=kms_key_name
)
table = client.create_table(table)  # API request

print(f"Created {table_id}.")
print(f"Key: {table.encryption_configuration.kms_key_name}.")

Esegui query su una tabella protetta da una chiave Cloud KMS

Non sono necessari accorgimenti speciali per eseguire query su una tabella protetta da Cloud KMS. BigQuery memorizza il nome della chiave utilizzata per criptare i contenuti della tabella e la utilizza quando viene eseguita una query su una tabella protetta da Cloud KMS.

Tutti gli strumenti esistenti, la console BigQuery e lo strumento a riga di comando bq vengono eseguiti come per le tabelle con crittografia predefinita, a condizione che BigQuery abbia accesso alla chiave Cloud KMS utilizzata per criptare i contenuti della tabella.

Proteggere i risultati delle query con una chiave Cloud KMS

Per impostazione predefinita, i risultati della query vengono archiviati in una tabella temporanea criptata con una chiave di proprietà di Google e gestita da Google. Se il progetto ha già una chiave predefinita, la chiave viene applicata alla tabella dei risultati della query temporanea (predefinita). Per utilizzare una chiave Cloud KMS per criptare i risultati delle query, seleziona una delle seguenti opzioni:

Console

  1. Apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina BigQuery

  2. Fai clic su Crea nuova query.

  3. Inserisci una query GoogleSQL valida nell'area di testo della query.

  4. Fai clic su Altro, poi su Impostazioni query e infine su Opzioni avanzate.

  5. Seleziona Crittografia gestita dal cliente.

  6. Seleziona la chiave. Se la chiave che vuoi utilizzare non è in elenco, inserisci il corrispondente ID risorsa.

  7. Fai clic su Salva.

  8. Fai clic su Esegui.

bq

Specifica il flag --destination_kms_key per proteggere la tabella di destinazione o i risultati della query (se utilizzi una tabella temporanea) con la tua chiave Cloud KMS. Il flag --destination_kms_key specifica l'ID risorsa della chiave da utilizzare con la tabella di destinazione o risultante.

Se vuoi, utilizza il flag --destination_table per specificare la destinazione per i risultati della query. Se non viene utilizzato --destination_table, i risultati della query vengono scritti in una tabella temporanea.

Per eseguire una query su una tabella:

bq query \
--destination_table=DATASET_ID.TABLE_ID \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
"SELECT name,count FROM DATASET_ID.TABLE_ID WHERE gender = 'M' ORDER BY count DESC LIMIT 6"

Per saperne di più sullo strumento a riga di comando bq, consulta Utilizzo dello strumento a riga di comando bq.

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

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

Proteggi una nuova tabella con una chiave di crittografia gestita dal cliente impostando la proprietà Table.encryption_configuration su un oggetto EncryptionConfiguration prima di creare la tabella.
import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// queryWithDestinationCMEK demonstrates saving query results to a destination table and protecting those results
// by specifying a customer managed encryption key.
func queryWithDestinationCMEK(w io.Writer, projectID, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	q := client.Query("SELECT 17 as my_col")
	q.Location = "US" // Location must match the dataset(s) referenced in query.
	q.QueryConfig.Dst = client.Dataset(dstDatasetID).Table(dstTableID)
	q.DestinationEncryptionConfig = &bigquery.EncryptionConfig{
		// TODO: Replace this key with a key you have created in Cloud KMS.
		KMSKeyName: "projects/cloud-samples-tests/locations/us-central1/keyRings/test/cryptoKeys/test",
	}
	// Run the query and print results when the query job is completed.
	job, err := q.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	it, err := job.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

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

Proteggi una nuova tabella con una chiave di crittografia gestita dal cliente impostando la proprietà Table.encryption_configuration su un oggetto EncryptionConfiguration prima di creare la tabella.
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.EncryptionConfiguration;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to query on destination table with encryption key
public class QueryDestinationTableCMEK {

  public static void runQueryDestinationTableCMEK() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String kmsKeyName = "MY_KMS_KEY_NAME";
    String query =
        String.format("SELECT stringField, booleanField FROM %s.%s", datasetName, tableName);
    EncryptionConfiguration encryption =
        EncryptionConfiguration.newBuilder().setKmsKeyName(kmsKeyName).build();
    queryDestinationTableCMEK(query, encryption);
  }

  public static void queryDestinationTableCMEK(String query, EncryptionConfiguration encryption) {
    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();

      QueryJobConfiguration config =
          QueryJobConfiguration.newBuilder(query)
              // Set the encryption key to use for the destination.
              .setDestinationEncryptionConfiguration(encryption)
              .build();

      TableResult results = bigquery.query(config);

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));
      System.out.println("Query performed successfully with encryption key.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

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

Proteggi una tabella di destinazione della query con una chiave di crittografia gestita dal cliente impostando la proprietà QueryJobConfig.destination_encryption_configuration su un valore EncryptionConfiguration ed esegui la query.

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the destination table.
# table_id = "your-project.your_dataset.your_table_name"

# Set the encryption key to use for the destination.
# TODO(developer): Replace this key with a key you have created in KMS.
# kms_key_name = "projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}".format(
#     your-project, location, your-ring, your-key
# )

job_config = bigquery.QueryJobConfig(
    destination=table_id,
    destination_encryption_configuration=bigquery.EncryptionConfiguration(
        kms_key_name=kms_key_name
    ),
)

# Start the query, passing in the extra configuration.
query_job = client.query(
    "SELECT 17 AS my_col;", job_config=job_config
)  # Make an API request.
query_job.result()  # Wait for the job to complete.

table = client.get_table(table_id)  # Make an API request.
if table.encryption_configuration.kms_key_name == kms_key_name:
    print("The destination table is written using the encryption configuration")

Carica una tabella protetta da Cloud KMS

Per caricare un file di dati in una tabella protetta da Cloud KMS:

Console

Proteggi una tabella di destinazione del job di caricamento con una chiave di crittografia gestita dal cliente specificando la chiave al momento del caricamento della tabella.

  1. Apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina BigQuery

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

  3. Nel riquadro dei dettagli, fai clic su Crea tabella.

  4. Inserisci le opzioni che vuoi utilizzare per caricare la tabella, ma prima di fare clic su Crea tabella, fai clic su Opzioni avanzate.

  5. In Crittografia, seleziona Chiave gestita dal cliente.

  6. Fai clic sull'elenco a discesa Seleziona una chiave gestita dal cliente e seleziona la chiave da utilizzare. Se non vedi chiavi disponibili, inserisci un ID risorsa chiave.

    Opzioni avanzate.

  7. Fai clic su Crea tabella.

bq

Proteggi una tabella di destinazione del job di caricamento con una chiave di crittografia gestita dal cliente impostando il flag --destination_kms_key.

bq --location=LOCATION load \
--autodetect \
--source_format=FORMAT \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
DATASET.TABLE \
path_to_source
Ad esempio:
bq load \
--autodetect \
--source_format=NEWLINE_DELIMITED_JSON \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
test2.table4 \
gs://cloud-samples-data/bigquery/us-states/us-states.json

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

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

import (
	"context"
	"fmt"

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

// importJSONWithCMEK demonstrates loading newline-delimited JSON from Cloud Storage,
// and protecting the data with a customer-managed encryption key.
func importJSONWithCMEK(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.json")
	gcsRef.SourceFormat = bigquery.JSON
	gcsRef.AutoDetect = true
	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
	loader.WriteDisposition = bigquery.WriteEmpty
	loader.DestinationEncryptionConfig = &bigquery.EncryptionConfig{
		// TODO: Replace this key with a key you have created in KMS.
		KMSKeyName: "projects/cloud-samples-tests/locations/us-central1/keyRings/test/cryptoKeys/test",
	}

	job, err := loader.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}

	if status.Err() != nil {
		return fmt.Errorf("job completed with error: %v", status.Err())
	}

	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.EncryptionConfiguration;
import com.google.cloud.bigquery.FormatOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.LoadJobConfiguration;
import com.google.cloud.bigquery.TableId;

// Sample to load JSON data with configuration key from Cloud Storage into a new BigQuery table
public class LoadJsonFromGCSCMEK {

  public static void runLoadJsonFromGCSCMEK() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String kmsKeyName = "MY_KMS_KEY_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
    // i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}
    EncryptionConfiguration encryption =
        EncryptionConfiguration.newBuilder().setKmsKeyName(kmsKeyName).build();
    loadJsonFromGCSCMEK(datasetName, tableName, sourceUri, encryption);
  }

  public static void loadJsonFromGCSCMEK(
      String datasetName, String tableName, String sourceUri, EncryptionConfiguration encryption) {
    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);
      LoadJobConfiguration loadConfig =
          LoadJobConfiguration.newBuilder(tableId, sourceUri)
              // Set the encryption key to use for the destination.
              .setDestinationEncryptionConfiguration(encryption)
              .setFormatOptions(FormatOptions.json())
              .setAutodetect(true)
              .build();

      // Load data from a GCS JSON file into the table
      Job job = bigquery.create(JobInfo.of(loadConfig));
      // Blocks until this load table job completes its execution, either failing or succeeding.
      job = job.waitFor();
      if (job.isDone()) {
        System.out.println("Table loaded succesfully from GCS with configuration key");
      } else {
        System.out.println(
            "BigQuery was unable to load into the table due to an error:"
                + job.getStatus().getError());
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Column not added during load append \n" + e.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

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

Proteggi una tabella di destinazione del job di caricamento con una chiave di crittografia gestita dal cliente impostando la proprietà LoadJobConfig.destination_encryption_configuration su un'EncryptionConfiguration e carica la tabella.

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name

# Set the encryption key to use for the destination.
# TODO: Replace this key with a key you have created in KMS.
# kms_key_name = "projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}".format(
#     "cloud-samples-tests", "us", "test", "test"
# )

job_config = bigquery.LoadJobConfig(
    autodetect=True,
    source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON,
    destination_encryption_configuration=bigquery.EncryptionConfiguration(
        kms_key_name=kms_key_name
    ),
)

uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"

load_job = client.load_table_from_uri(
    uri,
    table_id,
    location="US",  # Must match the destination dataset location.
    job_config=job_config,
)  # Make an API request.

assert load_job.job_type == "load"

load_job.result()  # Waits for the job to complete.

assert load_job.state == "DONE"
table = client.get_table(table_id)

if table.encryption_configuration.kms_key_name == kms_key_name:
    print("A table loaded with encryption configuration key")

Esegui lo streaming in una tabella protetta da Cloud KMS

Puoi trasmettere i dati in streaming nella tabella BigQuery protetta da CMEK senza specificare parametri aggiuntivi. Tieni presente che questi dati vengono criptati utilizzando la chiave Cloud KMS nel buffer e nella posizione finale. Prima di utilizzare lo streaming con una tabella CMEK, esamina i requisiti relativi alla disponibilità e all'accessibilità delle chiavi.

Scopri di più sullo streaming in Eseguire lo streaming di dati utilizzando l'API BigQuery Storage Write.

Passare da una tabella con crittografia predefinita a una protetta da Cloud KMS

bq

Puoi utilizzare il comando bq cp con il flag --destination_kms_key per copiare una tabella protetta dalla crittografia predefinita in una nuova tabella o nella tabella originale protetta da Cloud KMS. Il flag --destination_kms_key specifica l'ID risorsa della chiave da utilizzare con la tabella di destinazione.

Per copiare una tabella con crittografia predefinita in una nuova tabella con protezione Cloud KMS:

bq cp \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
SOURCE_DATASET_ID.SOURCE_TABLE_ID DESTINATION_DATASET_ID.DESTINATION_TABLE_ID

Se vuoi copiare una tabella con crittografia predefinita nella stessa tabella con protezione Cloud KMS:

bq cp -f \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
DATASET_ID.TABLE_ID DATASET_ID.TABLE_ID

Se vuoi passare da una tabella protetta da Cloud KMS alla crittografia predefinita, copia il file in se stesso eseguendo bq cp senza utilizzare il flag --destination_kms_key.

Per saperne di più sullo strumento a riga di comando bq, consulta Utilizzo dello strumento a riga di comando bq.

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

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

import (
	"context"
	"fmt"

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

// copyTableWithCMEK demonstrates creating a copy of a table and ensuring the copied data is
// protected with a customer managed encryption key.
func copyTableWithCMEK(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	srcTable := client.DatasetInProject("bigquery-public-data", "samples").Table("shakespeare")
	copier := client.Dataset(datasetID).Table(tableID).CopierFrom(srcTable)
	copier.DestinationEncryptionConfig = &bigquery.EncryptionConfig{
		// TODO: Replace this key with a key you have created in Cloud KMS.
		KMSKeyName: "projects/cloud-samples-tests/locations/us-central1/keyRings/test/cryptoKeys/test",
	}
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.EncryptionConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

// Sample to copy a cmek table
public class CopyTableCMEK {

  public static void runCopyTableCMEK() {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
    String destinationTableId = "MY_DESTINATION_TABLE_NAME";
    String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
    String sourceTableId = "MY_SOURCE_TABLE_NAME";
    String kmsKeyName = "MY_KMS_KEY_NAME";
    EncryptionConfiguration encryption =
        EncryptionConfiguration.newBuilder().setKmsKeyName(kmsKeyName).build();
    copyTableCMEK(
        sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId, encryption);
  }

  public static void copyTableCMEK(
      String sourceDatasetName,
      String sourceTableId,
      String destinationDatasetName,
      String destinationTableId,
      EncryptionConfiguration encryption) {
    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 sourceTable = TableId.of(sourceDatasetName, sourceTableId);
      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(destinationTable, sourceTable)
              .setDestinationEncryptionConfiguration(encryption)
              .build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table cmek copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table cmek copying job was interrupted. \n" + e.toString());
    }
  }
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

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

Proteggi la destinazione di una copia della tabella con una chiave di crittografia gestita dal cliente impostando la proprietà QueryJobConfig.destination_encryption_configuration su un'EncryptionConfiguration e copia la tabella.

from google.cloud import bigquery

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

# TODO(developer): Set dest_table_id to the ID of the destination table.
# dest_table_id = "your-project.your_dataset.your_table_name"

# TODO(developer): Set orig_table_id to the ID of the original table.
# orig_table_id = "your-project.your_dataset.your_table_name"

# Set the encryption key to use for the destination.
# TODO(developer): Replace this key with a key you have created in KMS.
# kms_key_name = "projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}".format(
#     your-project, location, your-ring, your-key
# )

job_config = bigquery.CopyJobConfig(
    destination_encryption_configuration=bigquery.EncryptionConfiguration(
        kms_key_name=kms_key_name
    )
)
job = client.copy_table(orig_table_id, dest_table_id, job_config=job_config)
job.result()  # Wait for the job to complete.

dest_table = client.get_table(dest_table_id)  # Make an API request.
if dest_table.encryption_configuration.kms_key_name == kms_key_name:
    print("A copy of the table created")

Determinare se una tabella è protetta da Cloud KMS

  1. Nella console Google Cloud, fai clic sulla freccia blu a sinistra del set di dati per espanderlo o fai doppio clic sul nome del set di dati. Verranno visualizzate le tabelle e le visualizzazioni nel set di dati.

  2. Fai clic sul nome della tabella.

  3. Fai clic su Dettagli. La pagina Dettagli tabella mostra la descrizione e le informazioni della tabella.

  4. Se la tabella è protetta da Cloud KMS, il campo Chave de crittografia gestita dal cliente (Chiave di crittografia gestita dal cliente) mostra l'ID risorsa della chiave.

    Tabella protetta.

Per ogni chiave che hai creato o che protegge le tue tabelle, puoi vedere le risorse protette dalla chiave con il monitoraggio dell'utilizzo delle chiavi. Per ulteriori informazioni, consulta Visualizzare l'utilizzo delle chiavi.

Modificare la chiave Cloud KMS per una tabella BigQuery

Per modificare la chiave Cloud KMS di una tabella protetta da CMEK esistente, puoi eseguire una query ALTER TABLE, utilizzare l'API o lo strumento a riga di comando bq. Esistono due modi per modificare la chiave Cloud KMS utilizzando l'API e lo strumento a riga di comando bq: update o cp.

Se utilizzi update, puoi modificare la chiave Cloud KMS utilizzata per una tabella protetta da CMEK.

Se utilizzi cp, puoi modificare la chiave Cloud KMS utilizzata per una tabella protetta da CMEK, passare da una tabella con crittografia predefinita a una protetta da CMEK o viceversa.

Un vantaggio di update è che è più veloce di cp e ti consente di utilizzare decoratori di tabelle.

SQL

Utilizza l'istruzione ALTER TABLE SET OPTIONS per aggiornare il campo kms_key_name di una tabella:

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

    Vai a BigQuery

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

    ALTER TABLE DATASET_ID.mytable
    SET OPTIONS (
      kms_key_name
        = 'projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY');

  3. Fai clic su Esegui.

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

bq

Puoi utilizzare il comando bq cp con il flag --destination_kms_key per cambiare la chiave di una tabella protetta da Cloud KMS. Il flag --destination_kms_key specifica l'ID risorsa della chiave da utilizzare con la tabella.

bq update \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
-t DATASET_ID.TABLE_ID

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

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

import (
	"context"
	"fmt"

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

// updateTableChangeCMEK demonstrates how to change the customer managed encryption key that protects a table.
func updateTableChangeCMEK(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydatasetid"
	// tableID := "mytableid"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		EncryptionConfig: &bigquery.EncryptionConfig{
			// TODO: Replace this key with a key you have created in Cloud KMS.
			KMSKeyName: "projects/cloud-samples-tests/locations/us-central1/keyRings/test/cryptoKeys/otherkey",
		},
	}
	if _, err := tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.EncryptionConfiguration;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;

// Sample to update a cmek table
public class UpdateTableCMEK {

  public static void runUpdateTableCMEK() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String kmsKeyName = "MY_KEY_NAME";
    // Set a new encryption key to use for the destination.
    // i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}
    EncryptionConfiguration encryption =
        EncryptionConfiguration.newBuilder().setKmsKeyName(kmsKeyName).build();
    updateTableCMEK(datasetName, tableName, encryption);
  }

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

      Table table = bigquery.getTable(TableId.of(datasetName, tableName));
      bigquery.update(table.toBuilder().setEncryptionConfiguration(encryption).build());
      System.out.println("Table cmek updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Table cmek was not updated. \n" + e.toString());
    }
  }
}

Python

Modifica la chiave di crittografia gestita dal cliente per una tabella impostando la proprietà Table.encryption_configuration su un nuovo oggetto EncryptionConfiguration e aggiorna la tabella.

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

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

# from google.cloud import bigquery
# client = bigquery.Client()

assert table.encryption_configuration.kms_key_name == original_kms_key_name

# Set a new encryption key to use for the destination.
# TODO: Replace this key with a key you have created in KMS.
updated_kms_key_name = (
    "projects/cloud-samples-tests/locations/us/keyRings/test/cryptoKeys/otherkey"
)
table.encryption_configuration = bigquery.EncryptionConfiguration(
    kms_key_name=updated_kms_key_name
)

table = client.update_table(table, ["encryption_configuration"])  # API request

assert table.encryption_configuration.kms_key_name == updated_kms_key_name
assert original_kms_key_name != updated_kms_key_name

Impostare una chiave predefinita per il set di dati

Puoi impostare una chiave Cloud KMS predefinita a livello di set di dati che si applica a tutte le tabelle appena create all'interno del set di dati, a meno che non venga specificata una chiave Cloud KMS diversa al momento della creazione della tabella. La chiave predefinita non si applica alle tabelle esistenti. La modifica della chiave predefinita non modifica le tabelle esistenti e si applica solo alle nuove tabelle create dopo la modifica.

Puoi applicare, modificare o rimuovere una chiave predefinita del set di dati:

  • specificando la chiave predefinita nel EncryptionConfiguration.kmsKeyName campo quando chiami i metodi datasets.insert o datasets.patch

  • specificando la chiave predefinita nel flag --default_kms_key quando esegui il comando bq mk --dataset.

    bq mk \
    --default_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
    --dataset DATASET_ID
    
    bq update \
    --default_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
    --dataset DATASET_ID
    

Impostare una chiave predefinita per il progetto

Puoi impostare le chiavi Cloud KMS predefinite del progetto che si applicano a tutti i risultati delle query e alle tabelle appena create nel progetto per quella posizione, a meno che non specifichi una chiave Cloud KMS diversa. La chiave predefinita non si applica alle tabelle esistenti. La modifica della chiave predefinita non modifica le tabelle esistenti e si applica solo alle nuove tabelle create dopo la modifica.

SQL

Utilizza l'istruzione ALTER PROJECT SET OPTIONS per aggiornare il campo default_kms_key_name di un progetto. Puoi trovare il nome della risorsa per la chiave nella pagina Cloud KMS.

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

    Vai a BigQuery

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

    ALTER PROJECT PROJECT_ID
    SET OPTIONS (
      `region-LOCATION.default_kms_key_name`
        = 'projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY');

  3. Fai clic su Esegui.

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

bq

Puoi utilizzare il comando bq per eseguire un istruzione ALTER PROJECT SET OPTIONS per aggiornare il campo default_kms_key_name di un progetto:

bq query --nouse_legacy_sql \
  'ALTER PROJECT PROJECT_ID
  SET OPTIONS (
  `region-LOCATION.default_kms_key_name`
    ="projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY");'

Utilizzare CMEK per proteggere i modelli BigQuery ML

BigQuery ML supporta CMEK. Oltre alla crittografia predefinita fornita da BigQuery, puoi utilizzare le tue chiavi di Cloud Key Management Service per criptare i modelli di machine learning, inclusi i modelli TensorFlow importati.

Creare un modello criptato con una chiave Cloud KMS

Per creare un modello criptato, utilizza l'istruzione CREATE MODEL e specifica KMS_KEY_NAME nelle opzioni di addestramento:

    CREATE MODEL my_dataset.my_model
    OPTIONS(
      model_type='linear_reg',
      input_label_cols=['your_label'],
      kms_key_name='projects/my_project/locations/my_location/keyRings/my_ring/cryptoKeys/my_key')
    AS SELECT * FROM my_dataset.my_data

La stessa sintassi si applica anche ai modelli TensorFlow importati:

    CREATE MODEL my_dataset.my_model
    OPTIONS(
      model_type='tensorflow',
      path='gs://bucket/path/to/saved_model/*',
      kms_key_name='projects/my_project/locations/my_location/keyRings/my_ring/cryptoKeys/my_key')
    AS SELECT * FROM my_dataset.my_data

Limitazioni

Le chiavi di crittografia gestite dal cliente presentano le seguenti limitazioni per la crittografia dei modelli di machine learning:

Passare da una crittografia predefinita alla protezione di Cloud KMS per un modello

Puoi utilizzare il comando bq cp con il flag --destination_kms_key per copiare un modello protetto dalla crittografia predefinita in un nuovo modello protetto da Cloud KMS. In alternativa, puoi utilizzare il comando bq cp con il flag -f per sovrascrivere un modello protetto dalla crittografia predefinita e aggiornarlo in modo da utilizzare la protezione Cloud KMS. Il flag --destination_kms_key specifica l'ID risorsa della chiave da utilizzare con il modello di destinazione.

Per copiare un modello con crittografia predefinita in un nuovo modello con protezione Cloud KMS:

bq cp \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
SOURCE_DATASET_ID.SOURCE_MODEL_ID DESTINATION_DATASET_ID.DESTINATION_MODEL_ID

Per sovrascrivere un modello con crittografia predefinita con lo stesso modello con protezione Cloud KMS:

bq cp -f \
--destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \
DATASET_ID.MODEL_ID DATASET_ID.MODEL_ID

Per passare da un modello con protezione Cloud KMS a una crittografia predefinita:

bq cp -f \
DATASET_ID.MODEL_ID DATASET_ID.MODEL_ID

Per saperne di più sullo strumento a riga di comando bq, consulta Utilizzo dello strumento a riga di comando bq.

Determinare se un modello è protetto da Cloud KMS

Utilizza il comando bq show per verificare se un modello è protetto dalla chiave Cloud KMS. La chiave di crittografia si trova nel campo kmsKeyName.

bq show -m my_dataset.my_model

Puoi anche utilizzare la console Google Cloud per trovare la chiave Cloud KMS per un modello criptato. Le informazioni sulla chiave CMEK si trovano nel campo Chiave gestita dal cliente nella sezione Dettagli del modello del riquadro Dettagli del modello.

Modificare la chiave Cloud KMS per un modello criptato

Utilizza il comando bq update con il flag --destination_kms_key per modificare la chiave di un modello protetto da Cloud KMS:

bq update --destination_kms_key \
projects/my_project/locations/my_location/keyRings/my_ring/cryptoKeys/my_key \
-t my_dataset.my_model

Utilizza le chiavi del progetto o del set di dati predefiniti

Se hai impostato una chiave Cloud KMS predefinita a livello di progetto o set di dati, BigQuery ML la utilizza automaticamente durante la creazione dei modelli. Utilizza l'istruzione CREATE MODEL per specificare una chiave diversa per criptare il modello se non vuoi utilizzare la chiave predefinita.

Utilizzare le funzioni BigQuery ML con i modelli criptati

Puoi utilizzare tutte le funzioni di BigQuery ML con un modello criptato senza specificare una chiave di crittografia.

Utilizzare CMEK per proteggere l'API BigQuery Connection

Per le connessioni Cloud SQL, puoi proteggere le credenziali dell'API BigQuery Connection utilizzando le CMEK.

Per ulteriori informazioni su come creare una connessione protetta da CMEK, consulta Creare connessioni Cloud SQL.

Rimuovi l'accesso di BigQuery alla chiave Cloud KMS

Puoi rimuovere l'accesso di BigQuery alla chiave Cloud KMS in qualsiasi momento revocando l'autorizzazione Identity and Access Management (IAM) per la chiave.

Se BigQuery perde l'accesso alla chiave Cloud KMS, l'esperienza dell'utente può risentirne notevolmente e può verificarsi la perdita di dati:

  • Non è più possibile accedere ai dati di queste tabelle protette da CMEK: query, cp, extract e tabledata.list non funzioneranno.

  • Non è possibile aggiungere nuovi dati a queste tabelle protette da CMEK.

  • Una volta concesso nuovamente l'accesso, il rendimento delle query a queste tabelle può essere ridotto per diversi giorni.

Controllare l'utilizzo di CMEK con i criteri dell'organizzazione

BigQuery si integra con i limiti dei criteri dell'organizzazione CMEK per consentirti di specificare i requisiti di conformità alla crittografia per le risorse BigQuery della tua organizzazione.

Questa integrazione ti consente di:

  • Richiedi CMEK per tutte le risorse BigQuery di un progetto.

  • Limita le chiavi Cloud KMS che possono essere utilizzate per proteggere le risorse in un progetto.

Richiedi CMEK per tutte le risorse

Un criterio comune è richiedere l'utilizzo di CMEK per proteggere tutte le risorse in un insieme specifico di progetti. Puoi utilizzare il vincolo constraints/gcp.restrictNonCmekServices per applicare questo criterio in BigQuery.

Se impostato, questo criterio dell'organizzazione fa sì che tutte le richieste di creazione di risorse senza una chiave Cloud KMS specificata non vadano a buon fine.

Una volta impostato, questo criterio si applica solo alle nuove risorse del progetto. Le eventuali risorse esistenti senza chiavi Cloud KMS impostate continueranno a esistere e saranno accessibili senza problemi.

Console

  1. Apri la pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Nel campo Filtra, inserisci constraints/gcp.restrictNonCmekServices e poi fai clic su Limita i servizi che possono creare risorse senza CMEK.

  3. Fai clic su Modifica.

  4. Seleziona Personalizza, seleziona Sostituisci e poi fai clic su Aggiungi regola.

  5. Seleziona Personalizzata e poi fai clic su Rifiuta.

  6. Nel campo Valore personalizzato, inserisci is:bigquery.googleapis.com.

  7. Fai clic su Fine e poi su Salva.

gcloud

  gcloud resource-manager org-policies --project=PROJECT_ID \
    deny gcp.restrictNonCmekServices is:bigquery.googleapis.com

Per verificare che il criterio sia stato applicato correttamente, puoi provare a creare una tabella nel progetto. Il processo non va a buon fine a meno che non specifichi una chiave Cloud KMS.

Questo criterio si applica anche alle tabelle dei risultati delle query nel progetto. Puoi specificare una chiave predefinita del progetto in modo che gli utenti non debbano specificare manualmente una chiave ogni volta che eseguono una query nel progetto.

Limitare le chiavi Cloud KMS per un progetto BigQuery

Puoi utilizzare il vincolo constraints/gcp.restrictCmekCryptoKeyProjects per limitare le chiavi Cloud KMS che puoi utilizzare per proteggere una risorsa in un progetto BigQuery.

Potresti specificare una regola, ad esempio "Per tutte le risorse BigQuery in projects/my-company-data-project, le chiavi Cloud KMS utilizzate in questo progetto devono provenire da projects/my-company-central-keys OPPURE projects/team-specific-keys".

Console

  1. Apri la pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Nel campo Filtra, inserisci constraints/gcp.restrictCmekCryptoKeyProjects e poi fai clic su Limita i progetti che possono fornire CryptoKey KMS per CMEK.

  3. Fai clic su Modifica.

  4. Seleziona Personalizza, seleziona Sostituisci e poi fai clic su Aggiungi regola.

  5. Seleziona Personalizzata e poi fai clic su Consenti.

  6. Nel campo Valore personalizzato, inserisci under:projects/<var>KMS_PROJECT_ID</var>.

  7. Fai clic su Fine e poi su Salva.

gcloud

  gcloud resource-manager org-policies --project=PROJECT_ID \
    allow gcp.restrictCmekCryptoKeyProjects under:projects/KMS_PROJECT_ID

Per verificare che il criterio sia stato applicato correttamente, puoi provare a creare una tabella utilizzando una chiave Cloud KMS di un altro progetto. Il processo non andrà a buon fine.

Limitazioni dei criteri dell'organizzazione

Esistono limitazioni associate all'impostazione di un criterio dell'organizzazione.

Ritardo di propagazione

Dopo aver impostato o aggiornato un criterio dell'organizzazione, l'applicazione del nuovo criterio può richiedere fino a 15 minuti. BigQuery memorizza nella cache i criteri per non influire negativamente sulla latenza di creazione di query e tabelle.

Autorizzazioni richieste per impostare un criterio dell'organizzazione

L'autorizzazione per impostare o aggiornare il criterio dell'organizzazione potrebbe essere difficile da acquisire per scopi di test. Devi disporre del ruolo Amministratore criteri dell'organizzazione, che può essere concesso solo a livello di organizzazione (anziché a livello di progetto o cartella).

Sebbene il ruolo debba essere concesso a livello di organizzazione, è comunque possibile specificare un criterio che si applichi solo a un progetto o a una cartella specifici.

Impatto della rotazione della chiave Cloud KMS

BigQuery non ruota automaticamente la chiave di crittografia di una tabella quando viene ruotata la chiave Cloud KMS associata alla tabella. Tutti i dati delle tabelle esistenti continuano a essere protetti dalla versione della chiave con cui sono stati creati.

Le tabelle appena create utilizzano la versione della chiave primaria al momento della loro creazione.

Per aggiornare una tabella in modo che utilizzi la versione della chiave più recente, modifica la tabella in modo che utilizzi una chiave Cloud KMS diversa e poi ripristina quella originale.

Impatto sulla fatturazione di Cloud KMS

Quando crei o tronchi una tabella protetta da CMEK, BigQuery genera una chiave di crittografia delle chiavi intermedia che viene poi criptata con la chiave Cloud KMS specificata.

Ai fini della fatturazione, ciò significa che né le chiamate a Cloud KMS né i relativi costi variano in base alle dimensioni della tabella. Per le tabelle protette da CMEK, si prevede una chiamata a Cloud KMS cryptoKeys.encrypt per ogni creazione o troncamento di tabelle e una chiamata a Cloud KMS cryptoKeys.decrypt per ogni tabella coinvolta in una query. Entrambi questi metodi appartengono alla categoria Operazioni sulle chiavi: crittografiche elencata nella sezione Prezzi di Cloud KMS.

La lettura o la scrittura in una tabella protetta da CMEK esistente richiama Cloud KMS cryptoKeys.decrypt perché la chiave intermedia deve essere decriptata.

Limitazioni

Accesso di BigQuery alla chiave Cloud KMS

Una chiave Cloud KMS è considerata disponibile e accessibile da BigQuery alle seguenti condizioni:

  • La chiave sia attivata
  • L'account di servizio BigQuery dispone delle autorizzazioni di crittografia e decrittografia per la chiave

Le sezioni seguenti descrivono l'impatto sugli inserimenti in streaming e sui dati inaccessibili a lungo termine quando una chiave non è accessibile.

Impatto sugli inserimenti di streaming

La chiave Cloud KMS deve essere disponibile e accessibile per almeno 24 ore consecutive nel periodo di 48 ore successivo a una richiesta di inserimento in streaming. Se la chiave non è disponibile e accessibile, i dati in streaming potrebbero non essere completamente memorizzati e andare persi. Per ulteriori informazioni sugli inserimenti di streaming, consulta Eseguire lo streaming di dati in BigQuery.

Impatto sui dati inaccessibili a lungo termine

Poiché BigQuery fornisce archiviazione gestita, i dati inaccessibili a lungo termine non sono compatibili con l'architettura di BigQuery. Se la chiave Cloud KMS di una determinata tabella BigQuery non è disponibile e non è accessibile per 60 giorni consecutivi, BigQuery potrebbe scegliere di eliminare la tabella e i relativi dati associati. Almeno 7 giorni prima dell'eliminazione dei dati, BigQuery invia un'email all'indirizzo associato all'account di fatturazione.

Utilizzo di origini dati esterne

Se esegui query sui dati archiviati in un'origine dati esterna come Cloud Storage con dati criptati con CMEK, la crittografia dei dati è gestita da Cloud Storage. Ad esempio, le tabelle BigLake supportano i dati criptati con CMEK in Cloud Storage.

BigQuery e le tabelle BigLake non supportano le chiavi di crittografia fornite dal cliente (CSEK).

Passare dalla crittografia protetta da CMEK a quella predefinita e viceversa

Non puoi passare da una tabella all'altra tra le crittografie predefinite e la crittografia CMEK. Per cambiare la crittografia, copia la tabella con le informazioni sulla crittografia di destinazione impostate o utilizza una query SELECT * per selezionarla al suo interno con la disposizione WRITE_TRUNCATE.

Utilizzo dei decoratori di tabelle

Se proteggi una tabella con Cloud KMS e poi sostituisci i dati al suo interno utilizzando il valore WRITE_TRUNCATE per un'operazione load, cp o query, i decoratori di intervallo non funzionano oltre il confine di modifica della crittografia. Puoi comunque utilizzare i decoratori di tabella, inclusi i decoratori di intervallo, per eseguire query sui dati precedenti o successivi al confine o eseguire query sull'istantanea in un determinato momento.

Query sulle tabelle con caratteri jolly

Non è possibile eseguire query sulle tabelle protette da CMEK con un suffisso con caratteri jolly.

Assistenza per gli script

Gli script non possono definire le tabelle di destinazione per le operazioni CMEK.

Supporto delle versioni

Il supporto di CMEK per BigQuery è disponibile solo per BigQuery Enterprise, BigQuery Enterprise Plus e BigQuery On-Demand.

Assistenza BigQuery Studio

Gli asset di codice di BigQuery Studio, tra cui le query salvate e i blocchi note, non supportano CMEK.

Domande frequenti

Chi ha bisogno dell'autorizzazione per la chiave Cloud KMS?

Con le chiavi di crittografia gestite dal cliente, non è necessario specificare ripetutamente le autorizzazioni. Se l'account di servizio BigQuery ha l'autorizzazione a utilizzare la chiave Cloud KMS per criptare e decriptare, chiunque abbia l'autorizzazione alla tabella BigQuery può accedere ai dati, anche se non ha accesso diretto alla chiave Cloud KMS.

Quale account di servizio viene utilizzato?

L'account di servizio BigQuery associato al progetto Google Cloud della tabella viene utilizzato per decriptare i dati della tabella. Gli account di servizio BigQuery sono univoci per ogni progetto. Per un job che scrive dati in una tabella anonima protetta da Cloud KMS, viene utilizzato l'account di servizio del progetto del job.

Ad esempio, considera tre tabelle protette da CMEK: table1, table2 e table3. Per eseguire query sui dati di {project1.table1, project2.table2} con la tabella di destinazione {project3.table3}:

  • Utilizza l'account di servizio project1 per project1.table1
  • Utilizza l'account di servizio project2 per project2.table2
  • Utilizza l'account di servizio project3 per project3.table3

In che modo BigQuery può utilizzare la mia chiave Cloud KMS?

BigQuery utilizza la chiave Cloud KMS per decriptare i dati in risposta a una query dell'utente, ad esempio tabledata.list o jobs.insert.

BigQuery può anche utilizzare la chiave per attività di ottimizzazione dello spazio di archiviazione e di manutenzione dei dati, come la conversione dei dati in un formato ottimizzato per la lettura.

Quali librerie di crittografia vengono utilizzate?

BigQuery si basa su Cloud KMS per la funzionalità CMEK. Cloud KMS utilizza Tink per la crittografia.

Come ricevere ulteriore assistenza?

Se hai domande a cui non trovi risposta qui, consulta l'assistenza BigQuery.

Risolvere gli errori

Di seguito sono descritti gli errori comuni e le mitigazioni consigliate.

Errore Consiglio
Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS L'account di servizio BigQuery associato al tuo progetto non dispone delle autorizzazioni IAM sufficienti per operare sulla chiave Cloud KMS specificata. Segui le istruzioni riportate nell'errore o in questa documentazione per concedere l'autorizzazione IAM corretta.
Le impostazioni di crittografia delle tabelle esistenti non corrispondono alle impostazioni di crittografia specificate nella richiesta Questo può verificarsi in scenari in cui la tabella di destinazione ha impostazioni di crittografia che non corrispondono a quelle della richiesta. Come misura di mitigazione, utilizza l'attributo disposizione scrittura TRUNCATE per sostituire la tabella o specifica una tabella di destinazione diversa.
Questa regione non è supportata La regione della chiave Cloud KMS non corrisponde alla regione del set di dati BigQuery della tabella di destinazione. Come misura di mitigazione, seleziona una chiave in una regione corrispondente al tuo set di dati o caricala in un set di dati corrispondente alla regione della chiave.
L'amministratore richiede di specificare una chiave di crittografia per le query nel progetto PROJECT_ID. Un criterio dell'organizzazione ha impedito la creazione di una risorsa o l'esecuzione di una query. Per scoprire di più su questo criterio, consulta Requisire CMEK per tutte le risorse di un progetto BigQuery.
L'amministratore impedisce l'utilizzo delle chiavi KMS del progetto KMS_PROJECT_ID per proteggere le risorse del progetto PROJECT_ID. Un criterio dell'organizzazione ha impedito la creazione di una risorsa o l'esecuzione di una query. Per scoprire di più su questo criterio, consulta Limitare le chiavi Cloud KMS per un progetto BigQuery.