Contrôler l'accès aux tables et aux vues

Ce document explique comment utiliser la LCA BigQuery Table pour contrôler l'accès aux tables et aux vues. Pour obtenir une présentation de la LCA BigQuery Table, consultez la page Présentation des contrôles de l'accès aux tables.

Après avoir créé une table ou une vue, vous pouvez définir sa stratégie de différentes manières :

  • À l'aide de Cloud Console
  • En exécutant la commande bq set-iam-policy
  • En appelant la méthode tables.setIamPolicy

Vous pouvez utiliser la LCA BigQuery Table pour définir un accès à la fois aux vues logiques et aux vues autorisées au niveau de l'ensemble de données. Une vue logique peut également faire référence à d'autres tables et vues sources que vous avez partagées à l'aide de la LCA BigQuery Table.

Avant de commencer

  1. Créez la table ou la vue que vous souhaitez utiliser avec la LCA BigQuery Table.

  2. Attribuez le rôle "Propriétaire de données BigQuery" (roles/bigquery.dataOwner) ou "Administrateur BigQuery" (roles/bigquery.admin) à la personne qui effectuera les étapes décrites sur cette page.

  3. Pour en savoir plus sur les stratégies IAM (Identity and Access Management), consultez les pages Comprendre les stratégies et Stratégie.

Créer une stratégie d'accès

Pour créer une stratégie d'accès à une table ou une vue, procédez comme suit :

Console

  1. Ouvrez la page BigQuery dans Cloud Console.

    Accéder à Cloud Console

  2. Dans le panneau Explorateur, sélectionnez le projet.

  3. Sélectionnez l'ensemble de données contenant la table ou la vue.

  4. Sélectionnez la table ou la vue.

  5. Si vous modifiez l'accès à une table, cliquez sur Partager la table. Si vous modifiez l'accès à une vue, cliquez sur Partager la vue.

  6. La page Autorisations relatives aux tables ou Afficher les autorisations s'affiche. Dans le champ Add members (Ajouter des membres), saisissez l'adresse e-mail de l'utilisateur qui recevra l'accès à la table ou à la vue.

  7. Dans la liste déroulante Sélectionnez un rôle, sélectionnez le rôle que vous souhaitez attribuer à l'utilisateur. Les éléments suivants attribuent l'adresse joe@example.com au rôle "Lecteur de données BigQuery" (roles/bigquery.dataViewer).

    Autorisations relatives aux tables

  8. Cliquez sur OK.

bq

  1. Récupérez la stratégie existante dans un fichier local.

    bq get-iam-policy \
     project-id:dataset.table_or_view \
     > policy.json
    

    où :

    • project-id est l'ID de votre projet.
    • dataset est le nom de l'ensemble de données contenant la ressource (table ou vue) que vous mettez à jour.
    • table_or_view est le nom de la ressource que vous mettez à jour.

    Autres exemples d'identification d'une table ou d'une vue, et redirection de la sortie de stratégie vers un fichier :

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. Si vous n'avez pas encore ajouté de membres à la stratégie, le fichier policy.json contient une valeur etag et aucun autre champ. Pour en savoir plus sur la mise en forme du fichier policy.json, consultez la page Comprendre les stratégies.

  3. Pour ajouter le premier membre, ajoutez un champ bindings à la stratégie. Par exemple, pour attribuer le rôle "Lecteur de données BigQuery" (roles/bigquery.dataViewer) à joe@example.com, procédez comme suit :

    "bindings": [
     {
       "members": [
         "user:joe@example.com"
       ],
       "role": "roles/bigquery.dataViewer"
     }
    ]
    

    Si vous devez ajouter d'autres membres à une liaison existante, ajoutez simplement le membre. Cet exemple montre comment accorder à jane@example.com le rôle "Lecteur de données BigQuery" (roles/bigquery.dataViewer) pour une liaison déjà existante.

    "members": [
           "user:joe@example.com",
           "user:jane@example.com"
         ],
         "role": "roles/bigquery.dataViewer"
       }
    
  4. Mettez à jour la stratégie.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

    Pour en savoir plus sur les versions du schéma de stratégie IAM, consultez la section Versions de stratégies.

API

  1. Appelez tables.getIamPolicy pour récupérer la stratégie actuelle.

  2. Modifiez la stratégie pour ajouter des membres et/ou des liaisons. Consultez l'exemple bq pour connaître le format de la stratégie.

  3. Appelez tables.setIamPolicy pour écrire la nouvelle stratégie.

Pour en savoir plus sur les versions du schéma de stratégie IAM, consultez la section Versions de stratégies.

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le 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 en langage Java.

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

Mettre à jour une stratégie d'accès

Pour mettre à jour une stratégie d'accès à une table ou une vue, procédez comme suit :

Console

  1. Ouvrez la page BigQuery dans Cloud Console.

    Accéder à Cloud Console

  2. Dans le panneau Explorateur, sélectionnez le projet.

  3. Sélectionnez l'ensemble de données contenant la table ou la vue.

  4. Sélectionnez la table ou la vue.

  5. Si vous modifiez l'accès à une table, cliquez sur Partager la table. Si vous modifiez l'accès à une vue, cliquez sur Partager la vue.

  6. La page Autorisations relatives aux tables ou Afficher les autorisations s'affiche.

    • Si vous souhaitez ajouter des membres, utilisez la même technique que celle présentée dans la section Créer une stratégie d'accès.

    • Si vous souhaitez supprimer l'accès d'un utilisateur, recherchez celui-ci à l'aide du champ Rechercher des membres. Pour chaque groupe dans lequel vous souhaitez supprimer l'utilisateur, développez le groupe, puis cliquez sur le bouton Supprimer  correspondant.

    • Si vous souhaitez modifier l'appartenance au groupe d'un utilisateur, effectuez des ajouts et/ou des suppressions comme décrit dans les deux étapes ci-dessus.

  7. Répétez l'opération selon les besoins pour les autres utilisateurs dont vous souhaitez ajouter, modifier ou supprimer des droits d'accès. Lorsque vous avez terminé, cliquez sur Terminé.

bq

  1. Récupérez la stratégie existante dans un fichier local.

    bq get-iam-policy --format=prettyjson \
     project-id:dataset.table_or_view \
     > policy.json
    

    où :

    • project-id est l'ID de votre projet.
    • dataset est le nom de l'ensemble de données contenant la table que vous mettez à jour.
    • table_or_view est le nom de la table ou de la vue que vous mettez à jour.

    Autres exemples d'identification d'une table ou d'une vue, et redirection de la sortie de stratégie vers un fichier :

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. Modifiez policy.json si nécessaire.

    Pour en savoir plus sur la mise en forme du fichier policy.json, consultez la page Comprendre les stratégies.

    Pour en savoir plus sur les versions du schéma de stratégie IAM, consultez la section Versions de stratégies.

  3. Mettez à jour la stratégie.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

API

  1. Appelez tables.getIamPolicy pour récupérer la stratégie actuelle.

  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.

  3. Appelez tables.setIamPolicy pour écrire la stratégie mise à jour.

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le 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 en langage Java.

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

Pour en savoir plus sur les stratégies Identity and Access Management, consultez les pages Comprendre les stratégies et Stratégie.

Étape suivante