Dienstkonto verwenden

Sie können Dienstkonten in Ihren Community-Connectors für zentralisierte den Ressourcenzugriff zu verwalten. Ein häufiger Anwendungsfall ist die Delegierung des Zugriffs auf Daten, auf die Nutzer mit ihren eigenen Anmeldedaten nicht zugreifen können.

Lesen Sie den Artikel Informationen zu Dienstkonten, um sich mit dem Thema vertraut zu machen.

Vorteile

  • Sie können die Abrechnung für den Datenzugriff konsolidieren.
  • Sie können in Ihrem Connector eine eigene Zugriffssteuerungsebene implementieren.
  • Sie können den Zugriff auf Daten oder Ressourcen an die Anmeldedaten des Nutzers delegieren. auf die der Nutzer keinen Zugriff hat.

Implementierungsschritte

  1. Erstellen Sie ein Dienstkonto für die Plattform, von der Sie Daten abrufen.
  2. Gewähren Sie dem Dienstkonto die erforderlichen Berechtigungen, damit es auf das Konto zugreifen kann erforderlichen Ressourcen.
  3. Anmeldedaten des Dienstkontos im Skript des Connectors speichern Eigenschaften.
  4. Verwenden Sie während der Connector-Ausführung die gespeicherten Anmeldedaten, um die erforderlichen Daten.
  5. 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 Nutzenden Dashboards aus einem BigQuery-Tabelle. Wenn Ihre Nutzer den BigQuery-Connector von Looker Studio verwenden, Lesezugriff auf die BigQuery-Tabelle. Außerdem ist ein Rechnungskonto erforderlich. für die Google Cloud Platform (GCP). Die folgenden Schritte veranschaulichen, wie Sie ein Dienstkonto, um die Abrechnung zu konsolidieren und den Zugriff auf die BigQuery-Daten zu delegieren.

  1. Erstellen Sie ein Dienstkonto im gewünschten GCP-Projekt.
  2. Achten Sie darauf, dass das Dienstkonto BigQuery-Jobs erstellen und die Daten anzeigen kann für die erforderliche Tabelle. Weitere Informationen finden Sie unter BigQuery-Zugriffssteuerung.
  3. Erstellen Sie einen Schlüssel für das Dienstkonto und speichern Sie die Anmeldedaten in Ihrem Skripteigenschaften des Connectors.
  4. Fügen Sie die OAuth2 Apps Script-Bibliothek in Ihr Apps Script-Projekt
  5. Authentifizieren Sie für die Funktion getData das Dienstkonto und generieren Sie ein Zugriffstoken. OAuth2-Bereich festlegen auf https://www.googleapis.com/auth/bigquery.readonly
  6. Gibt das Zugriffstoken mit anderen Konfigurationselementen in der getData-Antwort zurück.

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();
}