Vous pouvez utiliser les comptes de service de vos connecteurs de communauté pour une gestion centralisée de l'accès aux ressources. Un cas d'utilisation courant consiste à déléguer l'accès à des données auxquelles les utilisateurs ne pourraient pas accéder avec leurs propres identifiants.
Vous pouvez regrouper la facturation de l'accès aux données.
Vous pouvez implémenter votre propre couche de contrôle des accès dans votre connecteur.
Vous pouvez déléguer l'accès à des données ou ressources auxquelles les identifiants de l'utilisateur n'ont pas accès.
Procédure d'implémentation
Créez un compte de service pour la plate-forme à partir de laquelle vous récupérez les données.
Accordez les autorisations nécessaires au compte de service pour qu'il puisse accéder aux ressources requises.
Stockez les identifiants du compte de service dans les propriétés de script du connecteur.
Lors de l'exécution du connecteur, utilisez les identifiants stockés pour récupérer les données requises.
Facultatif: implémentez une logique de contrôle des accès pour filtrer les données.
Exemple: Accéder à BigQuery à l'aide des services avancés Looker Studio et d'un compte de service
Vous allez créer une solution qui permettra à vos utilisateurs de créer des tableaux de bord à partir d'une table BigQuery. Si vos utilisateurs se servent du connecteur BigQuery de Looker Studio, ils auront besoin d'un accès en lecture à la table BigQuery. Ils auront également besoin d'un compte de facturation pour Google Cloud Platform (GCP). Les étapes suivantes montrent comment utiliser un compte de service pour consolider la facturation et déléguer l'accès aux données BigQuery.
Assurez-vous que le compte de service peut créer des tâches BigQuery et afficher les données de la table requise. Pour en savoir plus, consultez la page Contrôle des accès BigQuery.
Incluez la bibliothèque OAuth2 Apps Script dans votre projet Apps Script.
Pour votre fonction getData, authentifiez le compte de service et générez un jeton d'accès. Définissez le champ d'application d'OAuth2 sur https://www.googleapis.com/auth/bigquery.readonly.
Renvoie un jeton d'accès avec d'autres éléments de configuration dans la réponse getData.
Voici un exemple complet du code de connecteur:
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();
}
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.