Anda dapat menggunakan akun layanan di Community Connectors untuk untuk pengelolaan akses resource. Kasus penggunaan yang umum adalah mendelegasikan akses ke data yang tidak dapat diakses oleh pengguna menggunakan kredensial mereka sendiri.
Tinjau Memahami akun layanan untuk memahami topiknya.
Manfaat
- Anda dapat menggabungkan penagihan untuk akses data.
- Anda dapat menerapkan lapisan kontrol akses Anda sendiri di konektor Anda.
- Anda dapat mendelegasikan akses ke data atau resource yang kredensial pengguna memiliki akses.
Langkah-langkah implementasi
- Buat akun layanan untuk platform tempat Anda mengambil data.
- Berikan izin yang diperlukan pada akun layanan agar dapat mengakses resource yang diperlukan.
- Simpan kredensial akun layanan di skrip konektor Anda properti baru.
- Selama eksekusi konektor, gunakan kredensial yang disimpan untuk mengambil data yang diperlukan layanan otomatis dan data skalabel.
- Opsional: Terapkan logika kontrol akses untuk memfilter data.
Contoh: Mengakses BigQuery dengan Layanan Lanjutan Looker Studio dan akun layanan
Anda sedang membangun solusi di mana pengguna akan membangun dasbor dari BigQuery. Jika pengguna Anda menggunakan konektor BigQuery Looker Studio, mereka akan membutuhkan akses baca ke tabel BigQuery. Mereka juga akan memerlukan akun penagihan untuk Google Cloud Platform (GCP). Langkah-langkah berikut mengilustrasikan cara menggunakan untuk menggabungkan penagihan dan mendelegasikan akses ke data BigQuery.
- Buat akun layanan di project GCP yang Anda inginkan.
- Pastikan akun layanan dapat membuat tugas BigQuery dan melihat data untuk tabel yang diperlukan. Lihat Kontrol Akses BigQuery untuk mengetahui detailnya.
- Buat kunci untuk akun layanan dan simpan kredensial di properti skrip konektor.
- Sertakan library OAuth2 Apps Script di Project Apps Script.
- Untuk fungsi
getData
, autentikasi akun layanan dan buat token akses. Tetapkan cakupan OAuth2 kehttps://www.googleapis.com/auth/bigquery.readonly
. - Tampilkan token akses dengan item konfigurasi lain di 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();
}