Keamanan tingkat baris BigQuery dengan Advanced Services

Misalnya, asumsikan Anda sedang mencoba membuat solusi untuk penjualan Anda organisasi/pengaturan. Organisasi penjualan dibagi menjadi beberapa region, yang masing-masing wilayah memiliki Manajer Regionalnya sendiri. {i>Dataset<i} penjualan di BigQuery berisikan data penjualan berdasarkan region dan tanggal.

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

Persyaratan

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

Batasan

  • Dasbor memerlukan otorisasi satu kali dari setiap pelihat pada {i>view<i}.
  • Pelihat tidak dapat mengedit dasbor atau berbagi dengan orang lain.
  • Jika Anda adalah pelanggan Workspace dan administrator telah menonaktifkan fitur berbagi Dorong file ke “Siapa saja yang memiliki Link”, atau hapus file yang dibagikan pembatasan atau mengembangkan solusi di akun Gmail.com.

Solusi

Selesaikan semua langkah berikut untuk menerapkan solusi.

Membuat Konektor Komunitas baru

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

Menulis 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() akan menampilkan skema untuk kueri Anda.
    • Opsional: Anda dapat menambahkan kolom kustom dan penghitungan di SQL kueri atau menggunakan kolom kalkulasi sebagai bagian dari skema.
  4. getData() akan diselesaikan pada langkah berikutnya.

Mengupdate manifes

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

  1. tetapkan dataStudio.forceViewersCredentials ke true.
  2. tetapkan 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 Otorisasi Cakupan untuk Apps Script untuk info selengkapnya.
    • Bersyarat: Tambahkan semua cakupan yang relevan untuk layanan yang digunakan dalam konektor 20%.

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. Ini akan menjadi project penagihan.
  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 Layanan Lanjutan Looker Studio untuk menampilkan konfigurasi kueri dari getData.
    • Teruskan kueri yang dibuat, project penagihan, dan Akun Layanan token OAuth.
    • Bersyarat: Jika Anda mengambil input pengguna melalui konektor getConfig, Anda harus menggabungkan 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 sekarang siap untuk dibagikan kepada pengguna Anda.

Menyediakan dasbor untuk pengguna

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

Kode Contoh