Puedes usar cuentas de servicio en tus Community Connectors para
la administración 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 credenciales.
Puedes consolidar la facturación del acceso a los datos.
Puedes implementar tu propia capa de control de acceso en el conector.
Puedes delegar el acceso a los datos o recursos a los que corresponden
no tiene acceso.
Pasos de implementación
Crea una cuenta de servicio para la plataforma desde la que estás recuperando datos.
Proporciona los permisos necesarios a la cuenta de servicio para que pueda acceder
los recursos necesarios.
Guarda las credenciales de la cuenta de servicio en la secuencia de comandos de tu conector
propiedades.
Durante la ejecución del conector, usa las credenciales almacenadas para recuperar los datos requeridos
de datos no estructurados.
Opcional: Implementa la lógica de control de acceso para filtrar los datos.
Ejemplo: Accede a BigQuery con los servicios avanzados de Looker Studio y una cuenta de servicio
Estás creando una solución en la que tus usuarios crearán paneles a partir de un
en la tabla de BigQuery. Si tus usuarios usan el conector de BigQuery de Looker Studio,
necesitan acceso de lectura a la tabla de BigQuery. También necesitarán una cuenta de facturación
para Google Cloud Platform (GCP). Los siguientes pasos ilustran cómo usar una
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 a BigQuery para obtener más información.
Incluye la biblioteca de Apps Script OAuth2 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 de 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();
}
[null,null,["Última actualización: 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."]]],[]]