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: zum Abrufen der Zugriffsrichtlinie eines Datasets.
  • bigquery.datasets.update: zum Abrufen der Zugriffsrichtlinie eines Datasets.
  • 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: zum Abrufen der Zugriffsrichtlinie einer Tabelle oder Ansicht.
  • bigquery.tables.setIamPolicy: zum Festlegen der Zugriffsrichtlinie einer Tabelle oder Ansicht.
  • 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

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.

  3. Klicken Sie auf Freigabe > Berechtigungen.

    Die Richtlinien für den Dataset-Zugriff werden im Bereich Dataset-Berechtigungen angezeigt.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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 die Zugriffsrichtlinie eines Datensatzes auf, indem Sie die Methode datasets.get mit einer definierten dataset-Ressource aufrufen.

Die Richtlinie ist im Attribut access der zurückgegebenen Ressource dataset verfügbar.

Zugriffsrichtlinie einer Tabelle oder Ansicht aufrufen

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie eine Tabelle oder Ansicht aus.

  3. Klicken Sie auf Freigeben.

    Die Zugriffsrichtlinien für eine Tabelle oder Ansicht werden im Bereich Freigeben angezeigt.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    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.

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

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset für die Freigabe aus.

  3. Klicken Sie auf Freigabe > Berechtigungen.

  4. Klicken Sie auf Hauptkonto hinzufügen.

  5. Geben Sie im Feld Neue Hauptkonten ein Hauptkonto ein.

  6. Wählen Sie in der Liste Rolle auswählen eine vordefinierte oder eine benutzerdefinierte Rolle aus.

  7. Klicken Sie auf Speichern.

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

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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öchten
    • RESOURCE_NAME: der Name der Ressource, für die Sie die Berechtigung gewähren möchten
    • USER_LIST: eine durch Kommas getrennte Liste von Nutzern, denen die Rolle zugewiesen wird

      Eine Liste der gültigen Formate finden Sie unter user_list.

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

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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
  3. Nehmen Sie die Änderungen im Abschnitt access der JSON-Datei vor. Sie können jeden der specialGroup-Einträge verwenden: projectOwners, projectWriters, projectReaders und allAuthenticatedUsers. Sie können auch eine der folgenden Optionen hinzufügen: userByEmail, groupByEmail und domain.

    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"
      }
     ],
     ...
    }

  4. 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
  5. 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 Ressourcen google_bigquery_dataset_iam, um den Zugriff auf einen Datensatz zu aktualisieren.

Zugriffsrichtlinie für ein Dataset abrufen

Im folgenden Beispiel wird gezeigt, wie Sie die IAM-Richtlinie für das Dataset mydataset mithilfe der Ressource google_bigquery_dataset_iam_policy festlegen. Dadurch werden alle vorhandenen Richtlinien ersetzt, die bereits mit dem Datensatz verknüpft 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

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der Ressource google_bigquery_dataset_iam_binding die Mitgliedschaft in einer bestimmten Rolle für das Dataset mydataset festlegen. Dadurch werden alle vorhandenen Mitgliedschaften in dieser Rolle ersetzt. Andere Rollen in der IAM-Richtlinie für den Datensatz 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

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der Ressource google_bigquery_dataset_iam_member die IAM-Richtlinie für den Datensatz mydataset aktualisieren, um einem Hauptkonto eine Rolle zu gewähren. Das Aktualisieren dieser IAM-Richtlinie hat keine Auswirkungen auf den Zugriff anderer Hauptberechtigter, denen diese Rolle für den Datensatz gewährt 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

  1. Rufen Sie Cloud Shell auf.
  2. 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).

  1. 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 als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. 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

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

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

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

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateDatasetAccessControl demonstrates how the access control policy of a dataset
// can be amended by adding an additional entry corresponding to a specific user identity.
func updateDatasetAccessControl(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}
	// Append a new access control entry to the existing access list.
	update := bigquery.DatasetMetadataToUpdate{
		Access: append(meta.Access, &bigquery.AccessEntry{
			Role:       bigquery.ReaderRole,
			EntityType: bigquery.UserEmailEntity,
			Entity:     "sample.bigquery.dev@gmail.com"},
		),
	}

	// Leverage the ETag for the update to assert there's been no modifications to the
	// dataset since the metadata was originally read.
	if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.Acl;
import com.google.cloud.bigquery.Acl.Role;
import com.google.cloud.bigquery.Acl.User;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.ArrayList;

public class UpdateDatasetAccess {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Create a new ACL granting the READER role to "sample.bigquery.dev@gmail.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    Acl newEntry = Acl.of(new User("sample.bigquery.dev@gmail.com"), Role.READER);

    updateDatasetAccess(datasetName, newEntry);
  }

  public static void updateDatasetAccess(String datasetName, Acl newEntry) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Dataset dataset = bigquery.getDataset(datasetName);

      // Get a copy of the ACLs list from the dataset and append the new entry
      ArrayList<Acl> acls = new ArrayList<>(dataset.getAcl());
      acls.add(newEntry);

      bigquery.update(dataset.toBuilder().setAcl(acls).build());
      System.out.println("Dataset Access Control updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Dataset Access control was not updated \n" + e.toString());
    }
  }
}

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 Attribut dataset.access_entries mit den Zugriffssteuerungen für ein Dataset fest. Rufen Sie dann die Funktion client.update_dataset() auf, um das Attribut zu aktualisieren.

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
dataset_id = "your-project.your_dataset"

# TODO(developer): Set entity_id to the ID of the email or group from whom
# you are adding access. Alternatively, to the JSON REST API representation
# of the entity, such as a view's table reference.
entity_id = "user-or-group-to-add@example.com"

from google.cloud.bigquery.enums import EntityTypes

# TODO(developer): Set entity_type to the type of entity you are granting access to.
# Common types include:
#
# * "userByEmail" -- A single user or service account. For example "fred@example.com"
# * "groupByEmail" -- A group of users. For example "example@googlegroups.com"
# * "view" -- An authorized view. For example
#       {"projectId": "p", "datasetId": "d", "tableId": "v"}
#
# For a complete reference, see the REST API reference documentation:
# https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#Dataset.FIELDS.access
entity_type = EntityTypes.GROUP_BY_EMAIL

# TODO(developer): Set role to a one of the "Basic roles for datasets"
# described here:
# https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
role = "READER"

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

dataset = client.get_dataset(dataset_id)  # Make an API request.

entries = list(dataset.access_entries)
entries.append(
    bigquery.AccessEntry(
        role=role,
        entity_type=entity_type,
        entity_id=entity_id,
    )
)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ["access_entries"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
print(
    "Updated dataset '{}' with modified user permissions.".format(full_dataset_id)
)

Zugriff auf eine Tabelle oder Ansicht gewähren

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie eine Tabelle oder Ansicht aus, die Sie freigeben möchten.

  3. Klicken Sie auf Freigeben.

  4. Klicken Sie auf Hauptkonto hinzufügen.

  5. Geben Sie im Feld Neue Hauptkonten ein Hauptkonto ein.

  6. Wählen Sie in der Liste Rolle auswählen eine vordefinierte oder eine benutzerdefinierte Rolle aus.

  7. Klicken Sie auf Speichern.

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

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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öchten
    • RESOURCE_TYPE: der Ressourcentyp, auf den die Rolle angewendet wird

      Unterstützte Werte sind: TABLE, VIEW, MATERIALIZED VIEW und EXTERNAL TABLE.

    • RESOURCE_NAME: der Name der Ressource, für die Sie die Berechtigung gewähren möchten
    • USER_LIST: eine durch Kommas getrennte Liste von Nutzern, denen die Rolle zugewiesen wird

      Eine Liste der gültigen Formate finden Sie unter user_list.

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

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. Verwenden Sie den Befehl bq add-iam-policy-binding, um Zugriff auf eine Tabelle oder Ansicht zu gewähren:

    bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
     --table=true RESOURCE

    Ersetzen Sie Folgendes:

    • MEMBER_TYPE: der Mitgliedstyp, z. B. user, group, serviceAccount oder domain.
    • MEMBER: die E-Mail-Adresse oder der Domainname des Mitglieds.
    • ROLE: Die Rolle, die Sie dem Mitglied zuweisen möchten.
    • RESOURCE: Der Name der Tabelle oder Ansicht, deren Richtlinie Sie aktualisieren möchten.

Terraform

Verwenden Sie die Ressourcen google_bigquery_table_iam, um den Zugriff auf eine Tabelle zu aktualisieren.

Zugriffsrichtlinie für ein Dataset festlegen

Im folgenden Beispiel wird gezeigt, 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 mit der Tabelle verknüpft 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

Im folgenden Beispiel wird gezeigt, wie Sie mit der google_bigquery_table_iam_binding-Ressource die Mitgliedschaft in einer bestimmten Rolle für die Tabelle mytable festlegen. Dadurch werden alle vorhandenen Mitgliedschaften in dieser Rolle ersetzt. Andere Rollen in 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

Im folgenden Beispiel wird gezeigt, wie Sie mit der Ressource google_bigquery_table_iam_member die IAM-Richtlinie für die Tabelle mytable aktualisieren, um einem Hauptkonto eine Rolle zu gewähren. Das Aktualisieren dieser IAM-Richtlinie hat keine Auswirkungen auf den Zugriff anderer Hauptberechtigter, denen diese Rolle für den Datensatz gewährt 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

  1. Rufen Sie Cloud Shell auf.
  2. 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).

  1. 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 als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. 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

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

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

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

  1. Rufen Sie die Methode tables.getIamPolicy auf, um die aktuelle Richtlinie abzurufen.
  2. Bearbeiten Sie die Richtlinie, um Mitglieder oder Bindungen oder beides hinzuzufügen. Das für die Richtlinie erforderliche Format finden Sie im Referenzthema Richtlinien.

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

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

// Sample to create iam policy for table
public class CreateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    createIamPolicy(datasetName, tableName);
  }

  public static void createIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      policy
          .toBuilder()
          .addIdentity(Role.of("roles/bigquery.dataViewer"), Identity.allUsers())
          .build();
      bigquery.setIamPolicy(tableId, policy);
      System.out.println("Iam policy created successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not created. \n" + e.toString());
    }
  }
}

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.

from google.cloud import bigquery

bqclient = bigquery.Client()

policy = bqclient.get_iam_policy(
    your_table_id,  # e.g. "project.dataset.table"
)

analyst_email = "example-analyst-group@google.com"
binding = {
    "role": "roles/bigquery.dataViewer",
    "members": {f"group:{analyst_email}"},
}
policy.bindings.append(binding)

updated_policy = bqclient.set_iam_policy(
    your_table_id,  # e.g. "project.dataset.table"
    policy,
)

for binding in updated_policy.bindings:
    print(repr(binding))

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

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.

  3. Klicken Sie im Detailbereich auf Freigabe > Berechtigungen.

  4. Erweitern Sie im Dialogfeld Dataset-Berechtigungen das Hauptkonto, dessen Zugriff Sie widerrufen möchten.

  5. Klicken Sie auf Hauptkonto entfernen.

  6. Klicken Sie im Dialogfeld Rolle aus Hauptkonto entfernen? auf Entfernen.

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

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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öchten
    • RESOURCE_NAME: der Name der Ressource, für die Sie die Berechtigung widerrufen möchten
    • USER_LIST: eine durch Kommas getrennte Liste von Nutzern, denen die Rollen entzogen werden

      Eine Liste der gültigen Formate finden Sie unter user_list.

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

Im folgenden Beispiel wird die Rolle „Administrator“ 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

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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
  3. Nehmen Sie die Änderungen im Abschnitt access der JSON-Datei vor. Sie können alle specialGroup-Einträge entfernen: projectOwners, projectWriters, projectReaders und allAuthenticatedUsers. Sie können auch die folgenden Elemente entfernen: userByEmail, groupByEmail und domain.

    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"
      }
     ],
     ...
    }

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

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// revokeDatasetAccess updates the access control on a dataset to remove all
// access entries that reference a specific entity.
func revokeDatasetAccess(projectID, datasetID, entity string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// entity := "user@mydomain.com"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	meta, err := ds.Metadata(ctx)
	if err != nil {
		return err
	}

	var newAccessList []*bigquery.AccessEntry
	for _, entry := range meta.Access {
		if entry.Entity != entity {
			newAccessList = append(newAccessList, entry)
		}
	}

	// Only proceed with update if something in the access list was removed.
	// Additionally, we use the ETag from the initial metadata to ensure no
	// other changes were made to the access list in the interim.
	if len(newAccessList) < len(meta.Access) {

		update := bigquery.DatasetMetadataToUpdate{
			Access: newAccessList,
		}
		if _, err := ds.Update(ctx, update, meta.ETag); err != nil {
			return err
		}
	}
	return nil
}

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 Attribut dataset.access_entries mit den Zugriffssteuerungen für ein Dataset fest. Rufen Sie dann die Funktion client.update_dataset() auf, um das Attribut zu aktualisieren.

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
dataset_id = "your-project.your_dataset"

# TODO(developer): Set entity_id to the ID of the email or group from whom you are revoking access.
entity_id = "user-or-group-to-remove@example.com"

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

dataset = client.get_dataset(dataset_id)  # Make an API request.

entries = list(dataset.access_entries)
dataset.access_entries = [
    entry for entry in entries if entry.entity_id != entity_id
]

dataset = client.update_dataset(
    dataset,
    # Update just the `access_entries` property of the dataset.
    ["access_entries"],
)  # Make an API request.

full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
print(f"Revoked dataset access for '{entity_id}' to ' dataset '{full_dataset_id}.'")

Zugriff auf eine Tabelle oder Ansicht aufheben

Wählen Sie eine der folgenden Optionen aus:

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie eine Tabelle oder Ansicht aus.

  3. Klicken Sie im Detailbereich auf Freigeben.

  4. Erweitern Sie im Dialogfeld Freigeben das Hauptkonto, dessen Zugriff Sie widerrufen möchten.

  5. Klicken Sie auf Löschen.

  6. Klicken Sie im Dialogfeld Rolle aus Hauptkonto entfernen? auf Entfernen.

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

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. 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öchten
    • RESOURCE_TYPE: der Ressourcentyp, von dem die Rolle widerrufen wird

      Unterstützte Werte sind: TABLE, VIEW, MATERIALIZED VIEW und EXTERNAL TABLE.

    • RESOURCE_NAME: der Name der Ressource, für die Sie die Berechtigung widerrufen möchten
    • USER_LIST: eine durch Kommas getrennte Liste von Nutzern, denen die Rollen entzogen werden

      Eine Liste der gültigen Formate finden Sie unter user_list.

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

Im folgenden Beispiel wird die Rolle „Administrator“ 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

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. Verwenden Sie den Befehl bq remove-iam-policy-binding, um den Zugriff auf eine Tabelle oder Ansicht aufzuheben:

    bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
     --table=true RESOURCE

    Ersetzen Sie Folgendes:

    • MEMBER_TYPE: der Mitgliedstyp, z. B. user, group, serviceAccount oder domain.
    • MEMBER: die E-Mail-Adresse oder der Domainname des Mitglieds.
    • ROLE: Die Rolle, die Sie dem Mitglied entziehen möchten.
    • RESOURCE: Der Name der Tabelle oder Ansicht, deren Richtlinie Sie aktualisieren möchten.

API

  1. Rufen Sie die Methode tables.getIamPolicy auf, um die aktuelle Richtlinie abzurufen.
  2. Bearbeiten Sie die Richtlinie, um Mitglieder, Bindungen oder beides zu entfernen. Das für die Richtlinie erforderliche Format finden Sie im Referenzthema Richtlinien.

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

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

// Sample to update iam policy in table
public class UpdateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    updateIamPolicy(datasetName, tableName);
  }

  public static void updateIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      Map<Role, Set<Identity>> binding = new HashMap<>(policy.getBindings());
      binding.remove(Role.of("roles/bigquery.dataViewer"));

      policy.toBuilder().setBindings(binding).build();
      bigquery.setIamPolicy(tableId, policy);

      System.out.println("Iam policy updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not updated. \n" + e.toString());
    }
  }
}

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

Berücksichtigen Sie die folgenden Szenarien, wenn Sie IAM-Ablehnungsrichtlinien für einige BigQuery-Berechtigungen erstellen:

  • Wenn Sie Zugriff auf autorisierte Ressourcen (Ansichten, Routinen, Datasets oder Speicherprozeduren) haben, 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 Typ INT64.
  • Wenn Sie bestimmte Hauptkonten von der Ablehnungsrichtlinie ausnehmen möchten, geben Sie diese im Feld exceptionPrincipals der Ablehnungsrichtlinie an. Beispiel: exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*"

  • 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. Wenn Sie der Berechtigung bigquery.tables.getData also eine IAM-Ablehnungsrichtlinie hinzufügen, wird der Zugriff auf die im Cache gespeicherten 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 die bigquery.jobs.create-Berechtigung.

  • Um unbeabsichtigten Datenzugriff zu verhindern, wenn Sie Deaktivierungsrichtlinien verwenden, um Lesevorgänge zu blockieren, empfehlen wir Ihnen, alle vorhandenen Abos für den Datensatz zu überprüfen und zu widerrufen.

  • Wenn Sie eine IAM-Ablehnungsrichtlinie zum Ansehen der Zugriffssteuerungen für Datasets erstellen möchten, verweigern Sie die folgenden Berechtigungen:

    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
  • Wenn Sie eine IAM-Ablehnungsrichtlinie zum Aktualisieren der Zugriffssteuerungen für Datasets erstellen möchten, verweigern Sie die folgenden Berechtigungen:

    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy