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 tem 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 as informações necessárias
dados.
Opcional: implemente a lógica de controle de acesso para filtrar as informações.
.
Exemplo: como 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,
precisam de acesso de leitura à tabela do BigQuery. e uma conta de faturamento do Google Cloud Platform (GCP). As etapas a seguir ilustram como usar um
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 do
na 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();
}
[null,null,["Última atualização 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."]]],[]]