Vous pouvez utiliser des comptes de service dans vos connecteurs de communauté
de l'accès aux ressources. Un cas d'utilisation courant consisterait
à déléguer l'accès à
des données auxquelles les utilisateurs ne pourraient
pas accéder à l’aide de leurs propres identifiants.
Vous pouvez consolider la facturation pour 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 aux données ou aux ressources associées aux identifiants de l'utilisateur
n'a pas accès.
Étapes de mise en œuvre
Créez un compte de service pour la plate-forme à partir de laquelle vous récupérez des données.
Accordez les autorisations nécessaires au compte de service pour qu'il puisse accéder
les ressources requises.
Stockez les identifiants du compte de service dans le script du connecteur.
propriétés.
Pendant l'exécution du connecteur, utilisez les identifiants stockés pour récupérer les ressources
données.
Facultatif: Implémentez une logique de contrôle des accès pour filtrer les données.
Exemple: Accéder à BigQuery avec les services avancés de Looker Studio et un compte de service
Vous développez une solution dans laquelle vos utilisateurs créeront des tableaux de bord à partir d'un
table BigQuery. Si vos utilisateurs se servent du connecteur BigQuery de Looker Studio,
n'avez pas 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 expliquent comment utiliser un
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 jobs BigQuery et afficher les données pour
la table requise. Pour en savoir plus, consultez la page Contrôle des accès dans BigQuery.
Pour votre fonction getData, authentifiez le compte de service et générez
un jeton d'accès. Définir le champ d'application OAuth2 sur
https://www.googleapis.com/auth/bigquery.readonly
Renvoyez un jeton d'accès avec d'autres éléments de configuration dans la réponse getData.
Voici un exemple complet de 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.
Dernière mise à jour le 2024/08/22 (UTC).
[null,null,["Dernière mise à jour le 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."]]],[]]