Zabezpieczenia na poziomie wiersza BigQuery z usługami zaawansowanymi

Załóżmy np., że chcesz znaleźć rozwiązanie dotyczące sprzedaży Twojej organizacji. Organizacja sprzedaży jest podzielona na wiele regionów, z których każdy region ma własnego menedżera regionalnego. Zbiór danych o sprzedaży w BigQuery zawiera dane o sprzedaży według regionu i daty.

Proponowane rozwiązanie będzie miało jeden panel, w którym zarządcy regionalni mogą wyświetlać dane sprzedaży tylko dla swoich regionów.

Wymagania

  • Osoby wyświetlające panel będą zalogowani na konto Google.
  • Dostępne jest mapowanie między adresem e-mail użytkownika a posiadanymi mu danymi/wierszami. .
  • Konto usługi będzie używane do uzyskiwania dostępu do danych BigQuery. Dlatego też rozliczenia będzie scentralizowana i zarządzana przez dostawcę panelu.

Ograniczenia

  • Panel wymaga jednorazowej autoryzacji od każdego przeglądającego widok.
  • Przeglądający nie mogą edytować panelu ani udostępniać go innym.
  • Jeśli jesteś klientem Workspace, a Twój administrator wyłączył udostępnianie pliki z Dysku na „Każda osoba mająca link”, usuń udostępnianie ani też opracować rozwiązania 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 ukończ Społecznościowe oprogramowanie sprzęgające Ćwiczenia z programowania, aby rozpocząć. Użyj Narzędzia dla programistów do tworzenia oprogramowania sprzęgającego, aby: i uruchamianie szybszego i łatwiejszego procesu programowania.

Pisanie kodu oprogramowania sprzęgającego

  1. Funkcja getAuthType() powinna zwrócić wartość NONE.
  2. Funkcja getConfig() powinna zwrócić pustą konfigurację.
    • Opcjonalnie: jeśli do skonfigurowania panelu potrzebujesz określonych danych wejściowych, może na tym etapie wysłać prośbę o dane wejściowe użytkownika.
  3. Funkcja getSchema() powinna zwrócić schemat zapytania.
    • Opcjonalnie: możesz dodać niestandardowe pola i obliczenia albo w interfejsie SQL lub korzystając z pól obliczeniowych jako części schematu.
  4. Działanie typu getData() zostanie wykonane w późniejszym kroku.

Zaktualizuj plik manifestu

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

  1. ustaw dataStudio.forceViewersCredentials na true.
  2. ustaw dataStudio.advancedServices.data na true.
  3. W przypadku aplikacji oauthScopes dodaj: https://www.googleapis.com/auth/userinfo.email i https://www.googleapis.com/auth/script.external_request Patrz: Autoryzacja Zakresy dla Apps Script.
    • Warunkowe: dodaj wszystkie odpowiednie zakresy usług używanych w .

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 w właściwości skryptu projektu oprogramowania sprzęgającego.
  4. Dodaj bibliotekę OAuth2 for Apps Script do projektu Apps Script.
  5. Zaimplementuj wymagany kod OAuth2 na 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 tego e-maila wyszukaj mapowanie między adresem e-mail a danymi.
    • Użyj klauzuli JOIN lub WHERE, aby filtrować dane.
  2. Uzyskaj adres e-mail efektywnego użytkownika (informacje o tożsamości użytkownika).
  3. Użyj usług zaawansowanych Looker Studio, aby zwrócić konfigurację zapytania z getData.
    • Przekaż utworzone zapytanie, projekt rozliczeniowy i konto usługi Token OAuth.
    • Warunkowe: jeśli przyjmujesz dane wejściowe użytkownika przez oprogramowanie sprzęgające getConfig, uwzględnij dane 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 do raportu wszystkie tabele i wykresy.
  5. Panel jest teraz gotowy do udostępnienia użytkownikom.

Udostępnianie panelu użytkownikom

  1. Udostępnij skrypt oprogramowania sprzęgającego wybranym użytkownikom lub wszystkim osobom za pomocą linku”.
  2. Udostępnij panel wybranym użytkownikom lub wszystkim osobom: link”.
  3. Opcjonalnie: użyj usługi skracania adresów URL, by utworzyć krótki link dla atrybutu URL panelu. Udostępnij skrócony adres URL użytkownikom. Pomaga to zastąpić w razie potrzeby adres URL panelu.
  4. Opcjonalnie: mierz wykorzystanie panelu, konfigurując Google Analytics raport.

Przykładowy kod