Einführung in die BigQuery-Sicherheit auf Zeilenebene

In diesem Dokument werden das Konzept der Sicherheit auf Zeilenebene, ihre Funktionsweise in BigQuery, wann Sie damit Ihre Daten schützen können und weitere Details erläutert.

Was ist die Sicherheit auf Zeilenebene?

Mit der Sicherheit auf Zeilenebene können Sie Daten filtern und den Zugriff auf bestimmte Zeilen in einer Tabelle anhand bestimmter Nutzerbedingungen ermöglichen.

BigQuery unterstützt Zugriffssteuerungen auf Projekt-, Dataset- und Tabellenebenesowie die Sicherheit auf Spaltenebene mithilfe von Richtlinien-Tags. Die Sicherheit auf Zeilenebene erweitert das Prinzip der geringsten Berechtigung. Dazu wird eine detaillierte Zugriffssteuerung für eine Teilmenge der Daten in einer BigQuery-Tabelle mithilfe von Zugriffsrichtlinien auf Zeilenebene aktiviert.

Eine Tabelle kann mehrere Zugriffsrichtlinien auf Zeilenebene haben. Zugriffsrichtlinien auf Zeilenebene können in einer Tabelle gemeinsam mit der Sicherheit auf Spaltenebene sowie mit Zugriffsrichtlinien aufDataset-Ebene, Tabellenebene und Projektebene angewendet werden.

Funktionsweise der Sicherheit auf Zeilenebene

Im Allgemeinen umfasst die Sicherheit auf Zeilenebene das Erstellen von Zugriffsrichtlinien auf Zeilenebene für eine BigQuery-Zieltabelle. Diese Richtlinien dienen als Filter zum Ausblenden oder Anzeigen bestimmter Datenzeilen, je nachdem, ob ein Nutzer oder eine Gruppe in einer Zulassungsliste ist. Alle Nutzer oder Gruppen, die nicht ausdrücklich in der Zulassungsliste enthalten sind, erhalten keinen Zugriff.

Ein autorisierter Nutzer mit der IAM-Rolle (Identity and Access Management) BigQuery-Administrator oder BigQuery-Dateninhaber hat die Berechtigung, Zugriffsrichtlinien auf Zeilenebene für eine BigQuery-Tabelle zu erstellen.

Wenn Sie eine Zugriffsrichtlinie auf Zeilenebene erstellen, geben Sie die Tabelle anhand ihres Namens an und welche Nutzer oder Gruppen (grantee-list) auf bestimmte Zeilendaten zugreifen können. Die Richtlinie definiert in Form von filter_expression auch die Daten, nach denen Sie filtern möchten. filter_expression funktioniert wie eine WHERE-Klausel in einer typischen Abfrage.

Eine Anleitung zum Erstellen und Verwenden einer Zugriffsrichtlinie auf Zeilenebene finden Sie unter Sicherheit auf Zeilenebene verwalten.

Weitere Informationen zur vollständigen Syntax, zur Nutzung und zu den Optionen beim Erstellen von Zugriffsrichtlinien auf Zeilenebene finden Sie in der DDL-Referenz.

Beispielanwendungsfälle

Die folgenden Beispiele zeigen mögliche Anwendungsfälle für die Sicherheit auf Zeilenebene.

Zeilendaten nach Region filtern

Angenommen, die Tabelle dataset1.table1 enthält Zeilen, die zu verschiedenen Regionen gehören (angezeigt durch die Spalte region).

Mit der folgenden Abfrage können Sie die Beispieltabelle erstellen und befüllen:

CREATE TABLE IF NOT EXISTS
  dataset1.table1 (partner STRING,
    contact STRING,
    country STRING,
    region STRING);
INSERT INTO
  dataset1.table1 (partner,
    contact,
    country,
    region)
VALUES
  ('Example Customers Corp', 'alice@examplecustomers.com', 'Japan', 'APAC'),
  ('Example Enterprise Group', 'bob@exampleenterprisegroup.com', 'Singapore', 'APAC'),
  ('Example HighTouch Co.', 'carrie@examplehightouch.com', 'USA', 'US'),
  ('Example Buyers Inc.', 'david@examplebuyersinc.com', 'USA', 'US');

Mit der Sicherheit auf Zeilenebene können Dateninhaber oder Administratoren Richtlinien implementieren. In der folgenden Anweisung wird eine Richtlinie implementiert, die Nutzer in der APAC-Mailinggruppe daran hindert, nur Partner aus der APAC-Region zu sehen:

CREATE ROW ACCESS POLICY
  apac_filter
ON
  dataset1.table1 GRANT TO ("group: sales-apac@example.com")
FILTER USING
  (region="APAC" );

Das hat zur Folge, dass für Nutzer der Gruppe sales-apac@example.com nur die Zeilen sichtbar sind, in denen der Wert für region APAC ist.

Die folgende Anweisung implementiert eine Richtlinie, die sowohl Einzelpersonen als auch Gruppen daran hindert, Partner aus der Region USA zu sehen:

CREATE ROW ACCESS POLICY
  us_filter
ON
  dataset1.table1 GRANT TO ("group:sales-us@example.com",
"user: jon@example.com")
FILTER USING
  (region="US");

Das hat zur Folge, dass für Nutzer der Gruppe sales-us@example.com und den Nutzer jon@example.com nur die Zeilen sichtbar sind, in denen der Wert für region US ist.

Die folgende Abbildung zeigt, wie die beiden vorherigen Zugriffsrichtlinien einschränken, welche Nutzer und Gruppen welche Zeilen in der Tabelle sehen können:

Anwendungsfall der Sicherheit auf Zeilenebene für Regionen

Für Nutzer, die nicht zu einer der Gruppen APAC oder US gehören, sind keine Zeilen sichtbar.

Zeilendaten nach sensiblen Daten filtern

Betrachten wir nun einen anderen Anwendungsfall mit einer Tabelle, die Gehaltsinformationen enthält.

Mit der folgenden Abfrage können Sie die Beispieltabelle erstellen und befüllen:

CREATE OR REPLACE TABLE
  dataset1.table1 (name STRING,
    department STRING,
    salary INT64,
    email STRING);
INSERT INTO
  dataset1.table1 ( name,
    department,
    salary,
    email)
VALUES
  ('Jim D', 'HR', 100000, 'jim@example.com'),
  ('Anna K', 'Finance', 100000, 'anna@example.com'),
  ('Bruce L', 'Engineering', 100000, 'bruce@example.com'),
  ('Carrie F', 'Business', 100000, 'carrie@example.com');

Mit der Zugriffsrichtlinie für Zeilen in der folgenden Anweisung wird die Abfrage auf Mitglieder der Unternehmensdomain beschränkt. Außerdem wird durch Verwendung der Funktion SESSION_USER() der Zugriff auf Zeilen beschränkt, die zu dem Nutzer gehören, der die Abfrage ausführt. Grundlage ist die E-Mail-Adresse des Nutzers.

CREATE ROW ACCESS POLICY
  salary_personal
ON
  dataset1.table1 GRANT TO ("domain:example.com")
  FILTER USING
  (Email=SESSION_USER());

Die folgende Abbildung zeigt, wie die Zeilenzugriffsrichtlinie die Tabelle mit Gehaltsinformationen einschränkt. In diesem Beispiel heißt der Nutzer Jan und hat die E-Mail-Adresse jim@example.com.

Anwendungsfall der Sicherheit auf Zeilenebene für Gehaltsdaten

Zeilendaten anhand einer Suchtabelle filtern

Wenn Sie für dieses Feature Feedback geben oder Support anfordern möchten, senden Sie eine E-Mail an bigquery-row-level-security-support@google.com.

Mit der Unterstützung von Unterabfragen können Zugriffsrichtlinien für Zeilen auf andere Tabellen verweisen und diese als Suchtabellen verwenden. Die in Filterregeln verwendeten Daten können in einer Tabelle gespeichert werden und eine Zeilenzugriffsrichtlinie für eine einzelne Unterabfrage kann mehrere konfigurierte Zeilenzugriffsrichtlinien ersetzen. Zum Aktualisieren der Zeilenzugriffsrichtlinien müssen Sie nur die Suchtabelle aktualisieren, die Zugriffsrichtlinien für mehrere Zeilen ersetzt. Sie müssen nicht jede einzelne Zeilenzugriffsrichtlinie aktualisieren.

Verwendung der Sicherheit auf Zeilenebene im Vergleich zu anderen Methoden

Autorisierte Ansichten, Zugriffsrichtlinien auf Zeilenebene und das Speichern von Daten in separaten Tabellen bieten jeweils unterschiedliche Ebenen an Sicherheit, Leistung und Nutzerfreundlichkeit. Die Auswahl der richtigen Methode für Ihren Anwendungsfall ist entscheidend für das geeignete Sicherheitsniveau für Ihre Daten.

Vergleich mit autorisierten Ansichten: Sicherheitslücken

Die Sicherheit auf Zeilenebene und das Erzwingen des Zugriffs auf Zeilenebene mit einer autorisierten Ansicht können beide Sicherheitslücken haben, wenn sie nicht ordnungsgemäß angewendet werden.

Wenn Sie autorisierte Ansichten oder Zugriffsrichtlinien auf Zeilenebene für die Sicherheit auf Zeilenebene nutzen, empfehlen wir, mithilfe von Audit-Logging auf verdächtige Aktivitäten zu prüfen.

Nebenkanalangriffe wie über die Abfragedauer können Informationen zu Zeilen offenlegen, die sich am Rand eines Storage-Shards befinden. Solche Angriffe erfordern normalerweise einige Kenntnisse über die Fragmentierung der Tabelle oder eine große Anzahl von Abfragen.

Weitere Informationen dazu, wie Sie solche Nebenkanalangriffe verhindern, finden Sie unter Best Practices für die Sicherheit auf Zeilenebene.

Vergleich von autorisierten Ansichten, Sicherheit auf Zeilenebene und separaten Tabellen

In der folgenden Tabelle werden Leistung und Sicherheit autorisierter Ansichten, Zugriffsrichtlinien auf Zeilenebene und separater Tabellen verglichen.

Methode Sicherheitsaspekte Empfehlung
Autorisierte
Ansichten
Aus Gründen der Flexibilität empfohlen Kann anfällig für sorgfältig erstellte Abfragen, Abfragedauer und andere Arten von Nebenkanalangriffen sein. Autorisierte Ansichten sind eine gute Wahl, wenn Sie Daten mit anderen teilen möchten. Flexibilität und Leistung sind wichtig. Sie können beispielsweise autorisierte Ansichten verwenden, um Daten innerhalb Ihrer Arbeitsgruppe freizugeben.
Zugriffsrichtlinien auf Zeilenebene Empfohlen für ein Gleichgewicht von Flexibilität und Sicherheit. Kann anfällig für Nebenkanalangriffe der Abfragedauer sein. Zugriffsrichtlinien auf Zeilenebene sind eine gute Wahl, wenn Sie Daten für andere freigeben und die Sicherheit von Ansichten oder Tabellensegmenten erhöhen möchten. Beispielsweise können Sie Zugriffsrichtlinien auf Zeilenebene verwenden, um Daten für Personen freizugeben, die alle dasselbe Dashboard verwenden, auch wenn einige Personen Zugriff auf mehr Daten als andere haben.
Separate Tabellen Aus Sicherheitsgründen empfohlen Nutzer können keine Daten ohne Zugriff auf die Tabelle ableiten. Separate Tabellen sind eine gute Wahl, wenn Sie Daten mit anderen teilen und Daten isolieren müssen. Sie können beispielsweise separate Tabellen verwenden, um Daten für Drittanbieter und Anbieter freizugeben, wenn die Gesamtzahl der Zeilen geheim sein muss.

Zugriffsrichtlinien auf Zeilenebene erstellen und verwalten

Informationen zum Erstellen, Aktualisieren (neu erstellen), Auflisten, Aufrufen und Löschen von Zugriffsrichtlinien auf Zeilenebene für eine Tabelle sowie Details zum Abfragen von Tabellen mit Zugriffsrichtlinien auf Zeilenebene finden Sie unter Mit Sicherheit für den Zeilenzugriff auf Zeilen arbeiten

Kontingente

Weitere Informationen zu Kontingenten und Limits für die Sicherheit auf Zeilenebene finden Sie unter Kontingente und Limits in BigQuery.

Preise

Die Sicherheit auf Zeilenebene ist in BigQuery kostenlos. Eine Zugriffsrichtlinie auf Zeilenebene kann jedoch die Kosten für die Ausführung einer Abfrage so beeinflussen:

  • Zusätzliche Kosten können durch Zugriffsrichtlinien auf Zeilenebene verursacht werden, insbesondere Richtlinien, die Unterabfragen enthalten, die auf andere Tabellen verweisen.

  • Zugriffsrichtlinienfilter auf Zeilenebene wirken sich nicht auf die Abfragebereinigung für partitionierte und geclusterte Tabellen aus. Das bedeutet nicht, dass bei der Ausführung der Hauptabfrage mehr Daten gelesen werden. Die Prädikate der Zeilenzugriffsrichtlinie werden nicht zur weiteren Bereinigung benutzt.

  • Bei Filtern für Zugriffsrichtlinien auf Zeilenebene werden nicht alle Nutzerfilter frühzeitig angewendet. Dies kann die Anzahl der aus Tabellen gelesenen Daten erhöhen und möglicherweise dazu führen, dass mehr Zeilen gelesen und in Rechnung gestellt werden.

Weitere Informationen zu den Preisen für BigQuery-Abfragen finden Sie unter BigQuery-Preise.

Beschränkungen

Informationen zu den Limits für die Sicherheit auf Zeilenebene finden Sie unter BigQuery-Limits für Sicherheit auf Zeilenebene. In den folgenden Abschnitten werden zusätzliche Einschränkungen für Sicherheit auf Zeilenebene dokumentiert.

Leistungseinschränkungen

Weitere Informationen dazu, wie die Sicherheit auf Zeilenebene mit einigen BigQuery-Features und -Diensten interagiert, finden Sie unter Sicherheit auf Zeilenebene mit anderen BigQuery-Features verwenden.

Sonstige Einschränkungen

  • Dieses Feature ist möglicherweise nicht verfügbar, wenn Sie Reservierungen verwenden, die mit bestimmten BigQuery-Editionen erstellt wurden. Weitere Informationen dazu, welche Features in den einzelnen Editionen aktiviert sind, finden Sie unter Einführung in BigQuery-Editionen.

  • Zeilenzugriffsrichtlinien sind mit Legacy-SQL nicht kompatibel. Abfragen von Tabellen mit Zugriffsrichtlinien auf Zeilenebene müssen GoogleSQL verwenden. Abfragen in Legacy-SQL werden mit einer Fehlermeldung abgelehnt.

  • Sie können keine Zugriffsrichtlinien auf Zeilenebene auf JSON-Spalten anwenden.

  • Sie können keine Zugriffsrichtlinien auf Zeilenebene auf Tabellen anwenden, die auf andere Tabellen mit Sicherheit auf Zeilenebene verweisen.

  • Außerdem sind einige Features von BigQuery mit der Sicherheit auf Zeilenebene nicht kompatibel. Weitere Informationen finden Sie unter Sicherheit auf Zeilenebene verwenden.

  • Nicht-Abfragevorgänge einschließlich Dienstkontenjobs, die vollständigen Zugriff auf Tabellendaten benötigen, können die Sicherheit auf Zeilenebene mit dem TRUE-Filter verwenden. Beispiele hierfür sind das Kopieren von Tabellen, Dataproc-Workflows und mehr. Weitere Informationen finden Sie unter Sicherheit auf Zeilenebene verwenden.

  • Das Erstellen, Ersetzen oder Löschen von Zugriffsrichtlinien auf Zeilenebene muss mit DDL-Anweisungen ausgeführt werden. Das Auflisten und Aufrufen von Zugriffsrichtlinien auf Zeilenebene ist über die Google Cloud Console oder über das bq-Befehlszeilentool möglich.

  • Die Vorschau oder das Durchsuchen von Tabellen ist mit der Sicherheit auf Zeilenebene nicht kompatibel.

  • Die Probenahme der Tabelle ist nicht mit der Sicherheit auf Zeilenebene kompatibel.

  • Die Ergebnisse von Richtlinien für untergeordnete Abfragen der obersten Ebene sind auf 100 MB begrenzt. Dieses Limit gilt pro Zugriffsrichtlinie auf Zeilenebene.

  • Wenn das Prädikat der Zugriffsrichtlinie auf Zeilenebene aufgrund des Löschens einer referenzierten Tabelle nicht evaluiert werden kann, schlägt die Abfrage fehl.

  • Zugriffsrichtlinien auf Zeilenebene für Unterabfragen unterstützen nur BigQuery-Tabellen, externe BigLake-Tabellen und von BigLake verwaltete Tabellen.

Audit-Logging und Monitoring

Wenn Daten in einer Tabelle mit einer oder mehreren Zugriffsrichtlinien auf Zeilenebene gelesen werden, werden die Zugriffsrichtlinien auf Zeilenebene, die für den Lesezugriff autorisiert sind, und alle entsprechenden Tabellen, auf die in Unterabfragen verwiesen wird, in den IAM-Autorisierungsinformationen für diese Leseanfrage angezeigt.

Das Erstellen und Löschen von Zugriffsrichtlinien auf Zeilenebene wird in Audit-Logs erfasst, die über Cloud Logging aufgerufen werden können. Audit-Logs enthalten den Namen der Zugriffsrichtlinie auf Zeilenebene. Die Definitionen für filter_expression und grantee_list einer Zugriffsrichtlinie auf Zeilenebene werden jedoch in den Logs nicht erfasst, da sie Nutzer- oder andere vertrauliche Informationen enthalten können. Das Auflisten und Aufrufen von Zugriffsrichtlinien auf Zeilenebene wird in Audit-Logs nicht erfasst.

Weitere Informationen zum Logging in BigQuery finden Sie unter Einführung in BigQuery-Monitoring.

Weitere Informationen zum Logging in Google Cloud finden Sie unter Cloud Logging.

Nächste Schritte