Zugriff auf Ressourcen mit IAM steuern
In diesem Dokument wird beschrieben, wie Sie die aktuelle Zugriffsrichtlinie einer Ressource aufrufen, Zugriff auf eine Ressource gewähren und den Zugriff auf eine Ressource widerrufen.
In diesem Dokument wird davon ausgegangen, dass Sie mit dem IAM-System (Identity and Access Management) in Google Cloud vertraut sind.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Dateninhaber (roles/bigquery.dataOwner
) für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ändern von IAM-Richtlinien für 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 Berechtigungen, die zum Ändern von IAM-Richtlinien für Ressourcen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um IAM-Richtlinien für Ressourcen zu ändern:
-
bigquery.datasets.get
-
bigquery.datasets.update
-
So rufen Sie die Zugriffsrichtlinie eines Datasets ab (nur Google Cloud Console):
bigquery.datasets.getIamPolicy
-
So legen Sie die Zugriffsrichtlinie eines Datasets (nur Konsole) fest:
bigquery.datasets.setIamPolicy
-
bigquery.tables.getIamPolicy
-
bigquery.tables.setIamPolicy
-
So erstellen Sie das bq-Tool oder SQL BigQuery-Jobs (optional):
bigquery.jobs.create
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Zugriffsrichtlinie einer Ressource aufrufen
In den folgenden Abschnitten wird beschrieben, wie Sie die Zugriffsrichtlinien verschiedener Ressourcen aufrufen.
Zugriffsrichtlinie eines Datasets 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.
FreigabeDie Richtlinien für den Dataset-Zugriff werden im Bereich Dataset-Berechtigungen angezeigt.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verwenden Sie in Cloud Shell den Befehl
bq show
, um eine vorhandene Richtlinie 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
API
Rufen Sie datasets.insert
mit einer definierten dataset resource
auf, um Zugriffssteuerungen anzuwenden, wenn das Dataset erstellt wird.
Rufen Sie zum Aktualisieren Ihrer Zugriffssteuerungen datasets.patch
auf und verwenden Sie das Attribut access
in der Ressource Dataset
.
Da die Methode datasets.update
die gesamte Dataset-Ressource ersetzt, ist datasets.patch
die bevorzugte Methode zum Aktualisieren von Zugriffssteuerungen.
Zugriffsrichtlinie einer Tabelle oder Ansicht 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 eine Tabelle oder Ansicht aus.
Klicken Sie auf
Freigeben.Die Zugriffsrichtlinien für eine Tabelle oder Ansicht werden im Bereich Freigeben angezeigt.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verwenden Sie in Cloud Shell den Befehl
bq get-iam-policy
, um eine vorhandene Zugriffsrichtlinie abzurufen und in eine lokale Datei in JSON auszugeben:bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID
- DATASET: der Name Ihres Datasets
- RESOURCE: der Name der Tabelle oder Ansicht, deren Richtlinie Sie aufrufen möchten
- PATH_TO_FILE: der Pfad zur JSON-Datei auf dem lokalen Computer
API
Rufen Sie die Methode tables.getIamPolicy
auf, um die aktuelle Richtlinie abzurufen.
Zugriff auf eine Ressource gewähren
In den folgenden Abschnitten wird beschrieben, wie Sie Zugriff auf verschiedene Ressourcen gewähren.
Zugriff auf ein Dataset gewähren
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 für die Freigabe aus.
Klicken Sie 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 Speichern.
Klicken Sie auf Schließen, um zu den Dataset-Informationen zurückzukehren.
SQL
Verwenden Sie die DCL-Anweisung GRANT
, um Hauptkonten Zugriff auf Datasets zu gewähren:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
Ersetzen Sie Folgendes:
ROLE_LIST
: eine Rolle oder Liste mit durch Kommas getrennten Rollen, die Sie widerrufen möchtenRESOURCE_NAME
: der Name der Ressource, für die Sie die Berechtigung gewähren möchtenUSER_LIST
: eine durch Kommas getrennte Liste von Nutzern, denen die Rolle zugewiesen wirdEine Liste der gültigen Formate finden Sie unter
user_list
.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Im folgenden Beispiel wird die Rolle „Data Viewer“ für das Dataset myDataset
zugewiesen:
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verwenden Sie den Befehl
bq show
, um die vorhandenen Dataset-Informationen (einschließlich Zugriffssteuerungen) in eine JSON-Datei zu schreiben: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
Nehmen Sie die Änderungen im Abschnitt
access
der JSON-Datei vor. Sie können jeden derspecialGroup
-Einträge verwenden:projectOwners
,projectWriters
,projectReaders
undallAuthenticatedUsers
. Sie können auch eine der folgenden Optionen hinzufügen:userByEmail
,groupByEmail
unddomain
.Der Abschnitt
access
der JSON-Datei eines Datasets sieht zum Beispiel so aus:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Wenn die Änderungen abgeschlossen sind, führen Sie den Befehl
bq update
aus und fügen mit dem Flag--source
die JSON-Datei hinzu. Wenn sich das Dataset in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:PROJECT_ID:DATASET
.bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
Geben Sie den Befehl
bq show
noch einmal ein, ohne die Informationen in eine Datei zu schreiben, um die Änderungen der Zugriffssteuerung zu prüfen:bq show --format=prettyjson PROJECT_ID:DATASET
Terraform
Verwenden Sie die google_bigquery_dataset_iam
-Ressourcen, um den Zugriff auf ein Dataset zu aktualisieren.
Zugriffsrichtlinie für ein Dataset abrufen
Das folgende Beispiel zeigt, wie Sie mit der Ressource google_bigquery_dataset_iam_policy
die IAM-Richtlinie für das Dataset mydataset
festlegen. Dadurch werden alle vorhandenen Richtlinien ersetzt, die bereits an das Dataset angehängt sind:
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:hao@altostrat.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:dba@altostrat.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Rollenmitgliedschaft für ein Dataset festlegen
Das folgende Beispiel zeigt, wie Sie mit der Ressource google_bigquery_dataset_iam_binding
die Mitgliedschaft in einer bestimmten Rolle für das Dataset mydataset
festlegen. Dadurch wird jede vorhandene Mitgliedschaft in dieser Rolle ersetzt.
Andere Rollen innerhalb der IAM-Richtlinie für das Dataset bleiben erhalten:
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:raha@altostrat.com", "group:analysts@altostrat.com" ] }
Rollenmitgliedschaft für ein einzelnes Hauptkonto festlegen
Das folgende Beispiel zeigt, wie Sie mit der Ressource google_bigquery_dataset_iam_member
die IAM-Richtlinie für das Dataset mydataset
aktualisieren, um einem Hauptkonto eine Rolle zuzuweisen. Das Aktualisieren dieser IAM-Richtlinie wirkt sich nicht auf den Zugriff für andere Hauptkonten aus, denen diese Rolle für das Dataset zugewiesen wurde.
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:yuri@altostrat.com" }
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.
Verzeichnis vorbereiten
Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).
-
Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung
.tf
haben, z. B.main.tf
. In dieser Anleitung wird die Datei alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf
.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
terraform init
Fügen Sie optional die Option
-upgrade
ein, um die neueste Google-Anbieterversion zu verwenden:terraform init -upgrade
Änderungen anwenden
-
Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
terraform plan
Korrigieren Sie die Konfiguration nach Bedarf.
-
Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie
yes
an der Eingabeaufforderung ein:terraform apply
Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.
- Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
API
Rufen Sie die Methode datasets.insert
mit einer definierten Dataset-Ressource auf, um Zugriffssteuerungen anzuwenden, wenn das Dataset erstellt wird.
Rufen Sie zum Aktualisieren Ihrer Zugriffssteuerungen die Methode datasets.patch
auf und verwenden Sie das Attribut access
in der Ressource Dataset
.
Da die Methode datasets.update
die gesamte Dataset-Ressource ersetzt, ist datasets.patch
die bevorzugte Methode zum Aktualisieren von Zugriffssteuerungen.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Legen Sie das Attributdataset.access_entries
mit den Zugriffssteuerungen für ein Dataset fest. Rufen Sie dann die Funktion client.update_dataset()
auf, um das Attribut zu aktualisieren.
Zugriff auf eine Tabelle oder Ansicht gewähren
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 eine Tabelle oder Ansicht aus, die Sie freigeben möchten.
Klicken Sie auf
Freigeben.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 Speichern.
Klicken Sie auf Schließen, um zu den Tabellen- oder Ansichtsdetails zurückzukehren.
SQL
Verwenden Sie die DCL-Anweisung GRANT
, um Hauptkonten Zugriff auf Tabellen oder Ansichten zu gewähren:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
Ersetzen Sie Folgendes:
ROLE_LIST
: eine Rolle oder Liste mit durch Kommas getrennten Rollen, die Sie widerrufen möchtenRESOURCE_TYPE
: der Ressourcentyp, auf den die Rolle angewendet wirdUnterstützte Werte sind:
TABLE
,VIEW
,MATERIALIZED VIEW
undEXTERNAL TABLE
.RESOURCE_NAME
: der Name der Ressource, für die Sie die Berechtigung gewähren möchtenUSER_LIST
: eine durch Kommas getrennte Liste von Nutzern, denen die Rolle zugewiesen wirdEine Liste der gültigen Formate finden Sie unter
user_list
.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Im folgenden Beispiel wird die Rolle „Data Viewer“ für die Tabelle myTable
zugewiesen:
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verwenden Sie den Befehl
bq get-iam-policy
, um die vorhandenen Tabellen- oder Ansichtsinformationen (einschließlich Zugriffssteuerungen) in eine JSON-Datei zu schreiben:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID
- DATASET: der Name des Datasets, das die zu aktualisierende Tabelle oder Ansicht enthält
- TABLE_OR_VIEW: der Name der Ressource, die aktualisiert werden soll
- PATH_TO_FILE: der Pfad zur JSON-Datei auf dem lokalen Computer
Nehmen Sie die Änderungen im Abschnitt
bindings
der JSON-Datei vor. Eine Bindung bindet ein oder mehreremembers
oder Hauptkonten an eine einzelnerole
. Hauptkonten können Nutzerkonten, Dienstkonten, Google-Gruppen und Domains sein. Der Abschnittbindings
der JSON-Datei einer Tabelle oder Ansicht sieht beispielsweise so aus:{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
Aktualisieren Sie Ihre Zugriffsrichtlinie mit dem Befehl
bq set-iam-policy
.bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
Geben Sie den Befehl
bq get-iam-policy
noch einmal ein, ohne die Informationen in eine Datei zu schreiben, um die Änderungen der Zugriffssteuerung zu prüfen:bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
Terraform
Verwenden Sie die google_bigquery_table_iam
-Ressourcen, um den Zugriff auf eine Tabelle zu aktualisieren.
Zugriffsrichtlinie für ein Dataset festlegen
Das folgende Beispiel zeigt, wie Sie mit der Ressource google_bigquery_table_iam_policy
die IAM-Richtlinie für die Tabelle mytable
festlegen. Dadurch werden alle vorhandenen Richtlinien ersetzt, die bereits an die Tabelle angehängt sind:
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:raha@altostrat.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
Rollenmitgliedschaft für eine Tabelle festlegen
Das folgende Beispiel zeigt, wie Sie mit der Ressource google_bigquery_table_iam_binding
die Mitgliedschaft in einer bestimmten Rolle für die Tabelle mytable
festlegen. Dadurch wird jede vorhandene Mitgliedschaft in dieser Rolle ersetzt.
Andere Rollen innerhalb der IAM-Richtlinie für die Tabelle bleiben erhalten.
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:analysts@altostrat.com", ] }
Rollenmitgliedschaft für ein einzelnes Hauptkonto festlegen
Das folgende Beispiel zeigt, wie Sie mit der Ressource google_bigquery_table_iam_member
die IAM-Richtlinie für die Tabelle mytable
aktualisieren, um einem Hauptkonto eine Rolle zuzuweisen. Das Aktualisieren dieser IAM-Richtlinie wirkt sich nicht auf den Zugriff anderer Hauptkonten aus, denen diese Rolle für das Dataset zugewiesen wurde.
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.
Verzeichnis vorbereiten
Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).
-
Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung
.tf
haben, z. B.main.tf
. In dieser Anleitung wird die Datei alsmain.tf
bezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf
.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
terraform init
Fügen Sie optional die Option
-upgrade
ein, um die neueste Google-Anbieterversion zu verwenden:terraform init -upgrade
Änderungen anwenden
-
Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
terraform plan
Korrigieren Sie die Konfiguration nach Bedarf.
-
Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie
yes
an der Eingabeaufforderung ein:terraform apply
Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.
- Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
API
- Rufen Sie die Methode
tables.getIamPolicy
auf, um die aktuelle Richtlinie abzurufen. Bearbeiten Sie die Richtlinie, um Mitglieder und/oder Bindungen hinzuzufügen. Das für die Richtlinie erforderliche Format finden Sie im Referenzthema Richtlinien.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Zugriff auf eine Ressource widerrufen
In den folgenden Abschnitten wird beschrieben, wie Sie den Zugriff auf verschiedene Ressourcen widerrufen.
Zugriff auf ein Dataset widerrufen
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 im Detailbereich auf Freigabe > Berechtigungen.
Erweitern Sie im Dialogfeld Dataset-Berechtigungen das Hauptkonto, dessen Zugriff Sie widerrufen möchten.
Klicken Sie auf
Hauptkonto entfernen.Klicken Sie im Dialogfeld Rolle aus Hauptkonto entfernen? auf Entfernen.
Klicken Sie auf Schließen, um zu den Dataset-Details zurückzukehren.
SQL
Verwenden Sie die DCL-Anweisung REVOKE
, um den Zugriff auf Datasets aus Hauptkonten zu entfernen:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
Ersetzen Sie Folgendes:
ROLE_LIST
: eine Rolle oder Liste mit durch Kommas getrennten Rollen, die Sie widerrufen möchtenRESOURCE_NAME
: der Name der Ressource, für die Sie die Berechtigung widerrufen möchtenUSER_LIST
: eine durch Kommas getrennte Liste von Nutzern, denen ihre Rollen entzogen werden.Eine Liste der gültigen Formate finden Sie unter
user_list
.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Im folgenden Beispiel wird die Administratorrolle für das Dataset myDataset
widerrufen:
REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verwenden Sie den Befehl
bq show
, um die vorhandenen Dataset-Informationen (einschließlich Zugriffssteuerungen) in eine JSON-Datei zu schreiben: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
Nehmen Sie die Änderungen im Abschnitt
access
der JSON-Datei vor. Sie können allespecialGroup
-Einträge entfernen:projectOwners
,projectWriters
,projectReaders
undallAuthenticatedUsers
. Sie können auch die folgenden Elemente entfernen:userByEmail
,groupByEmail
unddomain
.Der Abschnitt
access
der JSON-Datei eines Datasets sieht zum Beispiel so aus:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Wenn die Änderungen abgeschlossen sind, führen Sie den Befehl
bq update
aus und fügen mit dem Flag--source
die JSON-Datei hinzu. Wenn sich das Dataset in einem anderen Projekt als Ihrem Standardprojekt befindet, fügen Sie dem Dataset-Namen die Projekt-ID im folgenden Format hinzu:PROJECT_ID:DATASET
.bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
Geben Sie den Befehl
show
noch einmal ein, ohne die Informationen in eine Datei zu schreiben, um die Änderungen der Zugriffssteuerung zu prüfen:bq show --format=prettyjson PROJECT_ID:DATASET
API
Rufen Sie datasets.patch
auf und verwenden Sie das Attribut access
in der Ressource Dataset
, um die Zugriffssteuerungen zu aktualisieren.
Da die Methode datasets.update
die gesamte Dataset-Ressource ersetzt, ist datasets.patch
die bevorzugte Methode zum Aktualisieren von Zugriffssteuerungen.
Go
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Python
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Python API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Legen Sie das Attributdataset.access_entries
mit den Zugriffssteuerungen für ein Dataset fest. Rufen Sie dann die Funktion client.update_dataset()
auf, um das Attribut zu aktualisieren.
Zugriff auf eine Tabelle oder Ansicht aufheben
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 eine Tabelle oder Ansicht aus.
Klicken Sie im Detailbereich auf Freigeben.
Erweitern Sie im Dialogfeld Freigeben das Hauptkonto, dessen Zugriff Sie widerrufen möchten.
Klicken Sie auf
Löschen.Klicken Sie im Dialogfeld Rolle aus Hauptkonto entfernen? auf Entfernen.
Klicken Sie auf Schließen, um zu den Tabellen- oder Ansichtsdetails zurückzukehren.
SQL
Verwenden Sie die DCL-Anweisung REVOKE
, um den Zugriff auf Tabellen oder Ansichten aus Hauptkonten zu entfernen:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
Ersetzen Sie Folgendes:
ROLE_LIST
: eine Rolle oder Liste mit durch Kommas getrennten Rollen, die Sie widerrufen möchtenRESOURCE_TYPE
: der Ressourcentyp, von dem die Rolle widerrufen wirdUnterstützte Werte sind:
TABLE
,VIEW
,MATERIALIZED VIEW
undEXTERNAL TABLE
.RESOURCE_NAME
: der Name der Ressource, für die Sie die Berechtigung widerrufen möchtenUSER_LIST
: eine durch Kommas getrennte Liste von Nutzern, denen ihre Rollen entzogen werden.Eine Liste der gültigen Formate finden Sie unter
user_list
.
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
Im folgenden Beispiel wird die Administratorrolle für die Tabelle myTable
widerrufen:
REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verwenden Sie den Befehl
bq get-iam-policy
, um die vorhandenen Tabellen- oder Ansichtsinformationen (einschließlich Zugriffssteuerungen) in eine JSON-Datei zu schreiben:bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID
- DATASET: der Name des Datasets, das die zu aktualisierende Tabelle oder Ansicht enthält
- TABLE_OR_VIEW: der Name der Ressource, die aktualisiert werden soll
PATH_TO_FILE: der Pfad zur JSON-Datei auf dem lokalen Computer
Nehmen Sie die Änderungen im Abschnitt
access
der JSON-Datei vor. Sie können allespecialGroup
-Einträge entfernen:projectOwners
,projectWriters
,projectReaders
undallAuthenticatedUsers
. Sie können auch die folgenden Elemente entfernen:userByEmail
,groupByEmail
unddomain
. Der Abschnittaccess
der JSON-Datei einer Tabelle oder Ansicht sieht beispielsweise so aus:{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
Aktualisieren Sie Ihre Zugriffsrichtlinie mit dem Befehl
bq set-iam-policy
.bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
Geben Sie den Befehl
get-iam-policy
noch einmal ein, ohne die Informationen in eine Datei zu schreiben, um die Änderungen der Zugriffssteuerung zu prüfen:bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- Rufen Sie die Methode
tables.getIamPolicy
auf, um die aktuelle Richtlinie abzurufen. Bearbeiten Sie die Richtlinie, um Mitglieder und/oder Bindungen zu entfernen. Das für die Richtlinie erforderliche Format finden Sie im Referenzthema Richtlinien.
Rufen Sie
tables.setIamPolicy
auf, um die aktualisierte Richtlinie zu erstellen. Hinweis: Leere Bindungen ohne Mitglieder sind nicht zulässig und führen zu einem Fehler.
Java
Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Java API.
Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.
Zugriff auf eine Ressource verweigern
Mit IAM-Ablehnungsrichtlinien können Sie Leitlinien für den Zugriff auf BigQuery-Ressourcen festlegen. Sie können Ablehnungsregeln definieren, die verhindern, dass ausgewählte Hauptkonten bestimmte Berechtigungen verwenden, unabhängig von den ihnen zugewiesenen Rollen.
Informationen zum Erstellen, Aktualisieren und Löschen von Ablehnungsrichtlinien finden Sie unter Zugriff auf Ressourcen verweigern.
Sonderfälle
Beachten Sie die folgenden Szenarien, wenn Sie IAM-Ablehnungsrichtlinien für einige BigQuery-Berechtigungen erstellen:
Wenn Sie auf autorisierte Ressourcen (Ansichten, Routinen, Datasets oder Speicherprozeduren) zugreifen, können Sie Tabellen erstellen, löschen oder bearbeiten sowie Tabellendaten lesen und ändern, auch wenn Sie keine direkte Berechtigung zum Ausführen dieser Vorgänge haben. Sie können außerdem Modelldaten oder Metadaten abrufen und andere gespeicherte Prozeduren für die zugrunde liegende Tabelle aufrufen. Diese Funktion setzt voraus, dass die autorisierten Ressourcen die folgenden Berechtigungen haben:
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
Wenn Sie den Zugriff auf diese autorisierten Ressourcen verweigern möchten, fügen Sie beim Erstellen der Ablehnungsrichtlinie einen der folgenden Werte in das Feld
deniedPrincipal
ein:Wert Anwendungsfall principalSet://goog/public:all
Blockiert alle Hauptkonten, einschließlich autorisierter Ressourcen. principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
Blockiert alle autorisierten BigQuery-Ressourcen im angegebenen Projekt. PROJECT_NUMBER
ist eine automatisch generierte eindeutige Kennung für Ihr Projekt vom TypINT64
.BigQuery speichert Abfrageergebnisse eines Jobinhabers 24 Stunden lang im Cache. Der Jobinhaber kann darauf zugreifen, ohne die Berechtigung
bigquery.tables.getData
für die Tabelle mit den Daten zu benötigen. Daher wird durch das Hinzufügen einer IAM-Ablehnungsrichtlinie zur Berechtigungbigquery.tables.getData
der Zugriff auf im Cache gespeicherte Ergebnisse für den Jobinhaber erst blockiert, wenn der Cache abläuft. Wenn Sie dem Jobinhaber den Zugriff auf die im Cache gespeicherten Ergebnisse sperren möchten, erstellen Sie eine separate Ablehnungsrichtlinie für diebigquery.jobs.create
-Berechtigung.