Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Możesz używać kont usługi w społecznościowym oprogramowaniu sprzęgającym do scentralizowanego zarządzania dostępem do zasobów. Częstym przypadkiem użycia jest przekazywanie dostępu do danych, do których użytkownicy nie mieliby dostępu za pomocą własnych danych logowania.
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, do których dane logowania użytkownika nie mają dostępu.
Etapy wdrażania
Utwórz konto usługi dla platformy, z której pobierasz dane.
Przyznaj kontu usługi niezbędne uprawnienia, aby miało ono dostęp do wymaganych zasobów.
Zapisz dane logowania do konta usługi we właściwościach skryptu oprogramowania sprzęgającego.
Podczas wykonywania oprogramowania sprzęgającego użyj zapisanych danych logowania, aby pobrać wymagane dane.
Opcjonalnie: zaimplementuj mechanizmy kontroli dostępu, aby filtrować dane.
Przykład: uzyskiwanie dostępu do BigQuery przy użyciu zaawansowanych usług Looker Studio i konta usługi
Tworzysz rozwiązanie, w którym użytkownicy będą tworzyć panele na podstawie tabeli BigQuery. Jeśli użytkownicy korzystają z oprogramowania sprzęgającego BigQuery z Looker Studio, muszą mieć uprawnienia do odczytu tabeli BigQuery. Będzie też wymagać konta rozliczeniowego na potrzeby Google Cloud Platform (GCP). Poniższe kroki pokazują, jak za pomocą konta usługi skonsolidować płatności i przekazać dostęp do danych BigQuery.
Upewnij się, że konto usługi może tworzyć zadania BigQuery i wyświetlać dane wymaganej tabeli. Więcej informacji znajdziesz w artykule Kontrola dostępu BigQuery.
W przypadku funkcji getData uwierzytelnij konto usługi i wygeneruj token dostępu. Ustaw zakres OAuth2 na https://www.googleapis.com/auth/bigquery.readonly.
Zwróć token dostępu z innymi elementami konfiguracji w odpowiedzi getData.
Oto pełny przykład kodu oprogramowania sprzęgającego:
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();
}