Zugriff mit IAM Conditions steuern
In diesem Dokument wird beschrieben, wie Sie mit IAM Conditions den Zugriff auf BigQuery-Ressourcen steuern.
Mit IAM Conditions können Sie nur dann Zugriff auf BigQuery-Ressourcen gewähren, wenn die angegebenen Bedingungen erfüllt sind. Sie können beispielsweise für eine begrenzte Dauer oder für bestimmte Stunden des Tages Zugriff auf eine Ressource gewähren. Sie können IAM-Bedingungen auf Organisations-, Ordner-, Projekt- und Datasetebene hinzufügen. Zulassungsrichtlinien mit Bedingungen werden von untergeordneten Ressourcen übernommen. Weitere Informationen zu Ressourcenebenen finden Sie unter Ressourcenhierarchien.
IAM-Bedingungen sind nützlich, um vielen zugehörigen Ressourcen gleichzeitig IAM-Berechtigungen (Identity and Access Management) zuzuweisen. Dies gilt auch für Ressourcen, die noch nicht vorhanden sind. Wenn Sie Berechtigungen für unterschiedliche Gruppen von BigQuery-Ressourcen gewähren möchten, können Sie IAM-Tags 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 Conditions auf BigQuery-Ressourcen benötigen:
-
Für Projekte:
Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin
) -
Für Datensätze:
BigQuery-Dateninhaber (
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 Conditions auf BigQuery-Ressourcen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen 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 Datensätze festlegen:
-
bigquery.datasets.setIamPolicy
-
bigquery.datasets.update
-
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Wenn Sie IAM Conditions 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
Richtlinien für den bedingten Zugriff für einen Datensatz aufrufen
Wählen Sie eine der folgenden Optionen aus:
Console
Rufen Sie die Seite BigQuery auf.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Klicken Sie auf > Berechtigungen.
FreigabeKlicken Sie neben der verknüpften Rolle auf condition:
TITLE
, um die Bedingung für diese Rolle aufzurufen.
bq
Wenn Sie Richtlinien für den 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 Datensatzes mit Bedingungen aufrufen möchten, rufen Sie datasets.get
mit accessPolicyVersion=3
als Anfrageparameter auf.
Die Property access
in der Datensatzressource enthält die Zugriffsrichtlinie.
Bedingten Zugriff auf Ressourcen ändern
In den folgenden Abschnitten wird beschrieben, wie Sie den bedingten Zugriff auf verschiedene Ressourcen hinzufügen oder entfernen.
Bedingungen für eine Organisation, einen Ordner oder ein Projekt hinzufügen
Informationen zum Hinzufügen eines bedingten Zugriffs auf eine Organisation, einen Ordner oder ein Projekt in BigQuery finden Sie unter Richtlinien mit Bedingungen zulassen. Berücksichtigen Sie beim Erstellen der Bedingungen auf die Attributformattabellen.
Bedingten Zugriff auf Dataset hinzufügen
Wählen Sie eine der folgenden Methoden aus, um einem Datensatz Bedingungen hinzuzufügen. Berücksichtigen Sie beim Erstellen der Bedingungen auf die Attributformattabellen.
Console
Rufen Sie die Seite BigQuery auf.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Klicken Sie im Detailbereich auf > Berechtigungen.
FreigabeKlicken 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
condition
mithilfe der Attributbedingungen Bedingungen hinzu.Klicken Sie im Bereich IAM-Bedingung hinzufügen auf Speichern.
Klicken Sie im Bereich Zugriff für
DATASET
gewähren auf Speichern.
bq
Wenn Sie Richtlinien für den 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 mit Cloud Shell bedingten Zugriff auf ein Dataset gewähren möchten, folgen Sie der Anleitung unter Zugriff auf ein Dataset gewähren.
Sie können die Bedingungen für den bedingten Zugriff im Abschnitt access
der JSON-Datei des Datensatzes hinzufügen.
Wenn Sie beispielsweise dem Abschnitt access
der JSON-Datei eines Datensatzes Folgendes hinzufügen, wird 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 mit der BigQuery API bedingten Zugriff auf ein Dataset gewähren möchten, folgen Sie der Anleitung zum Gewähren von Zugriff auf ein Dataset und verwenden Sie accessPolicyVersion=3
im Anfrageparameter.
Sie können dem Attribut access.condition
der Datensatzressource Einträge mit Zugriffsbedingungen hinzufügen.
Bei Datensätzen mit Richtlinien für den bedingten Zugriff können Nutzer die Einstellungen für den uneingeschränkten Zugriff mit den Standardabläufen zum Lesen, Ändern und Aktualisieren aktualisieren, ohne den Anfrageparameter accessPolicyVersion
anzugeben.
Bedingten Zugriff von Datasets entfernen
Wählen Sie eine der folgenden Methoden aus, um Bedingungen aus einem Datensatz zu entfernen. Berücksichtigen Sie beim Erstellen der Bedingungen auf die Attributformattabellen.
Console
Rufen Sie die Seite BigQuery auf.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Klicken Sie im Detailbereich auf > Berechtigungen.
FreigabeWä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 den 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 Datensatzes entfernen.
API
Wenn Sie den bedingten Zugriff auf einen Datensatz mit der BigQuery API widerrufen möchten, folgen Sie der Anleitung zum Widerrufen des Zugriffs auf einen Datensatz und geben Sie accessPolicyVersion=3
in den Anfrageparameter ein.
Sie können Einträge mit Bedingungen aus der Property access
der Dataset-Ressource entfernen.
Bei Datensätzen mit Richtlinien für den bedingten Zugriff können Nutzer die Einstellungen für den uneingeschränkten Zugriff mit den Standardabläufen zum Lesen, Ändern und Aktualisieren aktualisieren, ohne den Anfrageparameter accessPolicyVersion
anzugeben.
Bedingungsattribute
Sie können IAM Conditions 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 Google Cloud Dienst, der von der BigQuery-Ressource verwendet wird. 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, für
resource.type
,resource.name
undresource.service
positive Bedingungen zu 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 auf Ressourcen im Dataset angewendet werden, z. B. Tabellen, Ansichten, Modelle und Routinen.
Sie sollten nicht verwendet werden, um Rollen zu gewähren, die auf Dataset- oder Projektebene ausgeführt werden, z. B.
bigquery.user
oderbigquery.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. Mit diesem Attribut wird der Zugriff auf untergeordnete Dataset-Ressourcen wie Tabellen, Ansichten, Abläufe und Modelle gesteuert. - Fügen Sie
resource.type
,resource.name
undresource.service
in 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.startsWith
ist mit Vorsicht zu verwenden. BigQuery-Tabelle- und ‑Ansichtspfaden werden durch die ID des übergeordneten Projekts und die Dataset-ID eingeleitet. Nicht ausreichend spezifische Bedingungen können zu viel Zugriff gewähren. Mit dem Attributresource.name.startsWith
können Sie Nutzern jedoch die Möglichkeit geben, Platzhalterabfragen auf 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 sorgfältig, 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
accessPolicyVersion
verwendet wird, enthalten die Bindungen möglicherweisewithcond
gefolgt von einem Hashwert. Weitere Informationen finden Sie unter Fehlerbehebung beiwithcond
in 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 Conditions 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 mit nur bedingtem Tabellenzugriff können keine Tabellenplatzhalter-Funktionen ausführen.
Beispiele
Die folgenden Beispiele zeigen Anwendungsfälle für IAM Conditions 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 Conditions
- Weitere Informationen zum Konfigurieren des ressourcenbasierten Zugriffs mit IAM Conditions