Limita l'accesso con controllo dell'accesso a livello di colonna

Questa pagina spiega come utilizzare controllo dell'accesso a livello di colonna di BigQuery per limitare l'accesso ai dati di BigQuery a livello di colonna. Per informazioni generali sul controllo dell'accesso a livello di colonna, consulta Introduzione al controllo dell'accesso a livello di colonna di BigQuery.

Le istruzioni in questa pagina utilizzano sia BigQuery sia Data Catalog.

Per impostare un tag di criteri su una colonna, devi aggiornare lo schema della tabella. Puoi utilizzare la console Google Cloud , lo strumento a riga di comando bq e l'API BigQuery per impostare un tag di criteri su una colonna. Inoltre, puoi creare una tabella, specificare lo schema e i tag di policy in un'unica operazione utilizzando le seguenti tecniche:

  • I comandi bq mk e bq load dello strumento a riga di comando bq.
  • Il metodo API tables.insert.
  • La pagina Crea tabella nella console Google Cloud . Se utilizzi la consoleGoogle Cloud , devi selezionare Modifica come testo quando aggiungi o modifichi lo schema.

Per migliorare controllo dell'accesso a livello di colonna, puoi facoltativamente utilizzare il mascheramento dinamico dei dati. Il mascheramento dei dati consente di mascherare i dati sensibili sostituendo i contenuti nulli, predefiniti o con hashing al posto del valore effettivo della colonna.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Data Catalog and BigQuery Data Policy APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Data Catalog and BigQuery Data Policy APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  8. BigQuery viene abilitato automaticamente nei nuovi progetti, ma potresti doverlo attivare in un progetto preesistente.

    Abilita l'API BigQuery, se non è già abilitata.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilitare l'API

Ruoli e autorizzazioni

Esistono diversi ruoli correlati ai tag di policy per utenti e service account.

  • Gli utenti o i service account che amministrano i tag di policy devono avere il ruolo Amministratore tag di policy di Data Catalog. Il ruolo Amministratore tag di policy può gestire tassonomie e tag di policy, nonché concedere o rimuovere i ruoli IAM associati ai tag di policy.
  • Gli utenti o i service account che applicano il controllo degli accessi per controllo dell'accesso a livello di colonna devono disporre del ruolo BigQuery Admin o BigQuery Data Owner. I ruoli BigQuery possono gestire le policy dei dati, che vengono utilizzate per applicare controllo dell'accesso a una tassonomia.
  • Per visualizzare le tassonomie e i tag di policy per tutti i progetti di un'organizzazione nella consoleGoogle Cloud , gli utenti devono disporre del ruolo Visualizzatore organizzazione. In caso contrario, la console visualizza solo le tassonomie e i tag di policy associati al progetto selezionato.
  • Gli utenti o i service account che eseguono query sui dati protetti dal controllo dell'accesso a livello di colonna devono disporre del ruolo Lettore granulare di Data Catalog per accedere ai dati.

Per saperne di più su tutti i ruoli correlati ai tag di criteri, consulta Ruoli utilizzati con il controllo dell'accesso a livello di colonna.

Il ruolo Amministratore tag di policy di Data Catalog

Il ruolo Amministratore tag di policy di Data Catalog può creare e gestire i tag di policy dei dati.

Per concedere il ruolo Amministratore tag di policy, devi disporre dell'autorizzazione resourcemanager.projects.setIamPolicy per il progetto per cui vuoi concedere il ruolo. Se non disponi dell'autorizzazione resourcemanager.projects.setIamPolicy, chiedi a un Proprietario progetto di concederti l'autorizzazione o di eseguire i passaggi seguenti per te.

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai a IAM

  2. Se l'indirizzo email dell'utente a cui concedere il ruolo è presente nell'elenco, selezionalo e fai clic su Modifica. Viene visualizzato il riquadro Accesso in modifica. Fai clic su Aggiungi un altro ruolo.

    Se l'indirizzo email dell'utente non è presente nell'elenco, fai clic su Aggiungi, quindi inserisci l'indirizzo email nella casella Nuove entità.

  3. Fai clic sull'elenco a discesa Seleziona un ruolo.

  4. In Per prodotto o servizio, fai clic su Data Catalog. In Ruoli, fai clic su Amministratore tag di policy.

  5. Fai clic su Salva.

I ruoli BigQuery Data Policy Admin, BigQuery Admin e BigQuery Data Owner

I ruoli BigQuery Data Policy Admin, BigQuery Admin e BigQuery Data Owner possono gestire le policy dei dati.

Per concedere uno di questi ruoli, devi disporre dell'autorizzazione resourcemanager.projects.setIamPolicy sul progetto per cui vuoi concedere il ruolo. Se non disponi dell'autorizzazione resourcemanager.projects.setIamPolicy, chiedi a un Proprietario progetto di concederti l'autorizzazione o di eseguire i seguenti passaggi per te.

  1. Nella console Google Cloud vai alla pagina IAM.

    Vai a IAM

  2. Se l'indirizzo email dell'utente a cui concedere il ruolo è presente nell'elenco, selezionalo e fai clic su Modifica. Quindi, fai clic su Aggiungi un altro ruolo.

    Se l'indirizzo email dell'utente non è presente nell'elenco, fai clic su Aggiungi, quindi inserisci l'indirizzo email nella casella Nuove entità.

  3. Fai clic sull'elenco a discesa Seleziona un ruolo.

  4. Fai clic su BigQuery, quindi su BigQuery Data Policy Admin o BigQuery Admin o BigQuery Data Owner.

  5. Fai clic su Salva.

Il ruolo Organization Viewer

Il ruolo Organization Viewer consente agli utenti di visualizzare i dettagli della risorsa organizzazione. Per concedere questo ruolo, devi disporre dell'autorizzazione resourcemanager.organizations.setIamPolicy per l'organizzazione.

Il ruolo Data Catalog Fine-Grained Reader

Gli utenti che devono accedere ai dati protetti con il controllo dell'accesso a livello di colonna devono avere il ruolo Lettore granulare di Data Catalog o qualsiasi altro ruolo a cui è concessa l'autorizzazione datacatalog.categories.fineGrainedGet. Questo ruolo viene assegnato alle entità nell'ambito della configurazione di un tag di criteri.

Per concedere a un utente il ruolo Lettore granulare su un tag di criteri, devi disporre dell'autorizzazione datacatalog.taxonomies.setIamPolicy sul progetto che contiene la tassonomia del tag di criteri. Se non disponi dell'autorizzazione datacatalog.taxonomies.setIamPolicy, chiedi a un Proprietario progetto di concederti l'autorizzazione o di eseguire l'azione per te.

Per istruzioni, consulta Imposta le autorizzazioni sui tag di policy.

Configura controllo dell'accesso a livello di colonna

Configura controllo dell'accesso a livello di colonna completando queste attività:

  • Crea una tassonomia di tag di policy.
  • Associa le entità ai tag di policy e concedi alle entità il ruolo Lettore granulare di Data Catalog.
  • Associa i tag di policy alle colonne della tabella BigQuery.
  • Applica controllo dell'accesso alla tassonomia contenente i tag di policy.

Creazione tassonomie

All'utente o account di servizio che crea una tassonomia deve essere concesso il ruolo Amministratore tag di policy di Data Catalog.

Console

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic su Crea tassonomia.
  3. Nella pagina Nuova tassonomia:

    1. In Nome tassonomia, inserisci il nome della tassonomia che vuoi creare.
    2. In Descrizione, inserisci una descrizione.
    3. Se necessario, modifica il progetto elencato in Progetto.
    4. Se necessario, modifica la posizione indicata in Posizione.
    5. In Tag di policy, inserisci un nome e una descrizione per tag di criteri.
    6. Per aggiungere un tag di criteri secondario per un tag di criteri, fai clic su Aggiungi sottotag.
    7. Per aggiungere un nuovo tag di criteri allo stesso livello di un altro tag di criteri, fai clic su + Aggiungi tag di policy.
    8. Continua ad aggiungere tag di policy e tag di policy secondari in base alle esigenze della tua tassonomia.
    9. Al termine della creazione dei tag di policy per la gerarchia, fai clic su Crea.

API

Per utilizzare le tassonomie esistenti, chiama taxonomies.import anziché i primi due passaggi della procedura seguente.

  1. Chiama taxonomies.create per creare una tassonomia.
  2. Chiama taxonomies.policyTags.create per creare un tag di criteri.

Imposta le autorizzazioni sui tag di policy

All'utente o account di servizio che crea una tassonomia deve essere concesso il ruolo Amministratore tag di policy di Data Catalog.

Console

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sul nome della tassonomia che contiene i tag di policy pertinenti.

  3. Seleziona uno o più tag di policy.

  4. Se il riquadro informazioni è nascosto, fai clic su Mostra riquadro informazioni.

  5. Nel riquadro Informazioni puoi visualizzare i ruoli e le entità per i tag di policy selezionati. Aggiungi il ruolo Policy Tags Admin agli account che creano e gestiscono i tag di policy. Aggiungi il ruolo Fine-Grained Reader agli account che devono avere accesso ai dati protetti dal controllo dell'accesso a livello di colonna. Puoi utilizzare questo riquadro anche per rimuovere i ruoli dagli account o modificare altre autorizzazioni.

  6. Fai clic su Salva.

API

Chiama taxonomies.policytag.setIamPolicy per concedere l'accesso a un tag di criteri assegnando le entità ai ruoli appropriati.

Imposta i tag di policy sulle colonne

L'utente o il account di servizio che imposta un tag di criteri deve disporre delle autorizzazioni datacatalog.taxonomies.get e bigquery.tables.setCategory. datacatalog.taxonomies.get è incluso nei ruoli Amministratore tag di policy di Data Catalog e Visualizzatore progetto. bigquery.tables.setCategory è incluso nei ruoli Amministratore BigQuery (roles/bigquery.admin) e Proprietario dati BigQuery (roles/bigquery.dataOwner).

Per visualizzare le tassonomie e i tag di policy in tutti i progetti di un'organizzazione nella consoleGoogle Cloud , gli utenti devono disporre dell'autorizzazione resourcemanager.organizations.get, inclusa nel ruolo Visualizzatore organizzazione. Questa autorizzazione non è richiesta quando utilizzi l'API o lo strumento a riga di comando bq.

Console

Imposta il tag di criteri modificando uno schema utilizzando la consoleGoogle Cloud .

  1. Apri la pagina BigQuery nella console Google Cloud .

    Vai alla pagina BigQuery

  2. In Explorer di BigQuery, individua e seleziona la tabella che vuoi aggiornare. Viene visualizzato lo schema della tabella.

  3. Fai clic su Modifica schema.

  4. Nella schermata Schema attuale, seleziona la colonna di destinazione e fai clic su Aggiungi tag di policy.

  5. Nella schermata Aggiungi un tag di policy, individua e seleziona il tag di criteri che vuoi applicare alla colonna.

  6. Fai clic su Seleziona. La schermata dovrebbe essere simile alla seguente:

    Modifica schema.

  7. Fai clic su Salva.

bq

  1. Scrivi lo schema in un file locale.

    bq show --schema --format=prettyjson \
       project-id:dataset.table > schema.json

    dove:

    • project-id è l'ID progetto.
    • dataset è il nome del set di dati che contiene la tabella che stai aggiornando.
    • table è il nome della tabella che stai aggiornando.
  2. Modifica schema.json per impostare un tag di criteri su una colonna. Per il valore del campo names di policyTags, utilizza il nome della risorsa del tag di policy.

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
       }
     },
     ...
    ]
  3. Aggiorna lo schema.

    bq update \
       project-id:dataset.table schema.json

API

Per le tabelle esistenti, chiama tables.patch, mentre per le nuove tabelle chiama tables.insert. Utilizza la proprietà schema dell'oggetto Table che passi per impostare un tag di criteri nella definizione dello schema. Consulta lo schema di esempio della riga di comando per scoprire come impostare un tag di criteri.

Quando si lavora con una tabella esistente, è preferibile il metodo tables.patch, perché il metodo tables.update sostituisce l'intera risorsa della tabella.

Altri modi per impostare i tag di policy sulle colonne

Puoi anche impostare i tag di policy quando:

  • Utilizza bq mk per creare una tabella. Passa uno schema da utilizzare per la creazione della tabella.
  • Utilizza bq load per caricare i dati in una tabella. Passa uno schema da utilizzare quando carichi la tabella.

Per informazioni generali sullo schema, consulta Specifica di uno schema.

Applica controllo di accesso

Segui queste istruzioni per attivare o disattivare l'applicazione del controllo dell'accesso.

L'applicazione controllo dell'accesso richiede la creazione di una policy dei dati. Questa operazione viene eseguita automaticamente se applichi controllo dell'accesso utilizzando la consoleGoogle Cloud . Se vuoi applicare controllo dell'accesso utilizzando l'API BigQuery Data Policy, devi creare esplicitamente la policy dei dati.

L'entità che applica controllo dell'accesso deve avere il ruolo Amministratore BigQuery o Proprietario dati BigQuery. L'entità deve inoltre disporre del ruolo Data Catalog Admin o Data Catalog Viewer.

Per interrompere l'applicazione del controllo dell'accesso, se è attivo, fai clic su Applica il controllo degli accessi per disattivarlo.

Se hai policy dei dati associate a uno dei tag di policy nella tassonomia, devi eliminare tutte le policy dei dati nella tassonomia prima di interrompere l'applicazione del controllo dell'accesso. Se elimini le policy dei dati utilizzando l'API BigQuery Data Policy, devi eliminare tutte le policy dei dati con un dataPolicyType di DATA_MASKING_POLICY. Per saperne di più, consulta Elimina le policy relative ai dati.

Crea una policy dei dati

Per creare una policy sui dati:

Console

Per applicare controllo dell'accesso, segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sulla tassonomia di cui vuoi applicare il controllo dell'accesso a livello di colonna.

  3. Se l'opzione Applica il controllo degli accessi non è già attiva, fai clic su Applica il controllo degli accessi per attivarla.

API

Utilizza il metodo create e passa una risorsa DataPolicy in cui il campo dataPolicyType è impostato su COLUMN_LEVEL_SECURITY_POLICY.

Recupera una policy dei dati

Per ottenere informazioni su una policy dei dati, segui questi passaggi:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Gets a specific data policy from the BigQuery Data Policy API by its name.
 *
 * This sample demonstrates how to fetch the details of an existing data policy.
 * Data policies are used to define rules for data masking or row-level security
 * on BigQuery tables.
 *
 * @param {string} projectId The Google Cloud project ID (for example, 'example-project-id')
 * @param {string} [location='us'] The Google Cloud location of the data policy (For example, 'us', 'europe-west2').
 * @param {string} [dataPolicyId='example-data-policy'] The ID of the data policy to retrieve.
 */
async function getDataPolicy(
  projectId,
  location = 'us',
  dataPolicyId = 'example-data-policy',
) {
  const name = client.dataPolicyPath(projectId, location, dataPolicyId);

  const request = {
    name,
  };

  try {
    const [dataPolicy] = await client.getDataPolicy(request);
    console.log('Successfully retrieved data policy:');
    console.log(`  Name: ${dataPolicy.name}`);
    console.log(`  Type: ${dataPolicy.dataPolicyType}`);
    if (dataPolicy.dataMaskingPolicy) {
      console.log(
        `  Data Masking Policy: ${dataPolicy.dataMaskingPolicy.predefinedExpression || dataPolicy.dataMaskingPolicy.routine}`,
      );
    }
    if (dataPolicy.grantees && dataPolicy.grantees.length > 0) {
      console.log(`  Grantees: ${dataPolicy.grantees.join(', ')}`);
    }
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Error: Data policy '${dataPolicyId}' not found in location '${location}' for project '${projectId}'.`,
      );
      console.error(
        'Make sure the data policy ID, project ID, and location are correct.',
      );
    } else {
      console.error('Error retrieving data policy:', err.message);
    }
  }
}

Python

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

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

from google.api_core import exceptions
from google.cloud import bigquery_datapolicies_v2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def get_data_policy(
    project_id: str,
    location: str,
    data_policy_id: str,
) -> None:
    """Gets a specific data policy from the BigQuery Data Policy API by its name.


    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the data policy (for example, "us", "eu").
        data_policy_id: The user-assigned ID of the data policy.
    """
    client = bigquery_datapolicies_v2.DataPolicyServiceClient()

    data_policy_name = client.data_policy_path(
        project=project_id,
        location=location,
        data_policy=data_policy_id,
    )

    try:
        response = client.get_data_policy(name=data_policy_name)

        print(f"Successfully retrieved data policy: {response.name}")
        print(f"  Data Policy ID: {response.data_policy_id}")
        print(f"  Data Policy Type: {response.data_policy_type.name}")
        if response.policy_tag:
            print(f"  Policy Tag: {response.policy_tag}")
        if response.grantees:
            print(f"  Grantees: {', '.join(response.grantees)}")
        if response.data_masking_policy:
            masking_policy = response.data_masking_policy
            if masking_policy.predefined_expression:
                print(
                    f"  Data Masking Predefined Expression: {masking_policy.predefined_expression.name}"
                )
            elif masking_policy.routine:
                print(f"  Data Masking Routine: {masking_policy.routine}")

    except exceptions.NotFound:
        print(f"Error: Data policy '{data_policy_name}' not found.")
        print("Make sure the data policy ID, project ID, and location are correct.")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataMaskingPolicy;
import com.google.cloud.bigquery.datapolicies.v2.DataMaskingPolicy.PredefinedExpression;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicy;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyName;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import java.io.IOException;

public class GetDataPolicy {

  /**
   * Gets a specific data policy from the BigQuery Data Policy API by its name.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policy (for example, "us-central1").
   * @param dataPolicyId The user-assigned ID of the data policy (for example,
   *     "example_data_policy").
   */
  public static void getDataPolicy(String projectId, String location, String dataPolicyId) {
    DataPolicyName dataPolicyName = DataPolicyName.of(projectId, location, dataPolicyId);

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      DataPolicy response = client.getDataPolicy(dataPolicyName);

      System.out.printf("Successfully retrieved data policy: %s%n", response.getName());
      System.out.printf("  Data Policy ID: %s%n", response.getDataPolicyId());
      System.out.printf("  Data Policy Type: %s%n", response.getDataPolicyType());
      if (!response.getPolicyTag().isEmpty()) {
        System.out.printf("  Policy Tag: %s%n", response.getPolicyTag());
      }
      if (!response.getGranteesList().isEmpty()) {
        System.out.printf("  Grantees: %s%n", String.join(", ", response.getGranteesList()));
      }
      if (response.hasDataMaskingPolicy()) {
        DataMaskingPolicy maskingPolicy = response.getDataMaskingPolicy();
        if (maskingPolicy.getPredefinedExpression()
            != PredefinedExpression.PREDEFINED_EXPRESSION_UNSPECIFIED) {
          System.out.printf(
              "  Data Masking Predefined Expression: %s%n",
              maskingPolicy.getPredefinedExpression());
        } else if (!maskingPolicy.getRoutine().isEmpty()) {
          System.out.printf("  Data Masking Routine: %s%n", maskingPolicy.getRoutine());
        }
      }
    } catch (NotFoundException err) {
      System.err.printf(
          "error: data policy '%s' not found: %s%n", dataPolicyName, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to get data policy '%s': %s%n", dataPolicyName, err.getMessage());
    }
  }

Ottieni la policy IAM (Identity and Access Management) per una policy dei dati

Per ottenere la policy IAM per una policy dei dati, segui questi passaggi:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Get the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
 * This is useful for auditing which members have which roles on the policy.
 *
 *
 * @param {string} projectId Google Cloud Project ID (For example, 'example-project-id')
 * @param {string} location Google Cloud Location (For example, 'us-central1')
 * @param {string} dataPolicyId The ID of the data policy (For example, 'example-data-policy-id')
 */
async function getIamPolicy(projectId, location, dataPolicyId) {
  const resourceName = client.dataPolicyPath(projectId, location, dataPolicyId);

  const request = {
    resource: resourceName,
  };

  try {
    const [policy] = await client.getIamPolicy(request);
    console.log(
      'Successfully retrieved IAM policy for data policy %s:',
      resourceName,
    );
    console.log(JSON.stringify(policy, null, 2));
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Error: Data Policy '${dataPolicyId}' not found in location '${location}' of project '${projectId}'. ` +
          'Make sure the data policy exists and the resource name is correct.',
      );
    } else {
      console.error(
        `Error getting IAM policy for data policy '${dataPolicyId}':`,
        err,
      );
    }
  }
}

Python

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

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

from google.api_core import exceptions
from google.cloud import bigquery_datapolicies_v2
from google.iam.v1 import iam_policy_pb2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def get_data_policy_iam_policy(
    project_id: str,
    location: str,
    data_policy_id: str,
) -> None:
    """Get the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
    This is useful for auditing which members have which roles on the policy.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the data policy (for example, "us").
        data_policy_id: The ID of the data policy.
    """

    resource_name = client.data_policy_path(
        project=project_id,
        location=location,
        data_policy=data_policy_id,
    )

    request = iam_policy_pb2.GetIamPolicyRequest(resource=resource_name)

    try:
        policy = client.get_iam_policy(request=request)

        print(f"Successfully retrieved IAM policy for data policy: {resource_name}")
        print("Policy Version:", policy.version)
        if policy.bindings:
            print("Policy Bindings:")
            for binding in policy.bindings:
                print(f"  Role: {binding.role}")
                print(f"  Members: {', '.join(binding.members)}")
                if binding.condition.expression:
                    print(f"  Condition: {binding.condition.expression}")
        else:
            print("No bindings found in the policy.")

    except exceptions.NotFound:
        print(f"Error: Data policy '{resource_name}' not found.")
        print("Make sure the project ID, location, and data policy ID are correct.")
    except exceptions.GoogleAPIError as e:
        print(f"An API error occurred: {e}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyName;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetIamPolicy {

  /**
   * Gets the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policy (for example, "us-central1").
   * @param dataPolicyId The ID of the data policy (for example, "example_data_policy").
   */
  public static void getIamPolicy(String projectId, String location, String dataPolicyId) {
    DataPolicyName resourceName = DataPolicyName.of(projectId, location, dataPolicyId);

    GetIamPolicyRequest request =
        GetIamPolicyRequest.newBuilder().setResource(resourceName.toString()).build();

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      Policy policy = client.getIamPolicy(request);

      System.out.printf("Successfully retrieved IAM policy for data policy: %s%n", resourceName);
      System.out.printf("Policy Version: %d%n", policy.getVersion());
      if (policy.getBindingsCount() > 0) {
        System.out.println("Policy Bindings:");
        for (Binding binding : policy.getBindingsList()) {
          System.out.printf("  Role: %s%n", binding.getRole());
          System.out.printf("  Members: %s%n", String.join(", ", binding.getMembersList()));
          if (binding.hasCondition() && !binding.getCondition().getExpression().isEmpty()) {
            System.out.printf("  Condition: %s%n", binding.getCondition().getExpression());
          }
        }
      } else {
        System.out.println("No bindings found in the policy.");
      }
    } catch (NotFoundException err) {
      System.err.printf("error: data policy '%s' not found: %s%n", resourceName, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to get IAM policy for data policy '%s': %s%n",
          resourceName, err.getMessage());
    }
  }

Elenca le policy sui dati

Per elencare le policy di dati, segui questi passaggi:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Lists all data policies in a given project and location.
 *
 * Data policies define rules for data masking, row-level security, or column-level security.
 *
 * @param {string} projectId The Google Cloud project ID. (for example, 'example-project-id')
 * @param {string} location The Google Cloud location of the data policies. (For example, 'us')
 */
async function listDataPolicies(projectId, location) {
  const parent = `projects/${projectId}/locations/${location}`;

  const request = {
    parent,
  };

  try {
    console.log(
      `Listing data policies for project: ${projectId} in location: ${location}`,
    );
    const [dataPolicies] = await client.listDataPolicies(request);

    if (dataPolicies.length === 0) {
      console.log(
        `No data policies found in location ${location} for project ${projectId}.`,
      );
      return;
    }

    console.log('Data Policies:');
    for (const dataPolicy of dataPolicies) {
      console.log(`  Data Policy Name: ${dataPolicy.name}`);
      console.log(`    ID: ${dataPolicy.dataPolicyId}`);
      console.log(`    Type: ${dataPolicy.dataPolicyType}`);
      if (dataPolicy.policyTag) {
        console.log(`    Policy Tag: ${dataPolicy.policyTag}`);
      }
      if (dataPolicy.grantees && dataPolicy.grantees.length > 0) {
        console.log(`    Grantees: ${dataPolicy.grantees.join(', ')}`);
      }
      if (dataPolicy.dataMaskingPolicy) {
        if (dataPolicy.dataMaskingPolicy.predefinedExpression) {
          console.log(
            `    Data Masking Predefined Expression: ${dataPolicy.dataMaskingPolicy.predefinedExpression}`,
          );
        } else if (dataPolicy.dataMaskingPolicy.routine) {
          console.log(
            `    Data Masking Routine: ${dataPolicy.dataMaskingPolicy.routine}`,
          );
        }
      }
    }

    console.log(`Successfully listed ${dataPolicies.length} data policies.`);
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Error: The project or location '${location}' for project '${projectId}' was not found. ` +
          'Make sure the project ID and location are correct and that the BigQuery Data Policy API is enabled.',
      );
    } else if (err.code === status.PERMISSION_DENIED) {
      console.error(
        `Error: Permission denied when listing data policies for project '${projectId}' in location '${location}'. ` +
          'Make sure the authenticated account has the necessary permissions (For example, bigquery.datapolicies.list).',
      );
    } else {
      console.error(`Error listing data policies: ${err.message}`);
    }
  }
}

Python

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

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

import google.api_core.exceptions
from google.cloud import bigquery_datapolicies_v2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def list_data_policies(project_id: str, location: str) -> None:
    """Lists all data policies in a specified project.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the data policies (for example, "us", "us-central1").
    """

    parent = f"projects/{project_id}/locations/{location}"

    try:
        request = bigquery_datapolicies_v2.ListDataPoliciesRequest(parent=parent)

        print(
            f"Listing data policies for project '{project_id}' in location '{location}':"
        )
        page_result = client.list_data_policies(request=request)

        found_policies = False
        for data_policy in page_result:
            found_policies = True
            print(f"  Data Policy Name: {data_policy.name}")
            print(f"  Data Policy ID: {data_policy.data_policy_id}")
            print(f"  Data Policy Type: {data_policy.data_policy_type.name}")
            if data_policy.policy_tag:
                print(f"  Policy Tag: {data_policy.policy_tag}")
            if data_policy.grantees:
                print(f"  Grantees: {', '.join(data_policy.grantees)}")
            print("-" * 20)

        if not found_policies:
            print("No data policies found.")

    except google.api_core.exceptions.NotFound as e:
        print(f"Error: The specified project or location was not found or accessible.")
        print(f"Details: {e}")
        print(
            "Make sure the project ID and location are correct and you have the necessary permissions."
        )
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicy;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient.ListDataPoliciesPagedResponse;
import com.google.cloud.bigquery.datapolicies.v2.ListDataPoliciesRequest;
import com.google.cloud.bigquery.datapolicies.v2.LocationName;
import java.io.IOException;

public class ListDataPolicies {

  /**
   * Lists all data policies in a specified project and location.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policies (for example, "us-central1").
   */
  public static void listDataPolicies(String projectId, String location) {
    LocationName parent = LocationName.of(projectId, location);

    ListDataPoliciesRequest request =
        ListDataPoliciesRequest.newBuilder().setParent(parent.toString()).build();

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      System.out.printf(
          "Listing data policies for project '%s' in location '%s':%n", projectId, location);
      ListDataPoliciesPagedResponse pageResult = client.listDataPolicies(request);

      boolean foundPolicies = false;
      for (DataPolicy dataPolicy : pageResult.iterateAll()) {
        foundPolicies = true;
        System.out.printf("  Data Policy Name: %s%n", dataPolicy.getName());
        System.out.printf("  Data Policy ID: %s%n", dataPolicy.getDataPolicyId());
        System.out.printf("  Data Policy Type: %s%n", dataPolicy.getDataPolicyType());
        if (!dataPolicy.getPolicyTag().isEmpty()) {
          System.out.printf("  Policy Tag: %s%n", dataPolicy.getPolicyTag());
        }
        if (!dataPolicy.getGranteesList().isEmpty()) {
          System.out.printf("  Grantees: %s%n", String.join(", ", dataPolicy.getGranteesList()));
        }
        System.out.println("--------------------");
      }

      if (!foundPolicies) {
        System.out.println("No data policies found.");
      }
    } catch (NotFoundException err) {
      System.err.printf(
          "error: project '%s' or location '%s' was not found: %s%n",
          projectId, location, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to list data policies in location '%s' for project '%s': %s%n",
          location, projectId, err.getMessage());
    }
  }

Elimina una policy dei dati

Per eliminare una policy dei dati:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Deletes a data policy from the BigQuery Data Policy API, which is identified by its project ID, location, and data policy ID.
 *
 * @param {string} projectId The Google Cloud project ID.
 * @param {string} location The Google Cloud location (For example, 'us').
 * @param {string} dataPolicyId The ID of the data policy to delete (For example, 'example-data-policy').
 */
async function deleteDataPolicy(projectId, location, dataPolicyId) {
  const name = client.dataPolicyPath(projectId, location, dataPolicyId);

  const request = {
    name,
  };

  try {
    await client.deleteDataPolicy(request);
    console.log(`Successfully deleted data policy: ${name}`);
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Data policy ${name} not found. Make sure the data policy ID and location are correct.`,
      );
    } else {
      console.error(`Error deleting data policy ${name}:`, err.message);
    }
  }
}

Python

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

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

from google.api_core import exceptions as core_exceptions
from google.cloud import bigquery_datapolicies_v2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def delete_data_policy(project_id: str, location: str, data_policy_id: str) -> None:
    """Deletes a data policy from the BigQuery Data Policy APIs.

    Args:
        project_id: The Google Cloud project ID.
        location: The location of the data policy (for example, "us").
        data_policy_id: The ID of the data policy to delete.
    """

    name = client.data_policy_path(
        project=project_id, location=location, data_policy=data_policy_id
    )

    try:
        client.delete_data_policy(name=name)
        print(f"Successfully deleted data policy: {name}")
    except core_exceptions.NotFound:
        print(f"Data policy '{name}' not found. It may have already been deleted.")
    except Exception as e:
        print(f"Error deleting data policy '{name}': {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyName;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import java.io.IOException;

public class DeleteDataPolicy {

  /**
   * Deletes a data policy from the BigQuery Data Policy API.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policy (for example, "us-central1").
   * @param dataPolicyId The ID of the data policy to delete (for example, "example_data_policy").
   */
  public static void deleteDataPolicy(String projectId, String location, String dataPolicyId) {
    DataPolicyName name = DataPolicyName.of(projectId, location, dataPolicyId);

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      client.deleteDataPolicy(name);
      System.out.printf("Successfully deleted data policy: %s%n", name);
    } catch (NotFoundException err) {
      System.err.printf(
          "error: data policy '%s' not found: %s%n", name, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to delete data policy '%s': %s%n", name, err.getMessage());
    }
  }

Utilizza i tag di policy

Utilizza questa sezione per scoprire come visualizzare, modificare ed eliminare i tag di policy.

Visualizza i tag di policy

Per visualizzare i tag di policy che hai creato per una tassonomia:

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sulla tassonomia di cui vuoi visualizzare i tag di policy. La pagina Tassonomie mostra i tag di policy nella tassonomia.

Visualizza i tag di policy nello schema

Puoi visualizzare i tag di policy applicati a una tabella quando esamini lo schema della tabella. Puoi visualizzare lo schema utilizzando la console Google Cloud , lo strumento a riga di comando bq, l'API BigQuery e le librerie client. Per informazioni dettagliate su come visualizzare lo schema, consulta Recupero delle informazioni sulla tabella.

Autorizzazioni di visualizzazione sui tag di policy

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sul nome della tassonomia che contiene i tag di policy pertinenti.
  3. Seleziona uno o più tag di policy.
  4. Se il riquadro informazioni è nascosto, fai clic su Mostra riquadro informazioni.
  5. Nel riquadro Informazioni puoi visualizzare i ruoli e le entità per i tag di policy selezionati.

Aggiorna le autorizzazioni sui tag di policy

All'account utente o al service account che crea una tassonomia deve essere concesso il ruolo Amministratore tag di policy di Data Catalog.

Console

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sul nome della tassonomia che contiene i tag di policy pertinenti.

  3. Seleziona uno o più tag di policy.

  4. Se il riquadro informazioni è nascosto, fai clic su Mostra riquadro informazioni.

  5. Nel riquadro Informazioni puoi visualizzare i ruoli e le entità per i tag di policy selezionati. Aggiungi il ruolo Policy Tags Admin agli account che creano e gestiscono i tag di policy. Aggiungi il ruolo Fine-Grained Reader agli account che devono avere accesso ai dati protetti dal controllo dell'accesso a livello di colonna. Puoi utilizzare questo riquadro anche per rimuovere i ruoli dagli account o modificare altre autorizzazioni.

  6. Fai clic su Salva.

API

Chiama taxonomies.policytag.setIamPolicy per concedere l'accesso a un tag di criteri assegnando le entità ai ruoli appropriati.

Recupera i nomi delle risorse dei tag di criteri

Il nome della risorsa del tag di criteri è necessario quando applichi il tag di criteri a una colonna.

Per recuperare il nome della risorsa del tag di criteri:

  1. Visualizza i tag di policy per la tassonomia che contiene il tag di criteri.

  2. Trova il tag di criteri di cui vuoi copiare il nome della risorsa.

  3. Fai clic sull'icona Copia nome risorsa tag di criteri policy.

    Copia il nome della risorsa.

Cancella i tag di policy

Aggiorna lo schema della tabella per cancellare un tag di criteri da una colonna. Puoi utilizzare la consoleGoogle Cloud , lo strumento a riga di comando bq e il metodo dell'API BigQuery per cancellare un tag di criteri da una colonna.

Console

Nella pagina Schema attuale, in Tag di policy, fai clic su X.

Cancella tag di criteri.

bq

  1. Recupera lo schema e salvalo in un file locale.

    bq show --schema --format=prettyjson \
       project-id:dataset.table > schema.json

    dove:

    • project-id è l'ID progetto.
    • dataset è il nome del set di dati che contiene la tabella che stai aggiornando.
    • table è il nome della tabella che stai aggiornando.
  2. Modifica schema.json per cancellare un tag di criteri da una colonna.

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": []
       }
     },
     ...
    ]
  3. Aggiorna lo schema.

    bq update \
       project-id:dataset.table schema.json

API

Chiama tables.patch e utilizza la proprietà schema per cancellare un tag di criteri nella definizione dello schema. Consulta lo schema di esempio della riga di comando per scoprire come cancellare un tag di criteri.

Poiché il metodo tables.update sostituisce l'intera risorsa della tabella, è preferibile il metodo tables.patch.

Elimina i tag di policy

Puoi eliminare uno o più tag di policy in una tassonomia oppure puoi eliminare la tassonomia e tutti i tag di policy che contiene. L'eliminazione di un tag di criteri rimuove automaticamente l'associazione tra il tag di criteri e le colonne a cui è stato applicato.

Quando elimini un tag di criteri a cui è associata una policy dei dati, l'eliminazione della policy dei dati può richiedere fino a 30 minuti. Puoi eliminare direttamente la policy relativa ai dati se vuoi che venga eliminata immediatamente.

Per eliminare uno o più tag di policy in una tassonomia, segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sul nome della tassonomia contenente i tag da eliminare.
  3. Fai clic su Modifica.
  4. Fai clic su accanto ai tag di policy da eliminare.
  5. Fai clic su Salva.
  6. Fai clic su Conferma.

Per eliminare un'intera tassonomia:

  1. Nella console Google Cloud , vai alla pagina Tassonomie dei tag di policy.

    Vai a Tassonomie tag di policy

  2. Fai clic sul nome della tassonomia contenente i tag da eliminare.
  3. Fai clic su Elimina tassonomia dei tag di policy.
  4. Digita il nome della tassonomia e fai clic su Elimina.

Esegui query sui dati con controllo dell'accesso a livello di colonna

Se un utente ha accesso al set di dati e dispone del ruolo Lettore con granularità di Data Catalog, i dati della colonna sono disponibili per l'utente. L'utente esegue una query come di consueto.

Se un utente ha accesso al set di dati, ma non ha il ruolo Lettore con granularità fine di Data Catalog, i dati della colonna non sono disponibili per l'utente. Se un utente di questo tipo esegue SELECT *, riceve un errore che elenca le colonne a cui non può accedere. Per risolvere l'errore, puoi:

  • Modifica la query per escludere le colonne a cui l'utente non può accedere. Ad esempio, se l'utente non ha accesso alla colonna ssn, ma ha accesso alle colonne rimanenti, può eseguire la seguente query:

    SELECT * EXCEPT (ssn) FROM ...

    Nell'esempio precedente, la clausola EXCEPT esclude la colonna ssn.

  • Chiedi a un amministratore di Data Catalog di aggiungere l'utente come lettore con accesso granulare di Data Catalog alla classe di dati pertinente. Il messaggio di errore fornisce il nome completo del tag di criteri per cui l'utente deve avere accesso.

Domande frequenti

La sicurezza a livello di colonna di BigQuery funziona per le viste?

Sì. Le viste derivano da una tabella sottostante. Lo stesso controllo dell'accesso a livello di colonna sulla tabella si applica quando si accede alle colonne protette tramite una vista.

In BigQuery esistono due tipi di viste: logiche e autorizzate. Entrambi i tipi di viste derivano da una tabella di origine e sono coerenti con il controllo dell'accesso a livello di colonna della tabella.

Per saperne di più, consulta Viste autorizzate.

Controllo dell'accesso a livello di colonna funziona sulle colonne STRUCT o RECORD?

Sì. Puoi applicare i tag di policy solo ai campi foglia e solo questi campi sono protetti.

Posso utilizzare sia l'SQL precedente sia GoogleSQL?

Puoi utilizzare GoogleSQL per eseguire query sulle tabelle protette dal controllo dell'accesso a livello di colonna.

Le query SQL precedente vengono rifiutate se sono presenti tag di policy nelle tabelle di destinazione.

Le query vengono registrate in Cloud Logging?

Il controllo dei tag di policy viene registrato in Logging. Per saperne di più, consulta Audit logging per controllo dell'accesso a livello di colonna.

La copia di una tabella è interessata dal controllo dell'accesso a livello di colonna?

Sì. Non puoi copiare le colonne se non hai accesso.

Le seguenti operazioni verificano le autorizzazioni a livello di colonna.

Quando copio i dati in una nuova tabella, i tag di policy vengono propagati automaticamente?

Nella maggior parte dei casi, no. Se copi i risultati di una query in una nuova tabella, alla nuova tabella non vengono assegnati automaticamente i tag di policy. Pertanto, la nuova tabella non ha controllo dell'accesso a livello di colonna. Lo stesso vale se esporti i dati in Cloud Storage.

L'eccezione è se utilizzi un job di copia della tabella. Poiché i job di copia delle tabelle non applicano alcuna trasformazione dei dati, i tag di policy vengono propagati automaticamente alle tabelle di destinazione. Questa eccezione non si applica ai job di copia delle tabelle tra regioni, perché i job di copia delle tabelle tra regioni non supportano la copia dei tag di policy.

Controllo dell'accesso a livello di colonna è compatibile con Virtual Private Cloud?

Sì, controllo dell'accesso a livello di colonna e il VPC sono compatibili e complementari.

VPC sfrutta IAM per controllare l'accesso ai servizi, come BigQuery e Cloud Storage. Il controllo degli accessi a livello di colonna fornisce una sicurezza granulare delle singole colonne all'interno di BigQuery.

Per applicare il VPC per i tag di policy e le policy dei dati per il controllo dell'accesso a livello di colonna e il mascheramento dinamico dei dati, devi limitare le seguenti API nel perimetro:

Risoluzione dei problemi

Le sezioni seguenti spiegano come risolvere i problemi relativi al controllo degli accessi a livello di colonna e ai tag di policy di Data Catalog.

Non riesco a visualizzare i ruoli di Data Catalog

Se non riesci a visualizzare ruoli come Lettore granulare di Data Catalog, è possibile che tu non abbia abilitato l'API Data Catalog nel tuo progetto. Per scoprire come abilitare l'API Data Catalog, consulta Prima di iniziare. I ruoli Data Catalog vengono visualizzati alcuni minuti dopo l'abilitazione dell'API Data Catalog.

Non riesco a visualizzare la pagina Tassonomie

Per visualizzare la pagina Tassonomie di tag di policy nella consoleGoogle Cloud , devi disporre di autorizzazioni aggiuntive. Ad esempio, il ruolo Amministratore tag di policy di Data Catalog ha accesso alla pagina Tassonomie.

Ho applicato i tag di policy, ma non sembra funzionare

Se continui a ricevere risultati delle query per un account che non dovrebbe avere accesso, è possibile che l'account riceva risultati memorizzati nella cache. In particolare, se in precedenza hai eseguito la query con successo e poi hai applicato i tag di policy, potresti ottenere risultati dalla cache dei risultati delle query. Per impostazione predefinita, i risultati delle query vengono memorizzati nella cache per 24 ore. La query non va a buon fine immediatamente se disattivi la cache dei risultati. Per maggiori dettagli sulla memorizzazione nella cache, consulta Impatto del controllo dell'accesso a livello di colonna.

In genere, la propagazione degli aggiornamenti IAM richiede circa 30 secondi. La propagazione delle modifiche alla gerarchia dei tag di criteri può richiedere fino a 30 minuti.

Non ho l'autorizzazione per leggere da una tabella con sicurezza a livello di colonna

Devi disporre del ruolo Fine-Grained Reader o del ruolo Masked Reader a diversi livelli, ad esempio organizzazione, cartella, progetto e tag di criteri. Il ruolo Lettore granulare concede l'accesso ai dati non elaborati, mentre il ruolo Lettore mascherato concede l'accesso ai dati mascherati. Puoi utilizzare lo strumento per la risoluzione dei problemi relativi alle policy IAM per verificare questa autorizzazione a livello di progetto.

Ho impostato il controllo granulare dell'accesso nella tassonomia dei tag di criteri, ma gli utenti vedono i dati protetti

Per risolvere il problema, verifica i seguenti dettagli:

  • Nella pagina Tassonomie dei tag di policy del Centro sicurezza di BigQuery, verifica che l'opzione Applica il controllo dell'accesso sia in posizione On.
  • Assicurati che le query non utilizzino i risultati delle query memorizzati nella cache. Se utilizzi lo strumento a riga di comando bq per testare le query, utilizza il flag --nouse_cache per disabilitare la cache delle query. Ad esempio:

    bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"

Considerazioni sulla migrazione dei progetti

I tag di policy e le tassonomie si trovano all'interno di un'organizzazione Google Cloud specifica e non vengono riassociati automaticamente quando viene eseguita la migrazione di un progetto a una nuova organizzazione. Se esegui la migrazione di un progetto che utilizza tag di policy per controllo dell'accesso a livello di colonna a un'altra organizzazione, si verificano i seguenti problemi:

  • I tag di policy non sono più gestibili nella console Google Cloud all'interno del progetto di cui è stata eseguita la migrazione.
  • Non puoi applicare questi tag di policy alle nuove colonne del progetto di cui è stata eseguita la migrazione.
  • I controlli di accesso a livello di colonna esistenti potrebbero sembrare ancora attivi, ma il link alla tassonomia di origine nell'organizzazione originale è interrotto per scopi di gestione.

Per risolvere questo problema, è necessario l'intervento manuale dell'assistenza Google Cloud per riassociare la tassonomia alla nuova organizzazione. Se hai eseguito la migrazione di un progetto con tag di policy e riscontri questi problemi, contatta l'assistenza clienti Google Cloud.