Utilizzare un account di servizio

Puoi utilizzare gli account di servizio nei connettori della community per la gestione dell'accesso alle risorse. Un caso d'uso comune è quello di delegare l'accesso a Dati a cui gli utenti non sarebbero in grado di accedere con le proprie credenziali.

Consulta la sezione Informazioni sugli account di servizio per acquisire familiarità con questo argomento.

Vantaggi

  • Puoi consolidare la fatturazione per l'accesso ai dati.
  • Puoi implementare il tuo livello di controllo dell'accesso nel tuo connettore.
  • Puoi delegare l'accesso a dati o risorse a cui le credenziali dell'utente non dispone dell'accesso.

Passaggi di implementazione

  1. Crea un account di servizio per la piattaforma da cui recuperi i dati.
  2. Fornisci le autorizzazioni necessarie all'account di servizio in modo che possa accedere le risorse necessarie.
  3. Archivia le credenziali dell'account di servizio nello script del connettore proprietà.
  4. Durante l'esecuzione del connettore, utilizza le credenziali archiviate per recuperare le richieste e i dati di Google Cloud.
  5. (Facoltativo) Implementa una logica di controllo dell'accesso per filtrare i dati.
di Gemini Advanced.

Esempio: accesso a BigQuery con i servizi avanzati di Looker Studio e un account di servizio

Stai creando una soluzione in cui i tuoi utenti creeranno dashboard da un Tabella BigQuery. Se gli utenti utilizzano il connettore BigQuery di Looker Studio, deve accedere in lettura alla tabella BigQuery. Richiederà anche un account di fatturazione per Google Cloud. I passaggi seguenti spiegano come utilizzare un account di servizio per consolidare la fatturazione e delegare l'accesso ai dati BigQuery.

  1. Crea un account di servizio nel progetto Google Cloud che ti interessa.
  2. Assicurati che l'account di servizio possa creare job BigQuery e visualizzare i dati per la tabella richiesta. Per maggiori dettagli, consulta Controllo degli accessi BigQuery.
  3. Crea una chiave per l'account di servizio e memorizza le credenziali nel tuo proprietà dello script del connettore.
  4. Includi la libreria OAuth2 Apps Script nel tuo progetto Apps Script.
  5. Per la funzione getData, autentica l'account di servizio e genera un token di accesso. Imposta l'ambito OAuth2 su https://www.googleapis.com/auth/bigquery.readonly.
  6. Restituisci il token di accesso con altri elementi di configurazione nella risposta di getData.

main.js

var cc = DataStudioApp.createCommunityConnector();
var scriptProperties = PropertiesService.getScriptProperties();

function isAdminUser() {
 
return true;
}

function getAuthType() {
 
var AuthTypes = cc.AuthType;
 
return cc
   
.newAuthTypeResponse()
   
.setAuthType(AuthTypes.NONE)
   
.build();
}

function getConfig(request) {
 
var config = cc.getConfig();

  config
   
.newInfo()
   
.setId('generalInfo')
   
.setText('This is an example connector to showcase row level security.');

 
return config.build();
}

function getFields() {
 
var fields = cc.getFields();
 
var types = cc.FieldType;
 
var aggregations = cc.AggregationType;

  fields
   
.newDimension()
   
.setId('region')
   
.setName('Region')
   
.setType(types.TEXT);

  fields
   
.newMetric()
   
.setId('sales')
   
.setName('Sales')
   
.setType(types.NUMBER)
   
.setAggregation(aggregations.SUM);

  fields
   
.newDimension()
   
.setId('date')
   
.setName('Date')
   
.setType(types.YEAR_MONTH_DAY);

 
return fields;
}

function getSchema(request) {
 
return {schema: getFields().build()};
}

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']);
}

var BASE_SQL =
 
'SELECT d.region, d.sales, d.date ' +
 
'FROM `datastudio-solutions.row_level_security.data` d ' +
 
'INNER JOIN `datastudio-solutions.row_level_security.access` a ' +
 
'ON d.region = a.region ' +
 
'where a.email=@email';

function getData(request) {
 
var accessToken = getOauthService().getAccessToken();
 
var serviceAccountCreds = getServiceAccountCreds();
 
var billingProjectId = serviceAccountCreds[BILLING_PROJECT_ID];
 
var email = Session.getEffectiveUser().getEmail();

 
var bqTypes = DataStudioApp.createCommunityConnector().BigQueryParameterType;

 
return cc
   
.newBigQueryConfig()
   
.setAccessToken(accessToken)
   
.setBillingProjectId(billingProjectId)
   
.setUseStandardSql(true)
   
.setQuery(BASE_SQL)
   
.addQueryParameter('email', bqTypes.STRING, email)
   
.build();
}