การรักษาความปลอดภัยระดับแถวของ BigQuery ด้วยบริการขั้นสูง

ตัวอย่างเช่น สมมติว่าคุณพยายามสร้างโซลูชันสำหรับองค์กรขาย ฝ่ายขายแบ่งออกเป็นหลายภูมิภาคโดยที่แต่ละภูมิภาคมีผู้จัดการระดับภูมิภาคเป็นของตนเอง ชุดข้อมูลยอดขายใน BigQuery มียอดขายตามภูมิภาคและวันที่

โซลูชันที่เสนอจะมีหน้าแดชบอร์ดเดียวซึ่งผู้จัดการระดับภูมิภาคสามารถดูข้อมูลการขายสำหรับภูมิภาคของตนเท่านั้น

ข้อกำหนด

  • ผู้ดูหน้าแดชบอร์ดจะลงชื่อเข้าใช้ด้วยบัญชี Google
  • มีการแมประหว่างอีเมลของผู้ใช้กับข้อมูล/แถวที่ผู้ใช้มีสิทธิ์เข้าถึง
  • ระบบจะใช้บัญชีบริการเพื่อเข้าถึงข้อมูล BigQuery ดังนั้น ผู้ให้บริการแดชบอร์ดจึงจัดการการเรียกเก็บเงินเป็นส่วนกลาง

ข้อจำกัด

  • หน้าแดชบอร์ดกำหนดให้มีการให้สิทธิ์แบบครั้งเดียวจากผู้ดูแต่ละรายในการดูครั้งแรก
  • ผู้ชมจะแก้ไขหน้าแดชบอร์ดหรือแชร์กับผู้อื่นไม่ได้
  • หากคุณเป็นลูกค้า Workspace และผู้ดูแลระบบได้ปิดใช้การแชร์ไฟล์ในไดรฟ์กับ "ทุกคนที่มีลิงก์" โปรดนำข้อจำกัดการแชร์ออกหรือพัฒนาโซลูชันในบัญชี Gmail.com

โซลูชัน

ทำตามขั้นตอนต่อไปนี้ทั้งหมดเพื่อนำโซลูชันไปใช้

สร้างปลั๊กอินจากชุมชนสำหรับใช้ลิงก์ข้อมูลใหม่

โปรดอ่านวิธีการทำงานของปลั๊กอินจากชุมชนสำหรับใช้ลิงก์ข้อมูล แล้วกรอกข้อมูลใน Community Connector Codelab เพื่อเริ่มต้นใช้งาน ใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์สำหรับการสร้างเครื่องมือเชื่อมต่อเพื่อขั้นตอนการพัฒนาที่ง่ายและรวดเร็วยิ่งขึ้น

เขียนรหัสเครื่องมือเชื่อมต่อ

  1. getAuthType() ควรแสดงผล NONE
  2. getConfig() ควรส่งคืนการกำหนดค่าที่ว่างเปล่า
    • ไม่บังคับ: หากต้องการข้อมูลที่เจาะจงสำหรับการกำหนดค่าหน้าแดชบอร์ด คุณขอข้อมูลจากผู้ใช้ได้ที่นี่
  3. getSchema() ควรแสดงสคีมาสำหรับการค้นหาของคุณ
    • ไม่บังคับ: คุณจะเพิ่มช่องและการคำนวณที่กำหนดเองในการค้นหา SQL หรือจะใช้ช่องที่คำนวณแล้วเป็นส่วนหนึ่งของสคีมาก็ได้
  4. getData() จะเสร็จสมบูรณ์ในขั้นตอนถัดไป

อัปเดตไฟล์ Manifest

ดูข้อมูลอ้างอิงของไฟล์ Manifest และกรอกไฟล์ Manifest ด้วยข้อมูลที่จำเป็นทั้งหมด ซึ่งรวมถึงข้อมูลต่อไปนี้

  1. ตั้งค่า dataStudio.forceViewersCredentials เป็น true
  2. ตั้งค่า dataStudio.advancedServices.data เป็น true
  3. สำหรับ oauthScopes ให้เพิ่ม https://www.googleapis.com/auth/userinfo.email และ https://www.googleapis.com/auth/script.external_request โปรดดูข้อมูลเพิ่มเติมที่ขอบเขตการให้สิทธิ์สำหรับ Apps Script
    • มีเงื่อนไข: เพิ่มขอบเขตที่เกี่ยวข้องทั้งหมดสำหรับบริการที่ใช้ในเครื่องมือเชื่อมต่อ

ไฟล์ Manifest ควรมีลักษณะดังนี้

{
  ...
  "dataStudio": {
    "forceViewersCredentials": true,
    "advancedServices": {
       "data": true
    },
    ...
  }
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/userinfo.email"
    ],
  ...
}

ใช้บัญชีบริการ

  1. สร้างบัญชีบริการในโปรเจ็กต์ Google Cloud นี่คือโครงการเรียกเก็บเงินของคุณ
  2. ตรวจสอบว่าบัญชีบริการนี้มีสิทธิ์เข้าถึง BigQuery ในโปรเจ็กต์ที่อยู่ในระบบคลาวด์
    • บทบาท Identity and Access Management (IAM) ที่จำเป็น: BigQuery Data Viewer, BigQuery Job User
  3. ดาวน์โหลดไฟล์ JSON เพื่อรับคีย์บัญชีบริการ จัดเก็บคีย์ในพร็อพเพอร์ตี้สคริปต์ของโปรเจ็กต์เครื่องมือเชื่อมต่อ
  4. รวมไลบรารี OAuth2 สำหรับ Apps Script ไว้ในโปรเจ็กต์ Apps Script
  5. นำรหัส OAuth2 ที่จำเป็นสำหรับบัญชีบริการต่อไปนี้ไปใช้
    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']);
    }
    

นำ getData() ไปใช้

  1. สร้างการค้นหา BigQuery
    • ใช้อีเมลเพื่อค้นหาการจับคู่ระหว่างอีเมลและข้อมูล
    • ใช้คำสั่ง "JOIN" และ/หรือ "WHERE" เพื่อกรองข้อมูล
  2. รับอีเมลของผู้ใช้ที่มีประสิทธิภาพ (การอ้างอิงข้อมูลประจำตัวผู้ใช้)
  3. ใช้บริการขั้นสูงของ Looker Studio เพื่อแสดงผลการกำหนดค่าการค้นหาจาก getData
    • ส่งการค้นหาที่สร้างขึ้น โปรเจ็กต์การเรียกเก็บเงิน และโทเค็น OAuth ของบัญชีบริการ
    • มีเงื่อนไข: หากคุณรับข้อมูลจากผู้ใช้ผ่านเครื่องมือเชื่อมต่อ getConfig คุณควรรวมอินพุตนั้นเป็นพารามิเตอร์ BigQuery

สร้างหน้าแดชบอร์ด

  1. ทำความเข้าใจวิธีการทำงานของการทำให้ใช้งานได้และเวอร์ชันสำหรับเครื่องมือเชื่อมต่อ
  2. สร้างการทำให้ใช้งานได้จริงสำหรับเครื่องมือเชื่อมต่อ
  3. ใช้การทำให้ใช้งานได้เวอร์ชันที่ใช้งานจริงเพื่อสร้างแหล่งข้อมูลและรายงานใหม่ใน Looker Studio
  4. เพิ่มตารางและแผนภูมิทั้งหมดในรายงาน
  5. ตอนนี้แดชบอร์ดพร้อมที่จะแชร์กับผู้ใช้แล้ว

ทำให้หน้าแดชบอร์ดพร้อมใช้งานสำหรับผู้ใช้

  1. แชร์สคริปต์เครื่องมือเชื่อมต่อกับผู้ใช้ที่เลือกหรือกับ "ทุกคนที่มีลิงก์"
  2. แชร์หน้าแดชบอร์ดกับผู้ใช้ที่เลือกหรือกับ "ทุกคนที่มีลิงก์"
  3. ไม่บังคับ: ใช้บริการเครื่องมือย่อ URL เพื่อสร้างลิงก์แบบสั้นสำหรับ URL ของหน้าแดชบอร์ด แชร์ URL แบบย่อกับผู้ใช้ วิธีนี้จะช่วยแทนที่ URL ของหน้าแดชบอร์ดในภายหลังหากจำเป็น
  4. ไม่บังคับ: วัดการใช้งานหน้าแดชบอร์ดโดยการตั้งค่า Google Analytics สําหรับรายงาน

โค้ดตัวอย่าง