Contrôler l'accès aux ressources avec IAM

Ce document explique comment afficher la stratégie d'accès actuelle d'une ressource, comment accorder l'accès à une ressource et comment révoquer l'accès à une ressource.

Dans ce document, nous partons du principe que vous connaissez le système de gestion de l'authentification et des accès (IAM pour Identity and Access Management) dans Google Cloud.

Rôles requis

Pour obtenir les autorisations nécessaires pour modifier les stratégies IAM associées aux ressources, demandez à votre administrateur de vous accorder le rôle IAM Propriétaire de données BigQuery (roles/bigquery.dataOwner) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour modifier les stratégies IAM des ressources. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Vous devez disposer des autorisations suivantes pour modifier les stratégies IAM des ressources:

  • Pour obtenir la stratégie d'accès d'un ensemble de données : bigquery.datasets.get
  • Pour définir la stratégie d'accès d'un ensemble de données : bigquery.datasets.update
  • Pour obtenir la stratégie d'accès d'un ensemble de données (la console Google Cloud uniquement), procédez comme suit : bigquery.datasets.getIamPolicy
  • Pour définir la règle d'accès d'un ensemble de données (console uniquement), procédez comme suit : bigquery.datasets.setIamPolicy
  • Pour obtenir la stratégie d'une table ou d'une vue : bigquery.tables.getIamPolicy
  • Pour définir la stratégie d'une table ou d'une vue : bigquery.tables.setIamPolicy
  • Pour créer l'outil bq ou des tâches SQL BigQuery (facultatif), procédez comme suit : bigquery.jobs.create

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Afficher la stratégie d'accès d'une ressource

Les sections suivantes expliquent comment afficher les stratégies d'accès de différentes ressources.

Afficher la stratégie d'accès d'un ensemble de données

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez votre projet et sélectionnez un ensemble de données.

  3. Cliquez sur Partage > Autorisations.

    Les règles d'accès aux ensembles de données s'affichent dans le volet Autorisations d'ensemble de données.

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. Pour obtenir une stratégie existante et l'exporter dans un fichier local au format JSON, utilisez la commande bq show dans Cloud Shell :

    bq show \
       --format=prettyjson \
       PROJECT_ID:DATASET > PATH_TO_FILE
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET : nom de votre ensemble de données.
    • PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.

API

Pour appliquer des contrôles d'accès lors de la création de l'ensemble de données, appelez datasets.insert avec un élément dataset resource défini. Pour mettre à jour vos contrôles d'accès, appelez la méthode datasets.patch et utilisez la propriété access de la ressource Dataset.

Comme la méthode datasets.update remplace la ressource d'ensemble de données dans son intégralité, il est préférable d'utiliser la méthode datasets.patch pour mettre à jour les contrôles d'accès.

Afficher la stratégie d'accès d'une table ou d'une vue

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez votre projet et sélectionnez une table ou une vue.

  3. Cliquez sur  Partager.

    Les stratégies d'accès aux tables ou aux vues s'affichent dans le volet Partager.

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. Pour obtenir une règle d'accès existante et l'exporter dans un fichier local au format JSON, utilisez la commande bq get-iam-policy dans Cloud Shell :

    bq get-iam-policy \
       --table=true \
       PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET : nom de votre ensemble de données.
    • RESOURCE : nom de la table ou de la vue dont vous souhaitez afficher la stratégie.
    • PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.

API

Pour récupérer la stratégie actuelle, appelez la méthode tables.getIamPolicy.

Accorder l'accès à une ressource

Dans les sections suivantes, nous allons voir comment accorder l'accès à différentes ressources.

Accorder l'accès à un ensemble de données

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez votre projet et sélectionnez un ensemble de données à partager.

  3. Cliquez sur Partage > Autorisations.

  4. Cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux comptes principaux, saisissez un compte principal.

  6. Dans la liste Sélectionner un rôle, sélectionnez un rôle prédéfini ou personnalisé.

  7. Cliquez sur Enregistrer.

  8. Pour revenir aux informations sur l'ensemble de données, cliquez sur Fermer.

SQL

Pour autoriser les comptes principaux à accéder aux ensembles de données, utilisez l'instruction LDC GRANT :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    GRANT `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    TO "USER_LIST"
    

    Remplacez les éléments suivants :

    • ROLE_LIST : rôle ou liste de rôles (séparés par des virgules) que vous souhaitez attribuer.
    • RESOURCE_NAME : nom de la ressource sur laquelle vous souhaitez accorder l'autorisation
    • USER_LIST : liste d'utilisateurs (séparés par une virgule) auxquels le rôle est attribué.

      Pour obtenir la liste des formats valides, consultez la page user_list.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

L'exemple suivant accorde le rôle de lecteur de données sur l'ensemble de données myDataset:

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. Pour écrire les informations existantes sur l'ensemble de données (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande bq show :

    bq show \
       --format=prettyjson \
       PROJECT_ID:DATASET > PATH_TO_FILE
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET : nom de votre ensemble de données.
    • PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
  3. Apportez vos modifications à la section access du fichier JSON. Vous pouvez ajouter l'une des entrées specialGroup : projectOwners, projectWriters, projectReaders et allAuthenticatedUsers. Vous pouvez également ajouter l'un des éléments suivants : userByEmail, groupByEmail et domain.

    Par exemple, la section access du fichier JSON d'un ensemble de données ressemblerait à ceci :

    {
     "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. Une fois vos modifications terminées, exécutez la commande bq update et incluez le fichier JSON à l'aide de l'option --source. Si l'ensemble de données se trouve dans un projet autre que votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant : PROJECT_ID:DATASET.

    bq update \
    --source PATH_TO_FILE \
    PROJECT_ID:DATASET
    
  5. Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande bq show sans écrire les informations dans un fichier :

    bq show --format=prettyjson PROJECT_ID:DATASET
    

Terraform

Utilisez les ressources google_bigquery_dataset_iam pour modifier l'accès à un ensemble de données.

Définir la stratégie de contrôle d'accès pour un ensemble de données

L'exemple suivant montre comment utiliser la ressource google_bigquery_dataset_iam_policy pour définir la stratégie IAM de l'ensemble de données mydataset. Cette opération remplace toute règle existante déjà associée à l'ensemble de données :

# 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
}

Définir l'appartenance à un rôle pour un ensemble de données

L'exemple suivant montre comment utiliser la ressource google_bigquery_dataset_iam_binding afin de définir l'appartenance à un rôle donné pour l'ensemble de données mydataset. Cette opération remplace toute appartenance existante à ce rôle. Les autres rôles dans la stratégie Cloud IAM de l'ensemble de données sont conservés:

# 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"
  ]
}

Définir l'appartenance à un rôle pour un seul compte principal

L'exemple suivant montre comment utiliser la ressource google_bigquery_dataset_iam_member pour mettre à jour la stratégie IAM de l'ensemble de données mydataset afin d'accorder un rôle à un compte principal. La mise à jour de cette règle IAM n'a aucune incidence sur l'accès des autres administrateurs auxquels ce rôle a été attribué pour l'ensemble de données.

# 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"
}

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

API

Pour appliquer des contrôles d'accès lors de la création d'un ensemble de données, appelez la méthode datasets.insert en spécifiant une ressource d'ensemble de données. Pour mettre à jour vos contrôles d'accès, appelez la méthode datasets.patch et utilisez la propriété access de la ressource Dataset.

Comme la méthode datasets.update remplace la ressource d'ensemble de données dans son intégralité, il est préférable d'utiliser la méthode datasets.patch.

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Définissez la propriété dataset.access_entries avec les contrôles d'accès pour un ensemble de données. Appelez ensuite la fonction client.update_dataset() pour mettre à jour la propriété.

# 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)
)

Autoriser l'accès à une table ou à une vue

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, développez votre projet et sélectionnez une table ou une vue à partager.

  3. Cliquez sur  Partager.

  4. Cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux comptes principaux, saisissez un compte principal.

  6. Dans la liste Sélectionner un rôle, sélectionnez un rôle prédéfini ou personnalisé.

  7. Cliquez sur Enregistrer.

  8. Pour revenir aux détails de la table ou de la vue, cliquez sur Fermer.

SQL

Pour accorder aux comptes principaux l'accès aux tables ou aux vues, utilisez l'instruction LCD GRANT :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    GRANT `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    TO "USER_LIST"
    

    Remplacez les éléments suivants :

    • ROLE_LIST : rôle ou liste de rôles (séparés par des virgules) que vous souhaitez attribuer.
    • RESOURCE_TYPE : type de ressource auquel le rôle est appliqué.

      Les valeurs autorisées incluent : TABLE, VIEW, MATERIALIZED VIEW et EXTERNAL TABLE.

    • RESOURCE_NAME : nom de la ressource sur laquelle vous souhaitez accorder l'autorisation
    • USER_LIST : liste d'utilisateurs (séparés par une virgule) auxquels le rôle est attribué.

      Pour obtenir la liste des formats valides, consultez la page user_list.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

L'exemple suivant accorde le rôle Lecteur de données sur la table myTable :

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. Pour écrire les informations existantes dans la table ou la vue (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande bq get-iam-policy :

    bq get-iam-policy \
       PROJECT_ID:DATASET.TABLE_OR_VIEW \
       > PATH_TO_FILE
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET : nom de l'ensemble de données contenant la table ou la vue que vous souhaitez mettre à jour.
    • TABLE_OR_VIEW : nom de la ressource à mettre à jour.
    • PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
  3. Apportez vos modifications à la section bindings du fichier JSON. Une liaison associe un ou plusieurs members, ou comptes principaux, à un seul role. Les comptes principaux peuvent être des comptes utilisateur, des comptes de service, des groupes Google ou des domaines. Par exemple, la section bindings du fichier JSON d'une table ou d'une vue ressemblerait à ceci :

    {
      "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
    }
    
  4. Pour mettre à jour votre règle d'accès, utilisez la commande bq set-iam-policy :

    bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
    

  5. Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande bq get-iam-policy sans écrire les informations dans un fichier :

    bq get-iam-policy --format=prettyjson \
        PROJECT_ID:DATASET.TABLE_OR_VIEW
    

Terraform

Utilisez les ressources google_bigquery_table_iam pour mettre à jour l'accès à une table.

Définir la stratégie d'accès pour une table

L'exemple suivant montre comment utiliser la ressource google_bigquery_table_iam_policy pour définir la stratégie IAM de la table mytable. Cette opération remplace toute règle existante déjà associée à la table :

# 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
}

Définir l'appartenance à un rôle pour une table

L'exemple suivant montre comment utiliser la ressource google_bigquery_table_iam_binding pour définir l'appartenance à un rôle donné pour la table mytable. Cette opération remplace toute appartenance existante à ce rôle. Les autres rôles de la stratégie IAM pour la table sont conservés.

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

Définir l'appartenance à un rôle pour un seul compte principal

L'exemple suivant montre comment utiliser la ressource google_bigquery_table_iam_member pour mettre à jour la stratégie IAM du tableau mytable afin d'accorder un rôle à un compte principal. La mise à jour de cette règle IAM n'affecte pas l'accès des autres administrateurs auxquels ce rôle a été attribué pour l'ensemble de données.

# 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"
}

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

API

  1. Pour récupérer la stratégie actuelle, appelez la méthode tables.getIamPolicy.
  2. Modifiez la stratégie pour ajouter des membres et/ou des liaisons. Pour connaître le format requis pour la stratégie, consultez la page de référence Stratégie.

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

Révoquer l'accès à une ressource

Dans les sections suivantes, nous allons voir comment révoquer l'accès à différentes ressources.

Révoquer l'accès à un ensemble de données

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le panneau Explorateur, développez votre projet et sélectionnez un ensemble de données.

  3. Dans le panneau des détails, cliquez sur Partage > Autorisations.

  4. Dans la boîte de dialogue Autorisations pour les ensembles de données, développez le compte principal dont vous souhaitez révoquer l'accès.

  5. Cliquez sur Supprimer le compte principal.

  6. Dans la boîte de dialogue Supprimer le rôle pour le compte principal ?, cliquez sur Supprimer.

  7. Pour revenir aux détails de l'ensemble de données, cliquez sur Fermer.

SQL

Pour supprimer l'accès aux ensembles de données des comptes principaux, utilisez l'instruction LCD REVOKE :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    REVOKE `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    FROM "USER_LIST"
    

    Remplacez les éléments suivants :

    • ROLE_LIST : rôle ou liste de rôles (séparés par une virgule) que vous souhaitez révoquer.
    • RESOURCE_NAME : nom de la ressource sur laquelle vous souhaitez révoquer l'autorisation.
    • USER_LIST : liste des utilisateurs (séparés par une virgule) dont les rôles seront révoqués.

      Pour obtenir la liste des formats valides, consultez la page user_list.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

L'exemple suivant révoque le rôle Administrateur sur l'ensemble de données myDataset :

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. Pour écrire les informations existantes sur l'ensemble de données (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande bq show :

    bq show \
      --format=prettyjson \
      PROJECT_ID:DATASET > PATH_TO_FILE
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET : nom de votre ensemble de données.
    • PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.
  3. Apportez vos modifications à la section access du fichier JSON. Vous pouvez supprimer n'importe quelle entrée specialGroup : projectOwners, projectWriters, projectReaders et allAuthenticatedUsers. Vous pouvez également supprimer l'un des éléments suivants : userByEmail, groupByEmail et domain.

    Par exemple, la section access du fichier JSON d'un ensemble de données ressemblerait à ceci :

    {
     "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. Une fois vos modifications terminées, exécutez la commande bq update et incluez le fichier JSON à l'aide de l'option --source. Si l'ensemble de données se trouve dans un projet autre que votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant : PROJECT_ID:DATASET.

    bq update \
        --source PATH_TO_FILE \
        PROJECT_ID:DATASET
    
  5. Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande show sans écrire les informations dans un fichier :

    bq show --format=prettyjson PROJECT_ID:DATASET
    

API

Appelez datasets.patch et utilisez la propriété access de la ressource Dataset pour mettre à jour les contrôles d'accès.

Comme la méthode datasets.update remplace la ressource d'ensemble de données dans son intégralité, il est préférable d'utiliser la méthode datasets.patch.

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Définissez la propriété dataset.access_entries avec les contrôles d'accès pour un ensemble de données. Appelez ensuite la fonction client.update_dataset() pour mettre à jour la propriété.

# 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}.'")

Révoquer l'accès à une table ou à une vue

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le panneau Explorateur, développez votre projet et sélectionnez une table ou une vue.

  3. Dans le panneau des détails, cliquez sur Partager.

  4. Dans la boîte de dialogue Partager, développez le compte principal dont vous souhaitez révoquer l'accès.

  5. Cliquez sur Supprimer.

  6. Dans la boîte de dialogue Supprimer le rôle pour le compte principal ?, cliquez sur Supprimer.

  7. Pour revenir aux détails de la table ou de la vue, cliquez sur Fermer.

SQL

Pour supprimer l'accès aux tables ou aux vues des comptes principaux, utilisez l'instruction LCD REVOKE :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    REVOKE `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    FROM "USER_LIST"
    

    Remplacez les éléments suivants :

    • ROLE_LIST : rôle ou liste de rôles (séparés par une virgule) que vous souhaitez révoquer.
    • RESOURCE_TYPE : type de ressource à partir duquel le rôle est révoqué

      Les valeurs autorisées incluent TABLE, VIEW, MATERIALIZED VIEW et EXTERNAL TABLE.

    • RESOURCE_NAME : nom de la ressource sur laquelle vous souhaitez révoquer l'autorisation.
    • USER_LIST : liste des utilisateurs (séparés par une virgule) dont les rôles seront révoqués.

      Pour obtenir la liste des formats valides, consultez la page user_list.

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

L'exemple suivant révoque le rôle Administrateur sur la table myTable :

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. Pour écrire les informations existantes dans la table ou la vue (y compris les contrôles d'accès) dans un fichier JSON, utilisez la commande bq get-iam-policy :

    bq get-iam-policy \
       PROJECT_ID:DATASET.TABLE_OR_VIEW \
       > PATH_TO_FILE
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET : nom de l'ensemble de données contenant la table ou la vue que vous souhaitez mettre à jour.
    • TABLE_OR_VIEW : nom de la ressource à mettre à jour.
    • PATH_TO_FILE : chemin d'accès au fichier JSON sur votre ordinateur local.

  3. Apportez vos modifications à la section access du fichier JSON. Vous pouvez supprimer n'importe quelle entrée specialGroup : projectOwners, projectWriters, projectReaders et allAuthenticatedUsers. Vous pouvez également supprimer l'un des éléments suivants : userByEmail, groupByEmail et domain. Par exemple, la section access du fichier JSON d'une table ou d'une vue ressemblerait à ceci :

    {
     "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. Pour mettre à jour votre règle d'accès, utilisez la commande bq set-iam-policy :

     bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
    

  5. Pour vérifier les modifications apportées aux contrôles d'accès, saisissez à nouveau la commande get-iam-policy sans écrire les informations dans un fichier :

    bq get-iam-policy --format=prettyjson \
        PROJECT_ID:DATASET.TABLE_OR_VIEW
    

API

  1. Pour récupérer la stratégie actuelle, appelez la méthode tables.getIamPolicy.
  2. Modifiez la stratégie pour supprimer des membres et/ou des liaisons. Pour connaître le format requis pour la stratégie, consultez la page de référence Stratégie.

  3. Appelez tables.setIamPolicy pour écrire la stratégie mise à jour. Attention : Les liaisons vides sans membre ne sont pas autorisées et entraînent une erreur.

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

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());
    }
  }
}

Refuser l'accès à une ressource

Les stratégies de refus IAM vous permettent de définir des garde-fous pour l'accès aux ressources BigQuery. Vous pouvez définir des règles de refus qui empêchent certains comptes principaux d'utiliser certaines autorisations, quels que soient les rôles qui leur sont attribués.

Pour en savoir plus sur la création, la mise à jour et la suppression de stratégies de refus, consultez la section Refuser l'accès aux ressources.

Cas particuliers

Tenez compte des scénarios suivants lorsque vous créez des stratégies de refus IAM pour quelques autorisations BigQuery :

  • L'accès aux ressources autorisées (vues, routines, ensembles de données ou procédures stockées) vous permet de créer, supprimer ou manipuler une table, ainsi que de lire et de modifier ses données, même si vous n'êtes pas autorisé directement à effectuer ces opérations. Il permet également d'obtenir des données ou des métadonnées de modèle et d'appeler d'autres procédures stockées sur la table sous-jacente. Cette fonctionnalité implique que les ressources autorisées disposent des autorisations suivantes :

    • 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

    Pour refuser l'accès à ces ressources autorisées, ajoutez l'une des valeurs suivantes au champ deniedPrincipal lorsque vous créez la stratégie de refus :

    Valeur Cas d'utilisation
    principalSet://goog/public:all Bloque tous les comptes principaux, y compris les ressources autorisées.
    principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/* Bloque toutes les ressources autorisées BigQuery dans le projet spécifié. PROJECT_NUMBER est un identifiant unique généré automatiquement pour votre projet de type INT64.
  • BigQuery met en cache les résultats des requêtes d'un propriétaire de job pendant 24 heures. Il peut y accéder sans avoir besoin de l'autorisation bigquery.tables.getData sur la table contenant les données. Par conséquent, l'ajout d'une stratégie de refus IAM à l'autorisation bigquery.tables.getData ne bloque pas l'accès aux résultats mis en cache pour le propriétaire de job tant que le cache n'a pas expiré. Pour bloquer l'accès du propriétaire de job aux résultats mis en cache, créez une stratégie de refus distincte sur l'autorisation bigquery.jobs.create.