Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Puoi utilizzare gli account di servizio nei tuoi connettori della community per la gestione centralizzata dell'accesso alle risorse. Un caso d'uso comune è delegare l'accesso ai dati a cui gli utenti non potrebbero accedere utilizzando le proprie credenziali.
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 hanno accesso.
Procedura di implementazione
Crea un account di servizio per la piattaforma da cui recuperi i dati.
Fornisci all'account di servizio le autorizzazioni necessarie in modo che possa accedere alle risorse richieste.
Archivia le credenziali dell'account di servizio nelle proprietà dello script del connettore.
Durante l'esecuzione del connettore, utilizza le credenziali archiviate per recuperare i dati richiesti.
(Facoltativo): implementa la logica di controllo dell'accesso per filtrare i dati.
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 una tabella BigQuery. Se gli utenti utilizzano il connettore BigQuery di Looker Studio, dovranno accedere in lettura alla tabella BigQuery. Richiederanno anche un account di fatturazione
per Google Cloud Platform (GCP). I passaggi seguenti spiegano come utilizzare un account di servizio per consolidare la fatturazione e delegare l'accesso ai dati BigQuery.
Assicurati che l'account di servizio possa creare job BigQuery e visualizzare i dati per la tabella richiesta. Per maggiori dettagli, vedi Controllo dell'accesso di BigQuery.
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.
Restituisci il token di accesso con altri elementi di configurazione nella risposta getData.
Di seguito è riportato un esempio completo del codice del connettore:
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();
}