Sicurezza di BigQuery a livello di riga con i servizi avanzati

Ad esempio, supponiamo che tu stia cercando di creare una soluzione per la tua organizzazione di vendita. L'organizzazione di vendita è suddivisa in più regioni, ognuna delle quali ha il proprio Regional Manager. Il set di dati sulle vendite in BigQuery contiene l'importo delle vendite per regione e per data.

La soluzione proposta avrà un'unica dashboard in cui i responsabili regionali possono visualizzare i dati di vendita solo per le proprie regioni.

Requisiti

  • Gli spettatori della dashboard avranno eseguito l'accesso con un Account Google.
  • È disponibile una mappatura tra l'email dell'utente e i dati/le righe a cui ha accesso.
  • Per accedere ai dati BigQuery verrà utilizzato un service account. Pertanto, la fatturazione sarà centralizzata e gestita dal fornitore della dashboard.

Limitazioni

  • La dashboard richiede un'autorizzazione una tantum da parte di ogni visualizzatore alla prima visualizzazione.
  • Gli spettatori non possono modificare la dashboard o condividerla con altri.
  • Se sei un cliente Workspace e il tuo amministratore ha disattivato la condivisione dei file di Drive con "Chiunque abbia il link", rimuovi la limitazione alla condivisione o sviluppa la soluzione su un account Gmail.com.

Soluzione

Completa tutti i seguenti passaggi per implementare la soluzione.

Crea un nuovo connettore della community

Per iniziare, consulta la sezione Come funzionano i connettori della community e completa il Codelab sui connettori della community. Utilizza lo strumento per sviluppatori per creare connettori per un processo di sviluppo più rapido e semplice.

Scrivere il codice del connettore

  1. getAuthType() dovrebbe restituire NONE.
  2. getConfig() deve restituire una configurazione vuota.
    • (Facoltativo) Se hai bisogno di input specifici per configurare la dashboard, puoi richiedere l'input dell'utente qui.
  3. getSchema() dovrebbe restituire lo schema della query.
    • (Facoltativo) Puoi aggiungere campi e calcoli personalizzati nella query SQL o utilizzando i campi calcolati come parte dello schema.
  4. getData() verrà completato in un passaggio successivo.

Aggiorna manifest

Visualizza il riferimento al file manifest e completa il file manifest con tutte le informazioni richieste, tra cui:

  1. imposta dataStudio.forceViewersCredentials su true.
  2. imposta dataStudio.advancedServices.data su true.
  3. Per oauthScopes aggiungi https://www.googleapis.com/auth/userinfo.email e https://www.googleapis.com/auth/script.external_request. Per saperne di più, consulta Ambiti di autorizzazione per Apps Script.
    • Condizionale: aggiungi tutti gli ambiti pertinenti per i servizi utilizzati nel connettore.

Il file manifest dovrebbe avere questo aspetto:

{
  ...
  "dataStudio": {
    "forceViewersCredentials": true,
    "advancedServices": {
       "data": true
    },
    ...
  }
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/userinfo.email"
    ],
  ...
}

Implementare un service account

  1. Crea un service account nel tuo progetto cloud Google. Questo sarà il tuo progetto di fatturazione.
  2. Assicurati che questo service account abbia accesso a BigQuery nel progetto cloud.
    • Ruoli Identity and Access Management (IAM) richiesti: BigQuery Data Viewer, BigQuery Job User
  3. Scarica il file JSON per ottenere le chiavi dei service account. Archivia le chiavi nelle proprietà script del progetto connettore.
  4. Includi la libreria OAuth2 per Apps Script nel tuo progetto Apps Script.
  5. Implementa il codice OAuth2 richiesto per il service account:
    var SERVICE_ACCOUNT_CREDS = 'SERVICE_ACCOUNT_CREDS';
    var SERVICE_ACCOUNT_KEY = 'private_key';
    var SERVICE_ACCOUNT_EMAIL = 'client_email';
    var BILLING_PROJECT_ID = 'project_id';
    
    /**
     * Copy the entire credentials JSON file from creating a service account in GCP.
     */
    function getServiceAccountCreds() {
      return JSON.parse(scriptProperties.getProperty(SERVICE_ACCOUNT_CREDS));
    }
    
    function getOauthService() {
      var serviceAccountCreds = getServiceAccountCreds();
      var serviceAccountKey = serviceAccountCreds[SERVICE_ACCOUNT_KEY];
      var serviceAccountEmail = serviceAccountCreds[SERVICE_ACCOUNT_EMAIL];
    
      return OAuth2.createService('RowLevelSecurity')
        .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
        .setTokenUrl('https://accounts.google.com/o/oauth2/token')
        .setPrivateKey(serviceAccountKey)
        .setIssuer(serviceAccountEmail)
        .setPropertyStore(scriptProperties)
        .setCache(CacheService.getScriptCache())
        .setScope(['https://www.googleapis.com/auth/bigquery.readonly']);
    }

Implementa getData()

  1. Crea la query BigQuery.
    • Utilizzando l'email, cerca la mappatura tra l'email e i dati.
    • Utilizza le clausole JOIN e/o WHERE per filtrare i dati.
  2. Recupera l'email dell'utente effettivo (riferimento all'identità dell'utente).
  3. Utilizza [Data Studio Advanced Services] per restituire la configurazione della query da getData.
    • Passa la query creata, il progetto di fatturazione e il token OAuth del service account.
    • Condizionale:se ricevi l'input utente tramite il connettore getConfig, devi incorporarlo come parametri BigQuery.

Creare la dashboard

  1. Comprendere il funzionamento di deployment e versioni per i connettori.
  2. Crea un deployment di produzione per il connettore.
  3. Utilizza il deployment di produzione per creare un'origine dati e un nuovo report in Data Studio.
  4. Aggiungi tutte le tabelle e tutti i grafici nel report.
  5. La dashboard è ora pronta per essere condivisa con i tuoi utenti.

Rendere disponibile la dashboard per gli utenti

  1. Condividi lo script del connettore con gli utenti selezionati o con "Chiunque abbia il link".
  2. Condividi la dashboard con gli utenti selezionati o con "Chiunque abbia il link".
  3. (Facoltativo) Utilizza un servizio di abbreviazione degli URL per creare un link breve per l'URL della dashboard. Condividi l'URL abbreviato con i tuoi utenti. In questo modo, potrai sostituire l'URL della dashboard in un secondo momento, se necessario.
  4. (Facoltativo) Misura l'utilizzo della dashboard configurando Google Analytics per il report.

Codice di esempio