Keamanan tingkat baris BigQuery dengan Advanced Services

Misalnya, asumsikan Anda mencoba membuat solusi untuk organisasi penjualan. Organisasi penjualan dibagi menjadi beberapa region, dan setiap region memiliki Manajer Regional sendiri. {i>Dataset<i} penjualan di BigQuery memiliki jumlah penjualan berdasarkan wilayah dan tanggal.

Solusi yang diusulkan akan memiliki satu dasbor yang memungkinkan Manajer Regional hanya dapat melihat data penjualan untuk wilayahnya sendiri.

Persyaratan

  • Pelihat dasbor akan login dengan Akun Google.
  • Pemetaan tersedia antara email pengguna dan data/baris yang dapat mereka akses.
  • Akun layanan akan digunakan untuk mengakses data BigQuery. Dengan demikian, penagihan akan dipusatkan dan dikelola oleh penyedia dasbor.

Batasan

  • Dasbor memerlukan otorisasi satu kali dari setiap pelihat pada tampilan pertama.
  • Pelihat tidak dapat mengedit dasbor atau berbagi dengan orang lain.
  • Jika Anda adalah pelanggan Workspace dan administrator telah menonaktifkan berbagi file Drive ke “Siapa saja yang memiliki Link”, hapus pembatasan berbagi atau kembangkan solusi di akun Gmail.com.

Solusi

Selesaikan semua langkah berikut untuk menerapkan solusi.

Membuat Konektor Komunitas baru

Tinjau Cara Kerja Konektor Komunitas dan selesaikan Codelab Konektor Komunitas untuk memulai. Gunakan Alat developer untuk membuat konektor guna proses pengembangan yang lebih cepat dan mudah.

Tulis kode konektor

  1. getAuthType() akan menampilkan NONE.
  2. getConfig() harus menampilkan konfigurasi kosong.
    • Opsional: Jika memerlukan input khusus untuk mengonfigurasi dasbor, Anda dapat meminta input pengguna di sini.
  3. getSchema() harus menampilkan skema untuk kueri Anda.
    • Opsional: Anda dapat menambahkan kalkulasi dan kolom kustom di kueri SQL atau menggunakan kolom kalkulasi sebagai bagian dari skema.
  4. getData() akan diselesaikan di langkah berikutnya.

Mengupdate manifes

Lihat Referensi manifes dan lengkapi manifes dengan semua informasi yang diperlukan, termasuk hal berikut:

  1. setel dataStudio.forceViewersCredentials ke true.
  2. setel dataStudio.advancedServices.data ke true.
  3. Untuk oauthScopes, tambahkan https://www.googleapis.com/auth/userinfo.email dan https://www.googleapis.com/auth/script.external_request. Lihat Cakupan Otorisasi untuk Apps Script untuk mengetahui info selengkapnya.
    • Kondisional: Menambahkan semua cakupan yang relevan untuk layanan yang digunakan di konektor.

Manifes akan terlihat seperti ini:

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

Mengimplementasikan akun layanan

  1. Buat akun layanan di project Google Cloud Anda. Project ini akan menjadi project penagihan Anda.
  2. Pastikan akun layanan ini memiliki akses BigQuery di project cloud.
    • Peran Identity and Access Management (IAM) yang Diperlukan: BigQuery Data Viewer, BigQuery Job User
  3. Download file JSON untuk mendapatkan kunci akun layanan. Simpan kunci di properti skrip project konektor Anda.
  4. Sertakan library OAuth2 untuk Apps Script di project Apps Script Anda.
  5. Terapkan kode OAuth2 yang diperlukan untuk akun layanan:
    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']);
    }
    

Mengimplementasikan getData()

  1. Buat kueri BigQuery Anda.
    • Dengan menggunakan email, cari pemetaan antara email dan data.
    • Gunakan klausa JOIN dan/atau WHERE untuk memfilter data.
  2. Dapatkan email pengguna yang efektif (referensi identitas pengguna).
  3. Gunakan Looker Studio Advanced Services untuk menampilkan konfigurasi kueri dari getData.
    • Teruskan kueri yang telah dibuat, project penagihan, dan token OAuth Akun Layanan.
    • Kondisional: Jika Anda mengambil input pengguna melalui konektor getConfig, Anda harus menyertakan input tersebut sebagai parameter BigQuery.

Membuat dasbor

  1. Pahami cara kerja deployment dan versi untuk konektor.
  2. Buat deployment produksi untuk konektor.
  3. Gunakan deployment Produksi untuk membuat sumber data dan laporan baru di Looker Studio.
  4. Tambahkan semua tabel dan diagram dalam laporan.
  5. Dasbor kini siap untuk dibagikan kepada pengguna Anda.

Menyediakan dasbor bagi pengguna

  1. Bagikan skrip konektor kepada pengguna yang dipilih atau dengan “Anyone with link”.
  2. Bagikan dasbor kepada pengguna yang dipilih atau dengan “Siapa saja yang memiliki link”.
  3. Opsional: Gunakan layanan penyingkat URL untuk membuat link pendek untuk URL dasbor. Bagikan URL singkat kepada pengguna. Hal ini akan membantu mengganti URL dasbor nanti jika diperlukan.
  4. Opsional: Ukur penggunaan dasbor dengan menyiapkan Google Analytics untuk laporan Anda.

Kode Contoh