Gelişmiş Hizmetler ile BigQuery satır düzeyinde güvenlik

Örneğin, satış kuruluşunuz için bir çözüm oluşturmaya çalıştığınızı varsayalım. Satış organizasyonu, her bölgenin kendi Bölge Yöneticisi'ne sahip olduğu birden çok bölgeye ayrılır. BigQuery'deki satış veri kümesi, bölgeye ve tarihe göre satış tutarına sahiptir.

Önerilen çözüm, bölge yöneticilerinin yalnızca kendi bölgelerine ait satış verilerini görüntüleyebileceği tek bir kontrol paneline sahip olacaktır.

Koşullar

  • Kontrol Paneli'ni görüntüleyenler bir Google Hesabı ile oturum açar.
  • Kullanıcının e-postası ile erişebildiği veriler/satırlar arasında bir eşleme vardır.
  • BigQuery verilerine erişmek için bir hizmet hesabı kullanılır. Bu sayede faturalandırma merkezileşecek ve kontrol paneli sağlayıcısı tarafından yönetilecektir.

Sınırlamalar

  • Kontrol paneli, ilk görüntülemede her izleyiciden bir defalık yetkilendirme gerektirir.
  • İzleyiciler, gösterge tablosunu düzenleyemez veya başkalarıyla paylaşamaz.
  • Workspace müşterisiyseniz ve yöneticiniz Drive dosyalarının "Bağlantıya sahip olan herkes" ile paylaşılmasını devre dışı bıraktıysa paylaşım kısıtlamasını kaldırın veya bir Gmail.com hesabında çözümü geliştirin.

Çözüm

Çözümü uygulamak için aşağıdaki adımların tümünü tamamlayın.

Yeni bir Topluluk Bağlayıcısı oluşturun

Başlamak için Topluluk Bağlayıcılarının İşleyiş Şekli konusunu inceleyin ve Topluluk Bağlayıcısı Codelab'i tamamlayın. Daha hızlı ve kolay bir geliştirme süreci için Bağlayıcı oluşturmaya yönelik geliştirici aracını kullanın.

Bağlayıcı kodunu yaz

  1. getAuthType(), NONE değerini döndürmelidir.
  2. getConfig() boş bir yapılandırma döndürmelidir.
    • İsteğe bağlı: Kontrol panelini yapılandırmak için belirli girişlere ihtiyacınız varsa buradan kullanıcı girişi isteyebilirsiniz.
  3. getSchema(), sorgunuz için şemayı döndürmelidir.
    • İsteğe bağlı: SQL sorgusunda veya şemanın parçası olarak hesaplanan alanları kullanarak özel alanlar ve hesaplamalar ekleyebilirsiniz.
  4. getData(), sonraki bir adımda tamamlanacak.

Manifesti güncelle

Manifest referansını görüntüleyin ve manifest'i aşağıdakiler de dahil olmak üzere gerekli tüm bilgilerle tamamlayın:

  1. dataStudio.forceViewersCredentials değerini true olarak ayarla.
  2. dataStudio.advancedServices.data değerini true olarak ayarla.
  3. oauthScopes için https://www.googleapis.com/auth/userinfo.email ve https://www.googleapis.com/auth/script.external_request ekleyin. Daha fazla bilgi edinmek için Apps Komut Dosyası için Yetkilendirme Kapsamları bölümüne bakın.
    • Koşullu: Bağlayıcıda kullanılan hizmetlerle ilgili tüm kapsamları ekleyin.

Manifest şu şekilde görünmelidir:

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

Bir hizmet hesabını uygulayın

  1. Google Cloud projenizde bir hizmet hesabı oluşturun. Bu, faturalandırma projeniz olacaktır.
  2. Bu hizmet hesabının, bulut projesinde BigQuery erişimine sahip olduğundan emin olun.
    • Gerekli Kimlik ve Erişim Yönetimi (IAM) Rolleri: BigQuery Data Viewer, BigQuery Job User
  3. Hizmet hesapları anahtarlarını almak için JSON dosyasını indirin. Anahtarları, bağlayıcı projenizin komut dosyası özelliklerinde depolayın.
  4. Apps Komut Dosyası için OAuth2 kitaplığını Apps Komut Dosyası projenize ekleyin.
  5. Hizmet hesabı için gerekli OAuth2 kodunu uygulayın:
    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() uygulayın

  1. BigQuery sorgunuzu oluşturun.
    • E-postayı kullanarak e-posta ve veriler arasındaki eşlemeyi arayın.
    • Verileri filtrelemek için JOIN ve/veya WHERE yan tümcesini kullanın.
  2. Geçerli kullanıcının e-postasını alın (kullanıcı kimliği referansı).
  3. getData'dan sorgu yapılandırmasını döndürmek için Looker Studio Gelişmiş Hizmetleri'ni kullanın.
    • Oluşturulan sorguyu, faturalandırma projesini ve Hizmet Hesabı OAuth jetonunu iletin.
    • Koşullu: getConfig bağlayıcısı aracılığıyla kullanıcı girişi alıyorsanız girişi BigQuery parametreleri olarak eklemeniz gerekir.

Kontrol panelini oluşturma

  1. Bağlayıcılar için dağıtımların ve sürümlerin işleyiş şeklini öğrenin.
  2. Bağlayıcı için bir üretim dağıtımı oluşturun.
  3. Looker Studio'da bir veri kaynağı ve yeni bir rapor oluşturmak için Üretim dağıtımını kullanın.
  4. Rapordaki tüm tabloları ve grafikleri ekleyin.
  5. Kontrol paneli artık kullanıcılarınızla paylaşılmaya hazırdır.

Kontrol panelini kullanıcılara sunma

  1. Bağlayıcı komut dosyasını seçilen kullanıcılarla veya "Bağlantıya sahip olan herkes" ile paylaşın.
  2. Seçili kullanıcılarla veya "Bağlantıya sahip olan herkes" ile kontrol panelini paylaşın.
  3. İsteğe bağlı: Kontrol paneli URL'siyle ilgili kısa bağlantı oluşturmak için bir URL kısaltıcı hizmeti kullanın. Kısaltılmış URL'yi kullanıcılarınızla paylaşın. Bu, gerektiğinde kontrol paneli URL'sinin değiştirilmesine yardımcı olur.
  4. İsteğe bağlı: Raporunuz için Google Analytics'i ayarlayarak gösterge tablosu kullanımını ölçün.

Örnek Kod