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

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

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

ข้อกำหนด

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

ข้อจำกัด

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

โซลูชัน

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

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

ตรวจสอบวิธีการทำงานของปลั๊กอินจากชุมชนสำหรับใช้ลิงก์ข้อมูลและทำเครื่องมือเชื่อมต่อชุมชนให้เสร็จ 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
    • ค้นหาการจับคู่ระหว่างอีเมลและข้อมูลโดยใช้อีเมล
    • ใช้อนุประโยค "สมัคร" และ/หรือ "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 สำหรับ รายงาน

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