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.
Informationen zum Erstellen und Verwenden einer Zugriffsrichtlinie auf Zeilenebene finden Sie unter Mit der Sicherheit auf Zeilenebene arbeiten.
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 veranschaulichen 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. Mit der folgenden Anweisung wird eine Richtlinie implementiert, die Nutzer in der APAC-Versandgruppe darauf beschränkt, nur Partner aus der Region APAC anzuzeigen:
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 Zeilen angezeigt werden, in denen der Wert für region
gleich 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 vorherigen beiden Zugriffsrichtlinien einschränken, welche Nutzer und Gruppen welche Zeilen in der Tabelle sehen können:
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');
Die Zeilenzugriffsrichtlinie in der folgenden Anweisung beschränkt die Abfrage auf Mitglieder der Unternehmensdomain. 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
.
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. Dies bedeutet nicht, dass während 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 vorzeitig 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
Einige BigQuery-Features werden durch die Anwendung von Tabellen mit Zugriffsrichtlinien auf Zeilenebene wie BigQuery BI Engine und materialisierten Ansichten verlangsamt.
Die Sicherheit auf Zeilenebene ist nicht Teil der Abfragebereinigung, einer Funktion von partitionierten Tabellen. Weitere Informationen finden Sie unter Partitionierte und geclusterte Tabellen. Diese Einschränkung verlangsamt die Ausführung der Hauptabfrage nicht.
Wenn Sie Tabellen mit Sicherheit auf Zeilenebene abfragen, kann es zu einer geringen Leistungsverschlechterung kommen.
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.
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.
Tabellen als Vorschau ansehen oder durchsuchen ist nicht mit der Sicherheit auf Zeilenebene kompatibel.
Die Probenahme der Tabelle ist nicht mit der Sicherheit auf Zeilenebene kompatibel.
Die Ergebnisse der Richtlinie für Unterabfragen 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
Informationen zur Verwaltung der Sicherheit auf Zeilenebene finden Sie unter Sicherheit auf Zeilenebene verwenden.
Informationen dazu, wie die Sicherheit auf Zeilenebene mit anderen BigQuery-Features und -Diensten funktioniert, erhalten Sie unter Sicherheit auf Zeilenebene mit anderen BigQuery-Features verwenden.
Weitere Informationen finden Sie unter Best Practices für die Sicherheit auf Zeilenebene in BigQuery.