BigQuery-Sicherheit auf Zeilenebene mit erweiterten Diensten

Angenommen, Sie versuchen, eine Lösung für Ihre Vertriebsorganisation zu entwickeln. Die Vertriebsorganisation ist in mehrere Regionen unterteilt, wobei jede Region einen eigenen Regional Manager hat. Das Verkaufs-Dataset in BigQuery enthält die Verkaufsbeträge nach Region und Datum.

Die vorgeschlagene Lösung hat ein einzelnes Dashboard, in dem die regionalen Manager die Verkaufsdaten nur für ihre eigenen Regionen sehen können.

Voraussetzungen

  • Dashboard-Betrachter werden mit einem Google-Konto angemeldet.
  • Es ist eine Zuordnung zwischen der E-Mail-Adresse des Nutzers und den Daten/Zeilen möglich, auf die er Zugriff hat.
  • Für den Zugriff auf BigQuery-Daten wird ein Dienstkonto verwendet. Somit wird die Abrechnung zentral vom Dashboard-Anbieter verwaltet und verwaltet.

Beschränkungen

  • Das Dashboard erfordert bei der ersten Ansicht eine einmalige Autorisierung von jedem Betrachter.
  • Betrachter können das Dashboard nicht bearbeiten oder mit anderen teilen.
  • Wenn Sie Workspace-Kunde sind und Ihr Administrator die Freigabe von Drive-Dateien für „Jeder mit einem Link“ deaktiviert hat, entfernen Sie entweder die Freigabeeinschränkung oder entwickeln Sie die Lösung für ein Gmail.com-Konto.

Lösung

Führen Sie die folgenden Schritte aus, um die Lösung zu implementieren.

Neuen Community-Connector erstellen

Lesen Sie zuerst den Artikel Funktionsweise von Community-Connectors und absolvieren Sie das Codelab zu Community-Connectors, um loszulegen. Verwenden Sie das Entwicklertool zum Erstellen von Connectors, um den Entwicklungsprozess zu beschleunigen und zu vereinfachen.

Connector-Code schreiben

  1. getAuthType() sollte NONE zurückgeben.
  2. getConfig() sollte eine leere Konfiguration zurückgeben.
    • Optional: Wenn Sie bestimmte Eingaben zum Konfigurieren des Dashboards benötigen, können Sie hier Nutzereingaben anfordern.
  3. getSchema() sollte das Schema für die Abfrage zurückgeben.
    • Optional: Sie können benutzerdefinierte Felder und Berechnungen entweder in der SQL-Abfrage oder mithilfe von berechneten Feldern als Teil des Schemas hinzufügen.
  4. getData() wird in einem späteren Schritt abgeschlossen.

Manifest aktualisieren

Rufen Sie die Manifestreferenz auf und geben Sie das Manifest mit allen erforderlichen Informationen ein, darunter:

  1. setzen Sie dataStudio.forceViewersCredentials auf true.
  2. setzen Sie dataStudio.advancedServices.data auf true.
  3. Fügen Sie für oauthScopes https://www.googleapis.com/auth/userinfo.email und https://www.googleapis.com/auth/script.external_request hinzu. Weitere Informationen finden Sie unter Autorisierungsbereiche für Apps Script.
    • Bedingt: Fügen Sie alle relevanten Bereiche für die im Connector verwendeten Dienste hinzu.

Das Manifest sollte so aussehen:

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

Dienstkonto implementieren

  1. Erstellen Sie ein Dienstkonto in Ihrem Google Cloud-Projekt. Dies ist Ihr Abrechnungsprojekt.
  2. Achten Sie darauf, dass dieses Dienstkonto im Cloud-Projekt Zugriff auf BigQuery hat.
    • Erforderliche IAM-Rollen (Identity and Access Management): BigQuery Data Viewer, BigQuery Job User
  3. Laden Sie die JSON-Datei herunter, um die Dienstkontoschlüssel abzurufen. Speichern Sie die Schlüssel in den Skripteigenschaften des Connector-Projekts.
  4. Binden Sie die Bibliothek OAuth2 for Apps Script in Ihr Apps Script-Projekt ein.
  5. Implementieren Sie den erforderlichen OAuth2-Code für das Dienstkonto:
    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() implementieren

  1. Erstellen Sie die BigQuery-Abfrage.
    • Suchen Sie mithilfe der E-Mail die Zuordnung zwischen der E-Mail und den Daten.
    • Verwenden Sie die JOIN- und/oder WHERE-Klausel, um die Daten zu filtern.
  2. Rufen Sie die E-Mail-Adresse des betreffenden Nutzers ab (Referenz zur Nutzeridentität).
  3. Verwenden Sie die erweiterten Dienste von Looker Studio, um die Abfragekonfiguration aus getData zurückzugeben.
    • Übergeben Sie die erstellte Abfrage, das Abrechnungsprojekt und das OAuth-Token des Dienstkontos.
    • Bedingt: Wenn Sie Nutzereingaben über den Connector getConfig annehmen, sollten Sie die Eingabe als BigQuery-Parameter aufnehmen.

Dashboard erstellen

  1. Funktionsweise von Bereitstellungen und Versionen für Connectors
  2. Erstellen Sie eine Produktionsbereitstellung für den Connector.
  3. Mit der Produktionsbereitstellung können Sie eine Datenquelle und einen neuen Bericht in Looker Studio erstellen.
  4. Fügen Sie dem Bericht alle Tabellen und Diagramme hinzu.
  5. Das Dashboard kann jetzt für Ihre Nutzer freigegeben werden.

Das Dashboard für Nutzer verfügbar machen

  1. Geben Sie das Connector-Skript für ausgewählte Nutzer oder für die Option „Jeder mit dem Link“ frei.
  2. Geben Sie das Dashboard für ausgewählte Nutzer oder für „Jeder, der über den Link verfügt“ frei.
  3. Optional:Verwenden Sie einen URL-Kürzungsdienst, um einen Kurzlink für die Dashboard-URL zu erstellen. Teilen Sie die gekürzte URL mit Ihren Nutzern. So lässt sich die Dashboard-URL bei Bedarf später ersetzen.
  4. Optional:Messen Sie die Dashboard-Nutzung, indem Sie Google Analytics für Ihren Bericht einrichten.

Beispielcode