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.
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
Crea un account di servizio per la piattaforma da cui recuperi i dati.
Fornisci le autorizzazioni necessarie all'account di servizio in modo che possa accedere
le risorse necessarie.
Archivia le credenziali dell'account di servizio nello script del connettore
proprietà.
Durante l'esecuzione del connettore, utilizza le credenziali archiviate per recuperare le richieste
e i dati di Google Cloud.
(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.
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.
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 di 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();
}
[null,null,["Ultimo aggiornamento 2024-08-22 UTC."],[[["Community Connectors can utilize service accounts for centralized resource access management, enabling data access delegation beyond user credentials."],["Service accounts offer benefits like consolidated billing, custom access control implementation, and access to otherwise restricted data or resources."],["Implementing service accounts involves creating a dedicated account, granting necessary permissions, securely storing credentials in script properties, and utilizing these during connector execution."],["For enhanced security, avoid storing service account credentials directly in code; instead, leverage connector script properties to safeguard sensitive information."],["The provided example demonstrates using a service account with Looker Studio Advanced Services for secure and controlled access to BigQuery data, consolidating billing and delegating access efficiently."]]],[]]