Zabezpieczenia na poziomie wiersza BigQuery z usługami zaawansowanymi

Załóżmy np., że próbujesz stworzyć rozwiązanie dla swojej organizacji sprzedaży. Dział sprzedaży jest podzielony na wiele regionów, z których każdy ma własnego menedżera regionalnego. Zbiór danych o sprzedaży w BigQuery zawiera wielkość sprzedaży według regionu i daty.

Proponowane rozwiązanie będzie korzystać z jednego panelu, w którym menedżerowie regionalni będą mogli wyświetlać dane dotyczące sprzedaży tylko w swoich regionach.

Wymagania

  • Użytkownicy panelu będą zalogowani na konta Google.
  • Dostępne jest mapowanie między adresem e-mail użytkownika a danymi/wierszami, do których ten użytkownik ma dostęp.
  • Do uzyskiwania dostępu do danych BigQuery będzie używane konto usługi. Dzięki temu płatności będą scentralizowane i będą zarządzane przez dostawcę panelu.

Ograniczenia

  • Panel wymaga jednorazowej autoryzacji od każdego przeglądającego przy pierwszym wyświetleniu.
  • Przeglądający nie mogą edytować panelu ani udostępniać go innym osobom.
  • Jeśli jesteś klientem Workspace i administrator wyłączył udostępnianie plików z Dysku „Każda osoba mająca link”, usuń ograniczenie udostępniania lub opracuj rozwiązanie na koncie Gmail.com.

Rozwiązanie

Aby wdrożyć rozwiązanie, wykonaj wszystkie poniższe czynności.

Utwórz nowe społecznościowe oprogramowanie sprzęgające

Zapoznaj się z artykułem Jak działa społecznościowe oprogramowanie sprzęgające i wykonaj ćwiczenie z programowania społecznościowego oprogramowania sprzęgającego, aby rozpocząć. Użyj narzędzia dla programistów do tworzenia oprogramowania sprzęgającego, aby przyspieszyć i ułatwić proces programowania.

Pisanie kodu oprogramowania sprzęgającego

  1. Funkcja getAuthType() powinna zwrócić wartość NONE.
  2. getConfig() powinien zwrócić pustą konfigurację.
    • Opcjonalnie: jeśli potrzebujesz określonych danych wejściowych do skonfigurowania panelu, możesz tutaj poprosić użytkownika o podanie takich danych.
  3. Funkcja getSchema() powinna zwrócić schemat dla Twojego zapytania.
    • Opcjonalnie: niestandardowe pola i obliczenia możesz dodawać w zapytaniu SQL lub za pomocą pól obliczeniowych w ramach schematu.
  4. Tabela getData() zostanie ukończona w późniejszym kroku.

Zaktualizuj plik manifestu

Wyświetl Dokumentacja pliku manifestu i uzupełnij plik manifestu, podając wszystkie wymagane informacje, w tym:

  1. ustaw dataStudio.forceViewersCredentials na true.
  2. ustaw dataStudio.advancedServices.data na true.
  3. W polu oauthScopes dodaj https://www.googleapis.com/auth/userinfo.email i https://www.googleapis.com/auth/script.external_request. Więcej informacji znajdziesz w artykule Zakresy autoryzacji dla Apps Script.
    • Warunkowe: dodaj wszystkie odpowiednie zakresy usług używanych w oprogramowaniu sprzęgającym.

Plik manifestu powinien wyglądać tak:

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

Wdrażanie konta usługi

  1. Utwórz konto usługi w projekcie Google Cloud. To będzie Twój projekt rozliczeniowy.
  2. Sprawdź, czy to konto usługi ma dostęp do BigQuery w projekcie w chmurze.
    • Wymagane role zarządzania tożsamościami i dostępem: BigQuery Data Viewer, BigQuery Job User
  3. Pobierz plik JSON, aby uzyskać klucze kont usługi. Przechowuj klucze we właściwościach skryptu projektu oprogramowania sprzęgającego.
  4. Dodaj bibliotekę OAuth2 dla Apps Script do projektu Apps Script.
  5. Zaimplementuj wymagany kod OAuth2 na tym koncie usługi:
    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']);
    }
    

Wdróż getData()

  1. Utwórz zapytanie BigQuery.
    • Przy użyciu e-maila wyszukaj mapowanie między wiadomością a danymi.
    • Do filtrowania danych użyj klauzuli JOIN lub WHERE.
  2. Uzyskaj adres e-mail rzeczywistego użytkownika (informacje o tożsamości użytkownika).
  3. Użyj zaawansowanych usług Looker Studio, aby zwrócić konfigurację zapytania z getData.
    • Przekaż utworzone zapytanie, projekt rozliczeniowy i token OAuth konta usługi.
    • Warunkowe: jeśli pobierasz dane wejściowe użytkowników za pomocą oprogramowania sprzęgającego getConfig, zastosuj je jako parametry BigQuery.

Tworzenie panelu

  1. Dowiedz się, jak działają wdrożenia i wersje oprogramowania sprzęgającego.
  2. Utwórz wdrożenie produkcyjne oprogramowania sprzęgającego.
  3. Użyj wdrożenia produkcyjnego, aby utworzyć źródło danych i nowy raport w Looker Studio.
  4. Dodaj wszystkie tabele i wykresy z raportu.
  5. Możesz go teraz udostępnić użytkownikom.

Udostępnij panel użytkownikom

  1. Udostępnij skrypt oprogramowania sprzęgającego wybranym użytkownikom lub każdej osobie mającej link.
  2. Udostępnij panel wybranym użytkownikom lub każdej osobie, która ma link.
  3. Opcjonalnie: użyj usługi skracania adresów URL, aby utworzyć krótki link do adresu URL panelu. Udostępnij użytkownikom skrócony adres URL. Pomoże to w razie potrzeby zastąpić adres URL panelu później.
  4. Opcjonalnie: możesz mierzyć wykorzystanie panelu, konfigurując Google Analytics na potrzeby raportu.

Przykładowy kod