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

Örneğin, satış organizasyonunuz için bir çözüm oluşturmaya çalıştığınızı varsayalım. Satış kuruluşu, her birinde kendi Bölge Müdürü olan birden fazla bölgeye ayrılmıştır. BigQuery'deki satış veri kümesinde bölgeye ve tarihe göre satış tutarı vardır.

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

Şartlar

  • Kontrol paneli görüntüleyicileri, Google Hesabı ile oturum açar.
  • Kullanıcının e-postası ile erişebildiği veriler/satırlar arasında bir eşleme bulunur.
  • BigQuery verilerine erişmek için bir hizmet hesabı kullanılır. Bu nedenle faturalandırma merkezi olarak yapılır ve kontrol paneli sağlayıcısı tarafından yönetilir.

Sınırlamalar

  • Kontrol paneli, ilk görüntülemede her görüntüleyenden tek seferlik yetkilendirme ister.
  • Görüntüleyenler kontrol panelini düzenleyemez veya başkalarıyla paylaşamaz.
  • Workspace müşterisiyseniz ve yöneticiniz "Bağlantıya sahip olan herkes" ile Drive dosyası paylaşımını devre dışı bıraktıysa paylaşım kısıtlamasını kaldırın veya çözümü bir Gmail.com hesabında geliştirin.

Çözüm

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

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

Başlamak için Topluluk Bağlayıcılarının İşleyiş Şekli başlıklı makaleyi inceleyin ve Topluluk Bağlayıcı Codelab'ini 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 yazma

  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(), sorgunuzun şemasını döndürmelidir.
    • İsteğe bağlı: Özel alanları ve hesaplamaları SQL sorgusuna veya şemanın bir parçası olarak hesaplanmış alanları kullanarak ekleyebilirsiniz.
  4. getData() daha sonraki bir adımda tamamlanacaktır.

Manifest dosyasını güncelleme

Manifest referansını görüntüleyin ve manifesti aşağıdaki bilgiler de dahil olmak üzere gerekli tüm bilgilerle doldurun:

  1. dataStudio.forceViewersCredentials değerini true olarak ayarlayın.
  2. dataStudio.advancedServices.data değerini true olarak ayarlayın.
  3. oauthScopes için https://www.googleapis.com/auth/userinfo.email ve https://www.googleapis.com/auth/script.external_request ekleyin. Daha fazla bilgi için Apps Komut Dosyası'nda Yetkilendirme Kapsamları başlıklı makaleyi inceleyin.
    • Koşullu: Bağlayıcıda kullanılan hizmetler için 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"
    ],
  ...
}

Hizmet hesabı uygulama

  1. Google Cloud projenizde bir hizmet hesabı oluşturun. Bu proje, faturalandırma projeniz olur.
  2. Bu hizmet hesabının, bulut projesinde BigQuery erişimi olduğundan emin olun.
    • Gerekli Kimlik ve Erişim Yönetimi (IAM) Rolleri: BigQuery Data Viewer, BigQuery Job User
  3. Hizmet hesabı anahtarlarını almak için JSON dosyasını indirin. Anahtarları bağlayıcı projenizin komut dosyası özelliklerinde saklayın.
  4. Apps Komut Dosyası projenize Apps Komut Dosyası için OAuth2 kitaplığını 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 ile veriler arasındaki eşlemeyi bulun.
    • Verileri filtrelemek için JOIN ve/veya WHERE ifadesini kullanın.
  2. Etkili kullanıcının e-posta adresini (kullanıcı kimliği referansı) alın.
  3. getData'dan sorgu yapılandırmasını döndürmek için [Data Studio Advanced Services] hizmetini kullanın.
    • Oluşturulan sorguyu, faturalandırma projesini ve hizmet hesabı OAuth jetonunu iletin.
    • Koşullu: Bağlayıcı getConfig aracılığıyla kullanıcı girişi alıyorsanız girişi BigQuery parametreleri olarak eklemeniz gerekir.

Kontrol panelini oluşturma

  1. Dağıtımların ve sürümlerin bağlayıcılar için nasıl çalıştığını anlayın.
  2. Bağlayıcı için üretim dağıtımı oluşturun.
  3. Data Studio'da veri kaynağı ve yeni 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ır.

Kontrol panelini kullanıcıların kullanımına sunma

  1. Bağlayıcı komut dosyasını seçili kullanıcılarla veya "Bağlantıya sahip olan herkes" ile paylaşın.
  2. Seçilen kullanıcılarla veya "Bağlantıya sahip olan herkes" ile gösterge tablosunu paylaşın.
  3. İsteğe bağlı: Kontrol paneli URL'si için kısa bağlantı oluşturmak üzere URL kısaltma hizmeti kullanın. Kısaltılmış URL'yi kullanıcılarınızla paylaşın. Bu, gerekirse daha sonra 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