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 è divisa in più regioni, ognuna delle quali ha un proprio Regional Manager. Il set di dati delle vendite in BigQuery riporta l'importo delle vendite per regione e data.

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

Requisiti

  • I visualizzatori della dashboard avranno eseguito l'accesso con un Account Google.
  • È disponibile una mappatura tra l'email dell'utente e i dati o le righe a cui ha accesso.
  • Per accedere ai dati BigQuery verrà utilizzato un account di servizio. Di conseguenza la fatturazione sarà centralizzata e gestita dal provider della dashboard.

Limitazioni

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

Soluzione

Completa tutti i passaggi seguenti per implementare la soluzione.

Creare un nuovo connettore della community

Consulta l'articolo Come funzionano i connettori della community e completa il codelab sui connettori della community per iniziare. Utilizza lo strumento per sviluppatori per la creazione di connettori per un processo di sviluppo più rapido e semplice.

Scrivi il codice del connettore

  1. getAuthType() deve restituire NONE.
  2. getConfig() deve restituire una configurazione vuota.
    • Facoltativo: se hai bisogno di input specifici per la configurazione della dashboard, puoi richiedere l'input dell'utente qui.
  3. getSchema() deve restituire lo schema per la 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 del file manifest e completa il manifest con tutte le informazioni richieste, tra cui le seguenti:

  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 ulteriori informazioni, consulta Ambiti di autorizzazione per Apps Script.
    • Condizionale: aggiungi tutti gli ambiti pertinenti per i servizi utilizzati nel connettore.

Il file manifest dovrebbe avere il seguente 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 account di servizio

  1. Crea un account di servizio nel tuo progetto Google Cloud. Questo sarà il tuo progetto di fatturazione.
  2. Assicurati che questo account di servizio disponga dell'accesso a BigQuery nel progetto cloud.
    • Ruoli IAM (Identity and Access Management) richiesti: BigQuery Data Viewer, BigQuery Job User
  3. Scarica il file JSON per ottenere le chiavi degli account di servizio. 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 l'account di servizio:
    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 tua query BigQuery.
    • Utilizzando l'email, cerca la mappatura tra l'email e i dati.
    • Utilizza la clausola JOIN e/o WHERE per filtrare i dati.
  2. Recuperare l'email dell'utente effettivo (riferimento sull'identità dell'utente).
  3. Utilizza i servizi avanzati di Looker Studio per restituire la configurazione della query da getData.
    • Passa la query creata, il progetto di fatturazione e il token OAuth dell'account di servizio.
    • Condizionale: se acquisisci l'input utente tramite il connettore getConfig, devi incorporare l'input come parametri BigQuery.

Crea la dashboard

  1. Scopri come funzionano 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 Looker Studio.
  4. Aggiungi tutte le tabelle e i grafici nel report.
  5. La dashboard è ora pronta per essere condivisa con i tuoi utenti.

Rendi la dashboard disponibile agli 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. Ciò consente di 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