Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Puedes usar cuentas de servicio en tus conectores de Comunidad para la administración centralizada del acceso a los recursos. Un caso de uso común sería delegar el acceso a datos a los que los usuarios no podrían acceder con sus propias credenciales.
Puedes consolidar la facturación para el acceso a los datos.
Puedes implementar tu propia capa de control de acceso en el conector.
Puedes delegar el acceso a datos o recursos a los que no tienen acceso las credenciales del usuario.
Pasos de implementación
Crea una cuenta de servicio para la plataforma desde la que recuperas datos.
Proporciona los permisos necesarios a la cuenta de servicio para que pueda acceder a los recursos requeridos.
Almacena las credenciales de la cuenta de servicio en las propiedades de la secuencia de comandos del conector.
Durante la ejecución del conector, usa las credenciales almacenadas para recuperar los datos requeridos.
Opcional: Implementa la lógica de control de acceso para filtrar los datos.
Ejemplo: Cómo acceder a BigQuery con los servicios avanzados de Looker Studio y una cuenta de servicio
Estás compilando una solución en la que tus usuarios crearán paneles a partir de una tabla de BigQuery. Si tus usuarios usan el conector de BigQuery de Looker Studio, necesitarán acceso de lectura a la tabla de BigQuery. También necesitarán una cuenta de facturación para Google Cloud Platform (GCP). En los siguientes pasos, se muestra cómo usar una cuenta de servicio para consolidar la facturación y delegar el acceso a los datos de BigQuery.
Asegúrate de que la cuenta de servicio pueda crear trabajos de BigQuery y ver los datos de la tabla requerida. Consulta Control de acceso de BigQuery para obtener más detalles.
Incluye la biblioteca de OAuth2 Apps Script en tu proyecto de Apps Script.
Para la función getData, autentica la cuenta de servicio y genera un token de acceso. Establece el alcance de OAuth2 en https://www.googleapis.com/auth/bigquery.readonly.
Muestra el token de acceso con otros elementos de configuración en la respuesta getData.
A continuación, se muestra un ejemplo completo del código del conector:
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();
}