Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Sie können Dienstkonten in Ihren Community-Connectors für die zentralisierte Verwaltung des Ressourcenzugriffs verwenden. Ein häufiger Anwendungsfall besteht darin, den Zugriff auf Daten zu delegieren, auf die Nutzer mit ihren eigenen Anmeldedaten nicht zugreifen können.
Sie können die Abrechnung für den Datenzugriff konsolidieren.
Sie können Ihre eigene Zugriffssteuerungsebene in Ihrem Connector implementieren.
Sie können den Zugriff auf Daten oder Ressourcen delegieren, auf die die Anmeldedaten des Nutzers keinen Zugriff haben.
Implementierungsschritte
Erstellen Sie ein Dienstkonto für die Plattform, von der Sie Daten abrufen.
Erteilen Sie dem Dienstkonto die erforderlichen Berechtigungen, damit es auf die erforderlichen Ressourcen zugreifen kann.
Speichern Sie die Anmeldedaten des Dienstkontos in den Skriptattributen des Connectors.
Verwenden Sie während der Ausführung des Connectors die gespeicherten Anmeldedaten, um die erforderlichen Daten abzurufen.
Optional: Implementieren Sie eine Zugriffssteuerungslogik, um die Daten zu filtern.
Beispiel: Mit erweiterten Looker Studio-Diensten und einem Dienstkonto auf BigQuery zugreifen
Sie erstellen eine Lösung, bei der Ihre Nutzer Dashboards aus einer BigQuery-Tabelle erstellen. Wenn Ihre Nutzer den BigQuery-Connector von Looker Studio verwenden, benötigen sie Lesezugriff auf die BigQuery-Tabelle. Außerdem ist ein Rechnungskonto für die Google Cloud Platform (GCP) erforderlich. In den folgenden Schritten wird gezeigt, wie Sie mit einem Dienstkonto die Abrechnung konsolidieren und den Zugriff auf die BigQuery-Daten delegieren.
Sorgen Sie dafür, dass das Dienstkonto BigQuery-Jobs erstellen und die Daten für die erforderliche Tabelle ansehen kann. Weitere Informationen finden Sie unter BigQuery-Zugriffssteuerung.
Authentifizieren Sie das Dienstkonto für die Funktion getData und generieren Sie ein Zugriffstoken. Legen Sie den OAuth2-Bereich auf https://www.googleapis.com/auth/bigquery.readonly fest.
Gibt ein Zugriffstoken mit anderen Konfigurationselementen in der getData-Antwort zurück.
Hier sehen Sie ein vollständiges Beispiel für den Connector-Code:
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();
}