Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Você pode utilizar contas de serviço nos seus conectores da comunidade para gerenciar o acesso aos recursos em um só lugar. Um abordagem comum é delegar acesso a dados que os usuários não conseguiriam visualizar usando as próprias credenciais.
Você pode consolidar o faturamento para acessar os dados.
É possível implementar sua própria camada de controle de acesso no conector.
É possível delegar acesso a dados ou recursos aos quais as credenciais do usuário
não têm acesso.
Etapas de implementação
Crie uma conta de serviço na plataforma em que você está buscando dados.
Conceda as permissões necessárias à conta de serviço para que ela consiga acessar os recursos.
Armazene as credenciais da conta de serviço nas propriedades do script do seu conector.
Durante a execução do conector, use as credenciais armazenadas para buscar os dados necessários.
Opcional: implemente a lógica de controle de acesso para filtrar as informações.
Exemplo: acessar o BigQuery com o Advanced Services do Looker Studio e uma conta de serviço
Você está desenvolvendo uma solução em que seus usuários criarão painéis diretamente de uma tabela do BigQuery. Se os usuários utilizarem o conector do BigQuery do Looker Studio, vão precisar de acesso de leitura à tabela do BigQuery. e uma conta de faturamento do Google Cloud Platform (GCP). As etapas a seguir ilustram como usar uma
conta de serviço para consolidar o faturamento e delegar acesso aos dados do BigQuery.
Verifique se a conta de serviço pode criar jobs do BigQuery e visualizar os dados da tabela necessária. Para mais detalhes, consulte Controle de acesso do BigQuery.
Para sua função getData, autentique a conta de serviço e gere
um token de acesso. Defina o escopo do OAuth2 como
https://www.googleapis.com/auth/bigquery.readonly.
Retorne o token de acesso com outros itens de configuração na resposta getData.
Veja a seguir um exemplo completo do código do 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();
}