Sicherheit auf Zeilenebene verwenden

In diesem Dokument wird erklärt, wie Sie die Sicherheit auf Zeilenebene in BigQuery verwenden, um den Zugriff auf Daten auf Tabellenzeilenebene zu beschränken. Bevor Sie dieses Dokument lesen, sollten Sie sich mit der Übersicht über die Sicherheit auf Zeilenebene vertraut machen. Weitere Informationen dazu finden Sie unter Einführung in die BigQuery-Sicherheit auf Zeilenebene.

Übersicht

Sie können die folgenden Aufgaben mit Zugriffsrichtlinien auf Zeilenebene ausführen:

Hinweis

Erteilen Sie IAM-Rollen (Identity and Access Management), die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument geben. Die Berechtigungen, die zum Ausführen einer Aufgabe erforderlich sind (sofern zutreffend), werden im Abschnitt "Erforderliche Berechtigungen" der Aufgabe aufgelistet.

Zugriffsrichtlinie auf Zeilenebene erstellen oder aktualisieren

Sie können eine Zugriffsrichtlinie auf Zeilenebene für eine Tabelle in BigQuery mit einer DDL-Anweisung (Datendefinitionssprache) erstellen oder aktualisieren.

Erforderliche Berechtigungen

Zum Erstellen einer Zugriffsrichtlinie auf Zeilenebene für eine BigQuery-Tabelle benötigen Sie die folgenden IAM-Berechtigungen:

  • bigquery.rowAccessPolicies.create
  • bigquery.rowAccessPolicies.setIamPolicy
  • bigquery.tables.getData (für die Zieltabelle)
  • bigquery.jobs.create (um den DDL-Abfragejob auszuführen)

Zum Aktualisieren einer Zugriffsrichtlinie auf Zeilenebene für eine BigQuery-Tabelle benötigen Sie die folgenden IAM-Berechtigungen:

  • bigquery.rowAccessPolicies.update
  • bigquery.rowAccessPolicies.setIamPolicy
  • bigquery.tables.getData (für die Zieltabelle)
  • bigquery.jobs.create (um den DDL-Abfragejob auszuführen)

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Erstellen und Aktualisieren von Zugriffsrichtlinien auf Zeilenebene benötigen:

  • roles/bigquery.admin
  • roles/bigquery.dataOwner

Die Rolle bigquery.filteredDataViewer

Wenn Sie Zugriffsrichtlinien auf Zeilenebene erfolgreich erstellen, weisen Sie den Mitgliedern der Empfängerliste automatisch die Rolle bigquery.filteredDataViewer zu. Die Rolle bigquery.filteredDataViewer ermöglicht das Aufrufen der Zeilen, die durch den Filterausdruck der Richtlinie definiert sind. Wenn Sie die Zugriffsrichtlinien einer Zeile auf Tabellenebene in der Google Cloud Console auflisten, wird diese Rolle zusammen mit den Mitgliedern der Empfängerliste der Richtlinie angezeigt.

Informationen finden Sie in den empfohlenen Best Practices für die Sicherheit auf Zeilenebene, wenn Sie die Rolle bigquery.filteredDataViewer mit IAM verwenden.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Zugriffsrichtlinien auf Zeilenebene erstellen oder aktualisieren

Verwenden Sie in der DDL-Anweisung die folgenden Befehle, um eine Zugriffsrichtlinie auf Zeilenebene zu erstellen oder zu aktualisieren:

  • CREATE ROW ACCESS POLICY erstellt eine neue Zugriffsrichtlinie auf Zeilenebene.

  • CREATE ROW ACCESS POLICY IF NOT EXISTS erstellt eine neue Zugriffsrichtlinie auf Zeilenebene, wenn in der angegebenen Tabelle noch keine Zugriffsrichtlinie auf Zeilenebene mit demselben Namen vorhanden ist.

  • CREATE OR REPLACE ROW ACCESS POLICY aktualisiert eine vorhandene Zugriffsrichtlinie auf Zeilenebene mit dem gleichen Namen in der angegebenen Tabelle.

Beispiele

In der DDL-Referenz finden Sie die vollständige Syntax und die Optionen zum Erstellen einer Zugriffsrichtlinie auf Zeilenebene.

SQL

Sie können diese DDL-Anweisungen auf der Seite der Cloud Console ausführen.

Geben Sie die Anweisung auf der BigQuery-Seite in den Abfrageeditor ein.

BigQuery aufrufen

Zeilenzugriffsrichtlinie erstellen und später die Empfänger ändern

CREATE ROW ACCESS POLICY My_apac_filter
ON project.dataset.My_table
GRANT TO ("user:abc@example.com")
FILTER USING (region = "apac");
CREATE OR REPLACE ROW ACCESS POLICY My_apac_filter
ON project.dataset.My_table
GRANT TO ("user:xyz@example.com")
FILTER USING (region = "apac");

Zeilenzugriffsrichtlinie mit mehreren Empfängern erstellen

CREATE ROW ACCESS POLICY My_us_filter
ON project.dataset.My_table
GRANT TO ("user:john@example.com", "group:sales-us@example.com", "group:sales-managers@example.com")
FILTER USING (region = "us");

Zeilenzugriffsrichtlinie für Zeilen mit allAuthenticatedUsers als Empfänger erstellen

CREATE ROW ACCESS POLICY My_us_filter
ON project.dataset.My_table
GRANT TO ("allAuthenticatedUsers")
FILTER USING (region = "us");

Zeilenzugriffsrichtlinie mit einem Filter basierend auf dem aktuellen Nutzer erstellen

CREATE ROW ACCESS POLICY My_row_filter
ON dataset.My_table
GRANT TO ("domain:example.com")
FILTER USING (email = SESSION_USER());

Zeilenzugriffsrichtlinie mit einem Filter für eine Spalte mit dem Typ ARRAY erstellen

CREATE ROW ACCESS POLICY My_reports_filter
ON project.dataset.My_table
GRANT TO ("domain:example.com")
FILTER USING (SESSION_USER() IN UNNEST(reporting_chain));

Zugriffsrichtlinien auf Zeilenebene kombinieren

Wenn zwei oder mehr Zugriffsrichtlinien auf Zeilenebene einem Nutzer oder einer Gruppe Zugriff auf dieselbe Tabelle gewähren, hat der Nutzer oder die Gruppe Zugriff auf alle Daten, die von einer der Richtlinien abgedeckt werden. Die folgenden Richtlinien gewähren dem Nutzer beispielsweise abc@example.com-Zugriff auf bestimmte Zeilen in der Tabelle My_table:

   CREATE ROW ACCESS POLICY shoes
   ON project.dataset.My_table
   GRANT TO ("user:abc@example.com")
   FILTER USING (product_category = "shoes");
   CREATE OR REPLACE ROW ACCESS POLICY blue_products
   ON project.dataset.My_table
   GRANT TO ("user:abc@example.com")
   FILTER USING (color = "blue");

Im vorherigen Beispiel hat der Nutzer abc@example.com Zugriff auf die Zeilen in der Tabelle My_table, in denen das Feld product_category auf shoes gesetzt ist, und abc@example.com hat auch Zugriff auf die Zeilen, für die das Feld color auf blue gesetzt ist. Zum Beispiel könnte abc@example.com auf Zeilen mit Informationen zu roten Schuhen und blauen Autos zugreifen.

Dieser Zugriff entspricht dem Zugriff, der durch die folgende Zugriffsrichtlinie für einzelne Zeilen bereitgestellt wird:

   CREATE ROW ACCESS POLICY shoes_and_blue_products
   ON project.dataset.My_table
   GRANT TO ("user:abc@example.com")
   FILTER USING (product_category = "shoes" OR color = "blue");

Verwenden Sie dagegen einen Filter mit einem AND-Operator, um den Zugriff anzugeben, der davon abhängt, dass mehrere Bedingungen erfüllt sind. Die folgenden Zugriffsrichtlinien auf Zeilenebene gewähren beispielsweise abc@example.com Zugriff auf Zeilen, die sowohl das Feld product_category festgelegt haben aufshoes und das Feld color festgelegt haben aufblue:

   CREATE ROW ACCESS POLICY blue_shoes
   ON project.dataset.My_table
   GRANT TO ("user:abc@example.com")
   FILTER USING (product_category = "shoes" AND color = "blue");

Mit der obigen Zugriffsrichtlinie auf Zeilenebene könnte abc@example.com auf Informationen zu blauen Schuhen zugreifen, jedoch nicht auf rote Schuhe oder blaue Fahrzeuge.

Zugriffsrichtlinien auf Tabellenebene auflisten

Sie können alle Zugriffsrichtlinien auf Zeilenebene für eine Tabelle in der Cloud Console oder mit dem bq-Befehlszeilentool auflisten und anzeigen, wenn Sie die Berechtigungen dafür haben.

Erforderliche Berechtigungen

Zum Auflisten von Zugriffsrichtlinien auf Zeilenebene für eine BigQuery-Tabelle benötigen Sie die IAM-Berechtigung bigquery.rowAccessPolicies.list.

Zur Anzeige der Mitglieder einer Zugriffsrichtlinie auf Zeilenebene für eine BigQuery-Tabelle benötigen Sie die IAM-Berechtigung bigquery.rowAccessPolicies.getIamPolicy.

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Auflisten und Anzeigen von Zugriffsrichtlinien auf Zeilenebene benötigen:

  • roles/bigquery.admin
  • roles/bigquery.dataOwner

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Zugriffsrichtlinien auf Tabellenebene auflisten

So listen Sie Zugriffsrichtlinien auf Zeilenebene auf:

Console

  1. Rufen Sie in der Cloud Console die Seite „BigQuery“ auf, um Zugriffsrichtlinien auf Zeilenebene aufzurufen.

    BigQuery aufrufen

  2. Klicken Sie auf den Tabellennamen, um die Details aufzurufen, und dann auf Zeilenzugriffsrichtlinien aufrufen.

    Zeilenzugriffsrichtlinien aufrufen

  3. Wenn der Bereich Zeilen-Zugriffsrichtlinien geöffnet wird, sehen Sie eine Liste aller Zugriffsrichtlinien auf Zeilenebene in der Tabelle, nach Namen geordnet, sowie den filter_expression für jede Richtlinie.

    Zeilenzugriffsrichtlinien

  4. Klicken Sie auf VIEW neben der Richtlinie, um alle von einer Zugriffsrichtlinie auf Zeilenebene betroffenen Rollen und Nutzer anzusehen. In der folgenden Abbildung sehen Sie beispielsweise im Bereich Berechtigungen ansehen, dass Mitglieder der Empfängerliste die Rolle bigquery.filteredDataViewer haben.

    Zeilenzugriffsrichtlinien

bq

Geben Sie den Befehl bq ls mit dem Flag --row_access_policies ein. Dataset- und Tabellennamen sind erforderlich.

    bq ls --row_access_policies dataset.table

Der folgende Befehl listet beispielsweise Informationen zu Zugriffsrichtlinien auf Zeilenebene für eine Tabelle mit dem Namen My_table in einem Dataset mit der ID My_dataset auf.

    bq ls --row_access_policies My_dataset.My_table

API

Verwenden Sie die Methode RowAccessPolicies.List im Referenzabschnitt der REST API.

Zugriffsrichtlinien auf Zeilenebene löschen

Sie können mit einer DDL-Anweisung eine oder alle Zugriffsrichtlinien für Zeilen für eine Tabelle löschen, wenn Sie über die Berechtigungen verfügen.

Erforderliche Berechtigungen

Zum Löschen einer Zugriffsrichtlinie auf Zeilenebene benötigen Sie die folgenden IAM-Berechtigungen:

  • bigquery.rowAccessPolicies.delete
  • bigquery.jobs.create (um den DDL-Abfragejob auszuführen)

Wenn Sie alle Zugriffsrichtlinien auf Zeilenebene für eine Tabelle gleichzeitig löschen möchten, benötigen Sie die folgenden IAM-Berechtigungen:

  • bigquery.rowAccessPolicies.update
  • bigquery.rowAccessPolicies.setIamPolicy
  • bigquery.rowAccessPolicies.list
  • bigquery.jobs.create (um den DDL-Abfragejob auszuführen)

Jede der folgenden vordefinierten IAM-Rollen enthält die Berechtigungen, die Sie zum Löschen von Zugriffsrichtlinien auf Zeilenebene benötigen:

  • roles/bigquery.admin
  • roles/bigquery.dataOwner

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Zugriffsrichtlinien auf Zeilenebene löschen

Verwenden Sie in der DDL-Anweisung die folgenden Befehle, um eine Zugriffsrichtlinie für Zeilen aus einer Tabelle zu löschen.

  • Mit ZEILENZUGRIFFSRICHTLINIE werden die Zugriffsrichtlinien auf Zeilenebene für die angegebene Tabelle gelöscht.

  • ZEILENZUGRIFFSRICHTLINIE, FALLS VORHANDEN löscht eine Zugriffsrichtlinie auf Zeilenebene, nur wenn die Zeilenzugriffsrichtlinie für die angegebene Tabelle vorhanden ist.

  • ALLE ZEILENZUGRIFFSRICHTLINIEN VERÖFFENTLICHEN löscht alle Zugriffsrichtlinien auf Zeilenebene für die angegebene Tabelle.

Beispiele

In der DDL-Referenz finden Sie die vollständige Syntax und die Optionen zum Löschen einer Zugriffsrichtlinie auf Zeilenebene.

SQL

Sie können diese DDL-Anweisungen auf der Seite der Cloud Console ausführen.

Geben Sie die Anweisung auf der BigQuery-Seite in den Abfrageeditor ein.

BigQuery aufrufen

Zugriffsrichtlinie auf Zeilenebene aus einer Tabelle löschen

DROP ROW ACCESS POLICY My_row_filter ON project.dataset.My_table;

Alle Zugriffsrichtlinien auf Zeilenebene aus einer Tabelle löschen

DROP ALL ROW ACCESS POLICIES ON project.dataset.My_table;

Tabellen mit Zeilenzugriffsrichtlinien abfragen

Ein Nutzer muss zuerst Zugriff auf eine BigQuery-Tabelle haben, um sie abfragen zu können, auch wenn er auf der grantee_list einer Zeilenzugriffsrichtlinie für diese Tabelle steht. Ohne diese Berechtigung schlägt die Abfrage mit dem Fehler access denied fehl.

Erforderliche Berechtigungen

Zum Abfragen einer BigQuery-Tabelle mit Zugriffsrichtlinien auf Zeilenebene benötigen Sie die IAM-Berechtigung bigquery.tables.getData.

Die vordefinierte IAM-Rolle roles/bigquery.filteredDataViewer enthält die Berechtigungen, die Sie benötigen, um eine BigQuery-Tabelle mit Zugriffsrichtlinien auf Zeilenebene abzufragen.

Abfrageergebnisse ansehen

Console

Wenn Sie in der Cloud Console eine Tabelle mit einer Zugriffsrichtlinie auf Zeilenebene abfragen, wird in BigQuery ein Bannerhinweis angezeigt, der darauf hinweist, dass Ihre Ergebnisse möglicherweise durch eine Zugriffsrichtlinie auf Zeilenebene gefiltert werden. Dieser Hinweis wird auch dann angezeigt, wenn Sie Mitglied der Empfängerliste für die Richtlinie sind.

Abfrageergebnis für Tabelle mit Zugriffsrichtlinie auf Zeilenebene

Jobstatistiken

Wenn Sie eine Tabelle mit einer Zugriffsrichtlinie auf Zeilenebene mithilfe der Job API abfragen, gibt BigQuery an, ob die Abfrage Tabellen mit Zeilenzugriffsrichtlinien im Antwortobjekt Job liest:

Beispiel

Der Einfachheit halber wurde die Objektantwort Job gekürzt:

{
  "configuration": {
    "jobType": "QUERY",
    "query": {
      "priority": "INTERACTIVE",
      "query": "SELECT * FROM dataset.table",
      "useLegacySql": false
    }
  },
  ...
  "statistics": {
    ...
    rowLevelSecurityStatistics: {
      rowLevelSecurityApplied: true
    },
    ...
  },
  "status": {
    "state": "DONE"
  },
  ...
}

Nächste Schritte