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. IAM Conditions werden auf Projekt-, Ordner- und Organisationsebene unterstützt und können auf BigQuery-Datasets, -Tabellen, -Routinen und -Modelle angewendet werden.
IAM Conditions 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.
Hinweise
Aktivieren Sie die IAM API und weisen Sie IAM-Rollen zu, die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument gewähren.
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
Erforderliche Berechtigungen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Project IAM Admin (roles/resourcemanager.projectIamAdmin
) zu gewähren, um die Berechtigung zu erhalten, die Sie zum Anwenden von IAM Conditions auf BigQuery-Ressourcen benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigung resourcemanager.projects.setIamPolicy
, die erforderlich ist, um IAM Conditions auf BigQuery-Ressourcen anzuwenden.
Sie können diese Berechtigung 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.
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 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 und -Tabellenressourcen 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 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, 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
Bedingungen zu einer Ressource hinzufügen
Informationen zum Hinzufügen einer Bedingung zu einem Dataset, einer Tabelle, einer Routine oder einem Modell in BigQuery finden Sie unter Richtlinien mit Bedingungen zulassen. Berücksichtigen Sie beim Erstellen der Bedingungen auf die Attributformattabellen.
Best Practices für Bedingungen
Beachten Sie beim Erstellen von Bedingungen in BigQuery die folgenden Best Practices:
- Verwenden Sie keine negativen Bedingungen für
resource.type
,resource.name
oderresource.service
, da nicht unterstützte Typen den leeren String verwenden und fast alle negativen Bedingungen erfüllen. Weitere Informationen finden Sie unter negative Bedingungen. - 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-Tabellenpfaden werden die ID des übergeordneten Projekts und die Dataset-ID vorangestellt. Unzureichend spezifische Bedingungen gewähren möglicherweise zu viel Zugriff. Sie können jedoch das Attributresource.name.startsWith
verwenden, damit Nutzer Platzhalterabfragen ausführen können. Beispiel: Wenn der Zugriff mit der Bedingungresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")
gewährt wird, können Nutzer die AbfrageSELECT * FROM my_dataset.table_prefix*
ausführen.- Fügen Sie keine Bedingungen für BigQuery-Ressourcen außer Datasets, Tabellen, 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 Conditions keine Berechtigungen für autorisierte Ansichten, autorisierte Routinen oder autorisierte Datasets hinzufügen.
- Wenn ein Nutzer bedingten Zugriff auf ein Dataset oder eine Tabelle hat, kann er die Berechtigungen für diese Ressource nicht über die Google Cloud Console ändern. Nur das bq-Tool und die API werden 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