Zugriff mit IAM-Bedingungen steuern
Mit IAM-Bedingungen können Sie nur dann Zugriff auf BigQuery-Ressourcen gewähren, wenn bestimmte Anforderungen erfüllt sind, z. B. für eine begrenzte Dauer oder während geplanter Zeiten. Sie können den bedingten Zugriff auf Organisations-, Ordner-, Projekt- und Dataset-Ebene anwenden. Zulassungsrichtlinien werden automatisch von untergeordneten Ressourcen übernommen. Weitere Informationen finden Sie unter Ressourcenhierarchien.
Mit diesen Regeln können Sie Berechtigungen für mehrere zugehörige Ressourcen gleichzeitig verwalten, einschließlich zukünftiger Assets. Wenn Sie den Zugriff auf unterschiedliche Sammlungen von BigQuery-Ressourcen verwalten möchten, können Sie IAM-Tags (Identity and Access Management) verwenden.
Hinweis
- Weisen Sie Nutzern IAM-Rollen zu, die die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument enthalten.
- Aktivieren Sie die IAM API.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Anwenden von IAM-Bedingungen auf BigQuery-Ressourcen benötigen:
-
Für Projekte: Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin) -
Für Datasets: BigQuery Data Owner (
roles/bigquery.dataOwner)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Anwenden von IAM-Bedingungen auf BigQuery-Ressourcen erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um IAM-Bedingungen auf BigQuery-Ressourcen anzuwenden:
-
Bedingten IAM-Zugriff auf Projektebene festlegen:
resourcemanager.projects.setIamPolicy -
Bedingten IAM-Zugriff auf Datasets festlegen:
-
bigquery.datasets.setIamPolicy -
bigquery.datasets.update
-
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Wenn Sie IAM-Bedingungen in Ihrer gesamten Organisation verwenden möchten, benötigen Sie außerdem Berechtigungen zum Verwalten von Organisationsrichtlinien.Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.
IAM API aktivieren
Wählen Sie eine der folgenden Optionen aus, um die IAM API zu aktivieren:
Console
Rufen Sie die Seite IAM (Identity and Access Management) API auf und aktivieren Sie die API.
gcloud
Führen Sie den Befehl gcloud services enable aus:
gcloud services enable iam.googleapis.com
Richtlinie für bedingten Zugriff für ein Dataset aufrufen
Wählen Sie eine der folgenden Optionen aus:
Console
Rufen Sie die Seite BigQuery auf.
Klicken Sie im linken Bereich auf Explorer:

Wenn der linke Bereich nicht angezeigt wird, klicken Sie auf Linken Bereich maximieren, um ihn zu öffnen.
Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und wählen Sie dann ein Dataset aus.
Klicken Sie auf Freigabe > Berechtigungen.
Klicken Sie neben der zugehörigen Rolle auf Bedingung:
TITLE, um die Bedingung für diese Rolle aufzurufen.
bq
Wenn Sie Richtlinien für bedingten Zugriff in Cloud Shell aufrufen oder aktualisieren möchten, müssen Sie Cloud Shell-Version 503.0.0 oder höher verwenden.
Verwenden Sie in Cloud Shell den Befehl bq show, um eine vorhandene Zugriffsrichtlinie abzurufen und in eine lokale Datei in JSON auszugeben:
bq show --format=prettyjson PROJECT_ID:DATASET > PATH_TO_FILE
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID
- DATASET: der Name Ihres Datasets
- PATH_TO_FILE: der Pfad zur JSON-Datei auf dem lokalen Computer
Das Attribut access in der JSON-Datei der Dataset-Ressource enthält die Zugriffsrichtlinie.
API
Wenn Sie die Zugriffsrichtlinie eines Datasets mit Bedingungen aufrufen möchten, rufen Sie datasets.get mit accessPolicyVersion=3 als Anfrageparameter auf.
Das Attribut access in der Dataset-Ressource enthält die Zugriffsrichtlinie.
Bedingten Zugriff auf Ressourcen ändern
In den folgenden Abschnitten wird beschrieben, wie Sie bedingten Zugriff auf verschiedene Ressourcen hinzufügen oder entfernen.
Bedingungen zu einer Organisation, einem Ordner oder einem Projekt hinzufügen
Informationen zum Hinzufügen von bedingtem Zugriff auf eine Organisation, einen Ordner oder ein Projekt in BigQuery finden Sie unter Zulassungsrichtlinien mit Bedingungen. Berücksichtigen Sie beim Erstellen der Bedingungen die Attributformattabellen.
Bedingten Zugriff auf Dataset hinzufügen
Wählen Sie eine der folgenden Methoden aus, um einem Dataset Bedingungen hinzuzufügen. Berücksichtigen Sie beim Erstellen der Bedingungen die Attributformattabellen.
Console
Rufen Sie die Seite BigQuery auf.
Klicken Sie im linken Bereich auf Explorer:

Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und wählen Sie dann ein Dataset aus.
Klicken Sie im Detailbereich auf Freigeben > Berechtigungen.
Klicken Sie auf Hauptkonto hinzufügen.
Geben Sie im Feld Neue Hauptkonten ein Hauptkonto ein.
Wählen Sie in der Liste Rolle auswählen eine vordefinierte oder eine benutzerdefinierte Rolle aus.
Klicken Sie auf IAM-Bedingung hinzufügen.
Fügen Sie dem Feld
conditionmithilfe der Bedingungsattribute Bedingungen hinzu.Klicken Sie im Bereich IAM-Bedingung hinzufügen auf Speichern.
Klicken Sie im Bereich Zugriff auf
DATASETgewähren auf Speichern.
bq
Wenn Sie Richtlinien für bedingten Zugriff in Cloud Shell aufrufen oder aktualisieren möchten, müssen Sie Cloud Shell-Version 503.0.0 oder höher verwenden.
Wenn Sie einem Dataset mit Cloud Shell bedingten Zugriff gewähren möchten, folgen Sie der Anleitung unter Zugriff auf ein Dataset gewähren.
Sie können Ihre Bedingungen für den bedingten Zugriff im Abschnitt access der JSON-Datei des Datasets hinzufügen.
Mit der folgenden Ergänzung im Abschnitt access der JSON-Datei eines Datasets wird beispielsweise cloudysanfrancisco@gmail.com bis zum 31. Dezember 2032 die Rolle roles/bigquery.dataViewer zugewiesen:
"access": [ { "role": "roles/bigquery.dataViewer", "userByEmail": "cloudysanfrancisco@gmail.com", "condition": { "title": "Grant roles/bigquery.dataViewer until 2033", "description": "Role expires on December 31, 2032.", "expression": "request.time < timestamp('2032-12-31T12:00:00Z')" } } ]
API
Wenn Sie mithilfe der BigQuery API bedingten Zugriff auf ein Dataset gewähren möchten, folgen Sie der Anleitung zum Gewähren von Zugriff auf ein Dataset mit accessPolicyVersion=3 im Anfrageparameter.
Sie können dem Attribut access.condition der Dataset-Ressource Einträge mit Zugriffsbedingungen hinzufügen.
Bei Datasets mit Richtlinien für bedingten Zugriff können Nutzer die Einstellungen für den bedingungslosen Zugriff mithilfe der Standardabläufe zum Lesen, Ändern und Aktualisieren aktualisieren, ohne den Anfrageparameter accessPolicyVersion anzugeben.
Bedingten Zugriff aus Datasets entfernen
Wählen Sie eine der folgenden Methoden aus, um Bedingungen aus einem Dataset zu entfernen. Berücksichtigen Sie beim Erstellen der Bedingungen die Attributformattabellen.
Console
Rufen Sie die Seite BigQuery auf.
Klicken Sie im linken Bereich auf Explorer:

Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und wählen Sie dann ein Dataset aus.
Klicken Sie im Detailbereich auf Freigeben > Berechtigungen.
Wählen Sie das Hauptkonto aus, dessen Zugriff Sie widerrufen möchten.
Klicken Sie auf Löschen.
Klicken Sie im Dialogfeld Hauptkonto löschen? auf Löschen.
bq
Wenn Sie Richtlinien für bedingten Zugriff in Cloud Shell aufrufen oder aktualisieren möchten, müssen Sie Cloud Shell-Version 503.0.0 oder höher verwenden.
Wenn Sie den bedingten Zugriff auf ein Dataset mit Cloud Shell entfernen möchten, folgen Sie der Anleitung unter Zugriff auf ein Dataset widerrufen.
Sie können den Eintrag mit der Bedingung aus dem Abschnitt access der JSON-Datei des Datasets entfernen.
API
Wenn Sie den bedingten Zugriff auf ein Dataset über die BigQuery API widerrufen möchten, folgen Sie der Anleitung zum Widerrufen des Zugriffs auf ein Dataset mit accessPolicyVersion=3 im Anfrageparameter.
Sie können Einträge mit Bedingungen aus dem Attribut access der Dataset-Ressource entfernen.
Bei Datasets mit Richtlinien für bedingten Zugriff können Nutzer die Einstellungen für den bedingungslosen Zugriff mithilfe der Standardabläufe zum Lesen, Ändern und Aktualisieren aktualisieren, ohne den Anfrageparameter accessPolicyVersion anzugeben.
Bedingungsattribute
Sie können IAM-Bedingungen für Ihre BigQuery-Ressourcen basierend auf den folgenden Attributen festlegen:
request.time: der Zeitpunkt, zu dem der Nutzer versucht, auf eine BigQuery-Ressource zuzugreifen. Weitere Informationen und Beispiele finden Sie unter Attribut "Datum/Uhrzeit".resource.name: der Pfad der BigQuery-Ressource. Das Format finden Sie in den Tabellen unter Attributformate.resource.type: der Typ der BigQuery-Ressource. Das Format finden Sie in den Tabellen unter Attributformate.resource.service: der von der BigQuery-Ressource verwendete Google Cloud -Dienst. Das Format finden Sie in den Tabellen unter Attributformate.resource.tags: Die an die Ressource angehängten Tags Tags werden nur für BigQuery-Datasets, -Tabellen und -Ansichten unterstützt. Das Format finden Sie in den Tabellen unter Attributformate und in der IAM-Dokumentation.
Attributformate
Verwenden Sie beim Erstellen von Bedingungen für BigQuery-Datasets die folgenden Formate:
| Attribut | Wert |
|---|---|
resource.type |
bigquery.googleapis.com/Dataset |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
Unterstützt hasTagKey, hasTagKeyId, matchTag und matchTagId. Weitere Informationen finden Sie unter Ressourcen-Tags. |
Verwenden Sie beim Erstellen von Bedingungen für BigQuery-Tabellen und -Ansichten die folgenden Formate:
| Attribut | Wert |
|---|---|
resource.type |
bigquery.googleapis.com/Table |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
Unterstützt hasTagKey, hasTagKeyId, matchTag und matchTagId. Weitere Informationen finden Sie unter Ressourcen-Tags. |
Verwenden Sie beim Erstellen von Bedingungen für BigQuery-Routinen die folgenden Formate:
| Attribut | Wert |
|---|---|
resource.type |
bigquery.googleapis.com/Routine |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/routines/ROUTINE_ID |
resource.service |
bigquery.googleapis.com |
Verwenden Sie beim Erstellen von Bedingungen für BigQuery-Modelle die folgenden Formate:
| Attribut | Wert |
|---|---|
resource.type |
bigquery.googleapis.com/Model |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/models/MODEL_ID |
resource.service |
bigquery.googleapis.com |
Ersetzen Sie Folgendes:
PROJECT_ID: die ID des Projekts, das die Ressourcen enthält, denen Sie Zugriff gewährenDATASET_ID: die ID des Datasets, auf das Sie Zugriff gewährenTABLE_ID: die ID der Tabelle oder Ansicht, auf die Sie Zugriff gewährenROUTINE_ID: die ID der Routine, auf die Sie Zugriff gewährenMODEL_ID: die ID des Modells, auf das Sie Zugriff gewähren
Best Practices für Bedingungen
Beachten Sie beim Erstellen von Bedingungen in BigQuery die folgenden Best Practices:
- Wir empfehlen, positive Bedingungen für
resource.type,resource.nameundresource.servicezu verwenden, um die Genauigkeit zu erhöhen. Da nicht unterstützte Typen durch einen leeren String dargestellt werden, können negative Bedingungen mit einer Vielzahl von Ressourcen übereinstimmen. Weitere Informationen finden Sie unter negative Bedingungen. - IAM-Bedingungen auf Dataset-Ebene sollten nur für Rollen verwendet werden, die für Ressourcen innerhalb des Datasets gelten, z. B. Tabellen, Ansichten, Modelle und Routinen.
Sie sollten nicht verwendet werden, um Rollen zuzuweisen, die auf Dataset- oder Projektebene funktionieren, z. B.
bigquery.useroderbigquery.jobUser. - Verwenden Sie die Bedingung
resource.type == 'bigquery.googleapis.com/Dataset'nicht für Richtlinien auf Dataset-Ebene, da sie keine Auswirkungen auf die Autorisierung hat. Dieses Attribut dient dazu, den Zugriff auf Ressourcen unterhalb der Dataset-Ebene wie Tabellen, Ansichten, Routinen und Modelle zu steuern. - Fügen Sie
resource.type,resource.nameundresource.servicein Ihre Bedingung ein, auch wenn diese Genauigkeit nicht erforderlich ist. Mit dieser Vorgehensweise können Sie dafür sorgen, dass Ihre Bedingungen beibehalten werden können, wenn sich Ressourcen in Ihrem Workflow ändern, sodass in Zukunft nicht unbeabsichtigt andere Ressourcen eingeschlossen werden. - Nehmen Sie beim Gewähren von Berechtigungen nur die geringstmöglichen Berechtigungen auf, damit Sie nicht versehentlich zu umfassenden Zugriff ermöglichen.
resource.name.startsWithist mit Vorsicht zu verwenden. BigQuery-Tabelle- und -Ansichtspfaden wird die ID des übergeordneten Projekts und die Dataset-ID vorangestellt. Nicht ausreichend spezifische Bedingungen können zu umfassenden Zugriff gewähren. Sie können jedoch das Attributresource.name.startsWithverwenden, um Nutzern die Möglichkeit zu geben, Platzhalterabfragen für Tabellen auszuführen. Mit der Bedingungresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")können Nutzer beispielsweise die AbfrageSELECT * FROM my_dataset.table_prefix*ausführen.- Fügen Sie keine Bedingungen für BigQuery-Ressourcen außer Datasets, Tabellen, Ansichten, Routinen und Modellen hinzu.
- Prüfen Sie, ob Sie die richtigen Berechtigungen für die richtige Ressource erteilen. Beispiel: Die Berechtigung zum Auflisten von Ressourcen (
bigquery.RESOURCE.list) muss auf der übergeordneten Ebene gewährt werden, aber die Berechtigung zum Löschen von Ressourcen (bigquery.RESOURCE.delete) muss auf Ressourcenebene gewährt werden. Das Löschen des Datasets, bei dem auch alle enthaltenen Ressourcen gelöscht werden, erfordert Berechtigungen zum Löschen von Tabellen, Modellen und Routinen für das Dataset. - Beachten Sie, dass Tabellen-Snapshots und Zeitreisen keine Auswirkungen auf Berechtigungen haben.
Negative Bedingungen
Negative Bedingungen wie resource.name != resource können versehentlich zu umfassenden Zugriff gewähren. Nicht unterstützte BigQuery-Ressourcen haben leere Ressourcenattribute, d. h., sie erfüllen alle negativen Bedingungen. Ressourcen in Diensten außerhalb von BigQuery können ebenfalls negative Bedingungen erfüllen.
Darüber hinaus verursachen negative Bedingungen Probleme, wenn Nutzer Abfragen mit Platzhaltern ausführen. Betrachten Sie beispielsweise die negative Bedingung resource.name != /projects/my_project/datasets/my_dataset/tables/secret. Diese Bedingung gewährt Zugriff auf alle Ressourcen mit Ausnahme einer Tabelle namens secret. Der Nutzer kann diese Tabelle jedoch weiterhin mit einer Platzhalterabfrage wie SELECT * from my_project.my_dataset.secre*; abfragen.
Darüber hinaus können negative Bedingungen für Tabellen, Routinen und Modelle zu umfassenden Zugriff auf ihre übergeordneten Datasets gewähren. Nutzer können diese Ressourcen dann möglicherweise löschen, da Löschberechtigungen auf Dataset-Ebene verwaltet werden.
Beschränkungen
- Sie können mit IAM-Bedingungen keine Berechtigungen für autorisierte Ansichten, autorisierte Routinen oder autorisierte Datasets hinzufügen.
- Wenn beim Aufrufen einer Ressource mit Bedingungen eine inkompatible
accessPolicyVersionverwendet wird, enthalten Bindungen möglicherweisewithcond, gefolgt von einem Hashwert. Weitere Informationen finden Sie unter Fehlerbehebung beiwithcondin Richtlinien und Rollenbindungen. - Nutzer mit bedingtem Zugriff auf ein Dataset oder eine Tabelle können die Berechtigungen für diese Ressource nicht über die Google Cloud Console ändern. Berechtigungsänderungen werden nur über das bq-Tool und die BigQuery API unterstützt.
- Die Zugriffssteuerung auf Zeilen- und Spaltenebene wird nicht direkt über IAM-Bedingungen unterstützt. Ein Nutzer mit bedingtem Zugriff kann sich jedoch die BigQuery-Administratorrolle (
roles/bigquery.admin) für die Tabelle zuweisen und dann die Zeilen- und Spaltenzugriffsrichtlinien ändern. - Es kann bis zu fünf Minuten dauern, bis Änderungen an IAM-Richtlinien wirksam werden.
- Nutzer mit bedingtem Zugriff können möglicherweise keine
INFORMATION_SCHEMA-Ansichten abfragen. - Nutzer, die nur bedingten Tabellenzugriff haben, können keine Tabellenplatzhalterfunktionen ausführen.
Beispiele
Die folgenden Beispiele zeigen Anwendungsfälle für IAM-Bedingungen in BigQuery.
Lesezugriff auf eine bestimmte Tabelle gewähren
In diesem Beispiel wird cloudysanfrancisco@gmail.com die Rolle "BigQuery Data Viewer" für die Tabelle table_1 im Dataset dataset_1 zugewiesen. Mit dieser Rolle kann der Nutzer die Tabelle abfragen und über das bq-Tool darauf zugreifen. Der Nutzer kann die Tabelle in der Google Cloud -Console nicht sehen, da er nicht die Berechtigung bigquery.tables.list für das Dataset hat.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataViewer, "condition": { "title": "Table dataset_1.table_1", "description": "Allowed to read table with name table_1 in dataset_1 dataset", "expression": resource.name == projects/project_1/datasets/dataset_1/tables/table_1 && resource.type == bigquery.googleapis.com/Table } }
Auflistungszugriff auf ein bestimmtes Dataset gewähren
In diesem Beispiel wird cloudysanfrancisco@gmail.com die Rolle "BigQuery Metadata Viewer" für das Dataset dataset_2 zugewiesen. Mit dieser Rolle kann der Nutzer alle Ressourcen im Dataset auflisten, aber keine Abfragen für diese Ressourcen ausführen.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.metadataViewer, "condition": { "title": "Dataset dataset_2", "description": "Allowed to list resources in dataset_2 dataset", "expression": resource.name == projects/project_2/datasets/dataset_2 && resource.type == bigquery.googleapis.com/Dataset } }
Inhaberzugriff auf alle Tabellen in allen Datasets mit einem bestimmten Präfix gewähren
In diesem Beispiel wird cloudysanfrancisco@gmail.com die Rolle "BigQuery Data Owner" für alle Tabellen in allen Datasets zugewiesen, die mit dem Präfix public_ beginnen:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables public_", "description": "Allowed owner access to tables in datasets with public_ prefix", "expression": resource.name.startsWith("projects/project_3/datasets/public_") && resource.type == bigquery.googleapis.com/Table } }
Inhaberzugriff auf alle Tabellen, Modelle und Routinen in allen Datasets mit einem bestimmten Präfix gewähren
In diesem Beispiel wird cloudysanfrancisco@gmail.com die Rolle "BigQuery Data Owner" für alle Tabellen, Modelle und Routinen in allen Datasets zugewiesen, die mit dem Präfix general_ beginnen:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables general_", "description": "Allowed owner access to tables in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Table } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Models general_", "description": "Allowed owner access to models in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Model } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Routines general_", "description": "Allowed owner access to routines in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Routine } }
Nächste Schritte
- Weitere Informationen zum Konfigurieren des temporären Zugriffs mit IAM-Bedingungen
- Weitere Informationen zum Konfigurieren des ressourcenbasierten Zugriffs mit IAM-Bedingungen