คุณสามารถใช้บัญชีบริการในเครื่องมือเชื่อมต่อชุมชนสำหรับการรวมศูนย์ได้ การจัดการสิทธิ์เข้าถึงทรัพยากร กรณีการใช้งานทั่วไปคือการมอบสิทธิ์การเข้าถึง ที่ผู้ใช้ไม่สามารถเข้าถึงโดยใช้ข้อมูลเข้าสู่ระบบของตนเอง
โปรดอ่านหัวข้อทำความเข้าใจบัญชีบริการเพื่อทำความคุ้นเคยกับหัวข้อ
ประโยชน์
- คุณสามารถรวมการเรียกเก็บเงินสำหรับการเข้าถึงข้อมูลได้
- คุณสามารถนำเลเยอร์การควบคุมการเข้าถึงของตัวเองไปใช้ในเครื่องมือเชื่อมต่อ
- คุณสามารถมอบสิทธิ์เข้าถึงข้อมูลหรือทรัพยากรที่ข้อมูลเข้าสู่ระบบของผู้ใช้ได้ ไม่มีสิทธิ์เข้าถึง
ขั้นตอนการใช้งาน
- สร้างบัญชีบริการของแพลตฟอร์มที่คุณกำลังดึงข้อมูล
- ให้สิทธิ์ที่จำเป็นแก่บัญชีบริการเพื่อให้เข้าถึงได้ ทรัพยากรที่จำเป็น
- จัดเก็บข้อมูลเข้าสู่ระบบของบัญชีบริการในสคริปต์ของเครื่องมือเชื่อมต่อ พร็อพเพอร์ตี้
- ระหว่างการดำเนินการของเครื่องมือเชื่อมต่อ ให้ใช้ข้อมูลเข้าสู่ระบบที่จัดเก็บไว้เพื่อดึงข้อมูลที่จำเป็น
- ไม่บังคับ: ใช้ตรรกะการควบคุมการเข้าถึงเพื่อกรองข้อมูล
ตัวอย่าง: การเข้าถึง BigQuery ด้วยบริการขั้นสูงของ Looker Studio และบัญชีบริการ
คุณกำลังสร้างโซลูชันที่ผู้ใช้ของคุณจะสร้างหน้าแดชบอร์ดจาก ตาราง BigQuery หากผู้ใช้ใช้เครื่องมือเชื่อมต่อ BigQuery ของ Looker Studio ผู้ใช้จะ ต้องมีสิทธิ์อ่านตาราง BigQuery และจะต้องมีบัญชีสำหรับการเรียกเก็บเงินด้วย สำหรับ Google Cloud Platform (GCP) ขั้นตอนต่อไปนี้จะแสดงวิธีใช้ บัญชีบริการเพื่อรวมการเรียกเก็บเงินและมอบสิทธิ์เข้าถึงข้อมูล BigQuery
- สร้างบัญชีบริการในโปรเจ็กต์ GCP ที่ต้องการ
- ตรวจสอบว่าบัญชีบริการสามารถสร้างงาน BigQuery และดูข้อมูลสำหรับ ในตารางที่จำเป็น โปรดดูรายละเอียดที่การควบคุมการเข้าถึง BigQuery
- สร้างคีย์สำหรับบัญชีบริการ และจัดเก็บข้อมูลเข้าสู่ระบบไว้ใน พร็อพเพอร์ตี้สคริปต์ของเครื่องมือเชื่อมต่อ
- รวมไลบรารี OAuth2 Apps Script ไว้ใน โครงการ Apps Script
- สำหรับฟังก์ชัน
getData
ให้ตรวจสอบสิทธิ์บัญชีบริการและสร้าง โทเค็นเพื่อการเข้าถึง กำหนดขอบเขต OAuth2 เป็นhttps://www.googleapis.com/auth/bigquery.readonly
- แสดงผลโทเค็นเพื่อการเข้าถึงพร้อมรายการการกำหนดค่าอื่นๆ ในการตอบกลับ
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();
}