Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Anda dapat menggunakan akun layanan di Konektor Komunitas untuk pengelolaan
akses resource yang terpusat. Kasus penggunaan yang umum adalah mendelegasikan akses ke
data yang tidak dapat diakses pengguna menggunakan kredensial mereka sendiri.
Anda dapat menggabungkan penagihan untuk akses data.
Anda dapat menerapkan lapisan kontrol akses Anda sendiri di konektor.
Anda dapat mendelegasikan akses ke data atau resource yang tidak dapat diakses oleh kredensial pengguna.
Langkah-langkah implementasi
Buat akun layanan untuk platform tempat Anda mengambil data.
Berikan izin yang diperlukan ke akun layanan agar dapat mengakses
resource yang diperlukan.
Simpan kredensial akun layanan di properti skrip konektor Anda.
Selama eksekusi konektor, gunakan kredensial yang disimpan untuk mengambil data yang diperlukan.
Opsional: Terapkan logika kontrol akses untuk memfilter data.
Contoh: Mengakses BigQuery dengan Layanan Lanjutan Looker Studio dan akun layanan
Anda sedang membangun solusi yang memungkinkan pengguna membangun dasbor dari tabel BigQuery. Jika pengguna menggunakan konektor BigQuery Looker Studio, mereka akan memerlukan akses baca ke tabel BigQuery. Mereka juga akan memerlukan akun penagihan untuk Google Cloud Platform (GCP). Langkah-langkah berikut menggambarkan cara menggunakan akun layanan untuk menggabungkan penagihan dan mendelegasikan akses ke data BigQuery.
Pastikan akun layanan dapat membuat tugas BigQuery dan melihat data untuk tabel yang diperlukan. Lihat Kontrol Akses BigQuery untuk mengetahui detailnya.
Untuk fungsi getData, lakukan autentikasi akun layanan dan buat token akses. Tetapkan cakupan OAuth2 ke
https://www.googleapis.com/auth/bigquery.readonly.
Tampilkan token akses dengan item konfigurasi lainnya dalam respons getData.
Berikut adalah contoh lengkap kode konektor:
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();
}