Użyj konta usługi

Kont usługi w społecznościowym oprogramowaniu sprzęgającym możesz używać do scentralizowanego zarządzania i zarządzanie dostępem do zasobów. Typowym przypadkiem użycia jest przekazywanie dostępu dane, do których użytkownicy nie mogli uzyskać dostępu przy użyciu własnych danych logowania.

Aby zapoznać się z tym tematem, zapoznaj się z omówieniem kont usługi.

Zalety

  • Możesz skonsolidować płatności za dostęp do danych.
  • Możesz wdrożyć w oprogramowaniu sprzęgającym własną warstwę kontroli dostępu.
  • Możesz przekazać dostęp do danych lub zasobów wskazywanych przez dane logowania użytkownika nie ma dostępu do.

Etapy wdrażania

  1. Utwórz konto usługi dla platformy, z której pobierasz dane.
  2. Przyznaj kontu usługi niezbędne uprawnienia, aby mieć dostęp wymaganych zasobów.
  3. Przechowuj dane logowania do konta usługi w skrypcie oprogramowania sprzęgającego usług.
  4. Podczas wykonywania oprogramowania sprzęgającego użyj zapisanych danych logowania, aby pobrać wymagane i skalowalnych danych.
  5. Opcjonalnie: zaimplementuj zasady kontroli dostępu, aby filtrować dane.
.

Przykład: dostęp do BigQuery za pomocą usług zaawansowanych Looker Studio i konta usługi

Opracowujesz rozwiązanie, w którym użytkownicy będą tworzyć panele na podstawie Tabela BigQuery. Jeśli użytkownicy korzystają z oprogramowania sprzęgającego BigQuery w Looker Studio, potrzebują uprawnień do odczytu tabeli BigQuery. Będzie też potrzebować konta rozliczeniowego. dla Google Cloud Platform (GCP). Poniższe kroki pokazują, jak korzystać z konta usługi, aby skonsolidować płatności i przekazać dostęp do danych BigQuery.

  1. Utwórz konto usługi w wybranym projekcie GCP.
  2. Sprawdź, czy konto usługi może tworzyć zadania BigQuery i wyświetlać dane dotyczące wymaganej tabeli. Więcej informacji znajdziesz w artykule Kontrola dostępu do BigQuery.
  3. Utwórz klucz dla konta usługi i zapisz dane logowania w właściwości skryptu oprogramowania sprzęgającego.
  4. Dodaj bibliotekę OAuth2 Apps Script do swojej aplikacji Projekt Apps Script.
  5. W przypadku funkcji getData uwierzytelnij konto usługi i wygeneruj token dostępu. Ustaw zakres OAuth2 na https://www.googleapis.com/auth/bigquery.readonly
  6. Zwróć token dostępu z innymi elementami konfiguracji w odpowiedzi getData.

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