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.

API aktivieren

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 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.

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

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

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ähren
  • DATASET_ID: die ID des Datasets, auf das Sie Zugriff gewähren
  • TABLE_ID: die ID der Tabelle, auf die Sie Zugriff gewähren
  • ROUTINE_ID: die ID der Routine, auf die Sie Zugriff gewähren
  • MODEL_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 oder resource.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 und resource.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.
  • Seien Sie vorsichtig, wenn Sie in Ihrer Bedingung den Ausdruck resource.name.startsWith verwenden, da BigQuery-Tabellenpfaden die ID des übergeordneten Projekts und die Dataset-ID vorangestellt wird. Nicht ausreichend spezifische Bedingungen können zu umfassenden Zugriff gewähren. Der Ausdruck resource.name.startsWith ist jedoch nützlich, wenn Sie Ihren Nutzern die Möglichkeit geben möchten, Platzhalterabfragen auszuführen. Mit der Bedingung resource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix") können Nutzer beispielsweise die Abfrage SELECT * 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 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 Erstellen von Ressourcen (bigquery.RESOURCE.create) 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 oder autorisierte Routinen 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.

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