Limiter l'accès à l'aide du contrôle des accès au niveau des colonnes

Cette page explique comment utiliser le contrôle des accès au niveau des colonnes de BigQuery pour limiter l'accès aux données BigQuery au niveau des colonnes. Pour obtenir des informations générales sur le contrôle des accès au niveau des colonnes, consultez la page Présentation du contrôle des accès au niveau des colonnes de BigQuery.

Les instructions figurant sur cette page utilisent BigQuery et Data Catalog.

Vous devez mettre à jour le schéma de la table pour définir un tag avec stratégie sur une colonne. Vous pouvez utiliser la console Google Cloud , l'outil de ligne de commande bq et l'API BigQuery pour définir un tag avec stratégie sur une colonne. En outre, vous pouvez créer une table ainsi que spécifier le schéma et des tags avec stratégie en une seule opération, à l'aide des techniques suivantes :

  • Les commandes bq mk et bq load de l'outil de ligne de commande bq.
  • La méthode d'API tables.insert
  • La page Créer une table de la console Google Cloud . Si vous utilisez la consoleGoogle Cloud , vous devez sélectionner Modifier sous forme de texte lorsque vous ajoutez ou modifiez le schéma.

Pour améliorer le contrôle des accès au niveau des colonnes, vous pouvez éventuellement utiliser le masquage des données dynamiques. Le masquage des données vous permet de masquer les données sensibles en remplaçant la valeur réelle de la colonne par du contenu vide, du contenu par défaut ou du contenu haché.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Data Catalog and BigQuery Data Policy APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Data Catalog and BigQuery Data Policy APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. BigQuery est automatiquement activé dans les nouveaux projets, mais vous devrez peut-être l'activer dans un projet préexistant.

    Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  9. Rôles et autorisations

    Il existe plusieurs rôles associés aux tags avec stratégie pour les utilisateurs et les comptes de service.

    • Les utilisateurs ou les comptes de service qui administrent les tags avec stratégie doivent disposer du rôle "Administrateur de tags avec stratégie Data Catalog". Ce rôle permet de gérer les taxonomies et les tags avec stratégie, et d'accorder ou de supprimer des rôles IAM associés à ces tags.
    • Les utilisateurs ou les comptes de service qui appliquent le contrôle des accès au contrôle des accès au niveau des colonnes doivent disposer du rôle d'administrateur BigQuery ou de propriétaire de données BigQuery. Les rôles BigQuery permettent de gérer les stratégies de données qui sont utilisées pour appliquer le contrôle des accès sur une taxonomie.
    • Pour afficher les taxonomies et les tags avec stratégie de tous les projets d'une organisation dans la consoleGoogle Cloud , les utilisateurs doivent disposer du rôle Lecteur de l'organisation. Sinon, la console n'affiche que les taxonomies et les tags avec stratégie associés au projet sélectionné.
    • Les utilisateurs ou les comptes de service qui interrogent des données protégées par le contrôle des accès au niveau des colonnes doivent disposer du rôle "Lecteur détaillé Data Catalog" pour accéder à ces données.

    Pour en savoir plus sur tous les rôles liés aux tags avec stratégie, consultez la page Rôles utilisés avec le contrôle des accès au niveau des colonnes.

    Rôle "Administrateur de tags avec stratégie Data Catalog"

    Le rôle Administrateur de tags avec stratégie Data Catalog permet de créer et de gérer des tags avec stratégie de données.

    Pour attribuer ce rôle, vous devez disposer de l'autorisation resourcemanager.projects.setIamPolicy sur le projet pour lequel vous souhaitez accorder le rôle. Si vous ne disposez pas de l'autorisation resourcemanager.projects.setIamPolicy, demandez à un Propriétaire du projet de vous l'accorder ou d'effectuer la procédure suivante.

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

      Ouvrir la page IAM

    2. Si l'adresse e-mail de l'utilisateur auquel attribuer le rôle figure dans la liste, sélectionnez-la et cliquez sur Modifier. Le volet Modifier l'accès s'ouvre. Cliquez sur Ajouter un autre rôle.

      Si l'adresse e-mail de l'utilisateur ne figure pas dans la liste, cliquez sur Ajouter, puis saisissez l'adresse e-mail dans le champ Nouveaux comptes principaux.

    3. Cliquez sur la liste déroulante Sélectionner un rôle.

    4. Sous Par produit ou service, cliquez sur Data Catalog. Dans Rôles, cliquez sur Administrateur de tags avec stratégie.

    5. Cliquez sur Enregistrer.

    Rôles "Administrateur des stratégies de données BigQuery", "Administrateur BigQuery" et "Propriétaire de données BigQuery"

    Les rôles "Administrateur des stratégies de données BigQuery", "Administrateur BigQuery" et "Propriétaire de données BigQuery" permettent de gérer les stratégies de données.

    Pour accorder l'un de ces rôles, vous devez disposer de l'autorisation resourcemanager.projects.setIamPolicy sur le projet pour lequel vous souhaitez accorder le rôle. Si vous ne disposez pas de l'autorisation resourcemanager.projects.setIamPolicy, demandez à un Propriétaire du projet de vous l'accorder ou d'effectuer la procédure suivante.

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

      Ouvrir la page IAM

    2. Si l'adresse e-mail de l'utilisateur auquel attribuer le rôle figure dans la liste, sélectionnez-la et cliquez sur Modifier. Cliquez ensuite sur Ajouter un autre rôle.

      Si l'adresse e-mail de l'utilisateur ne figure pas dans la liste, cliquez sur Ajouter, puis saisissez l'adresse e-mail dans le champ Nouveaux comptes principaux.

    3. Cliquez sur la liste déroulante Sélectionner un rôle.

    4. Cliquez sur BigQuery, puis sur Administrateur des stratégies de données BigQuery, Administrateur BigQuery ou Propriétaire de données BigQuery.

    5. Cliquez sur Enregistrer.

    Rôle Lecteur de l'organisation

    Le rôle Lecteur de l'organisation permet aux utilisateurs d'afficher des informations sur la ressource de leur organisation. Pour attribuer ce rôle, vous devez disposer de l'autorisation resourcemanager.organizations.setIamPolicy pour l'organisation.

    Rôle "Lecteur détaillé Data Catalog"

    Les utilisateurs ayant besoin d'accéder à des données protégées par le contrôle des accès au niveau des colonnes doivent disposer du rôle Lecteur détaillé Data Catalog ou de tout autre rôle auquel l'autorisation datacatalog.categories.fineGrainedGet est accordée. Ce rôle est attribué aux comptes principaux lors de la configuration d'un tag avec stratégie.

    Pour attribuer à un utilisateur le rôle de lecteur détaillé sur un tag avec stratégie, vous devez disposer de l'autorisation datacatalog.taxonomies.setIamPolicy sur le projet contenant la taxonomie de ce tag. Si vous ne disposez pas de l'autorisation datacatalog.taxonomies.setIamPolicy, demandez à un Propriétaire du projet de vous l'accorder ou d'effectuer l'action pour vous.

    Pour obtenir des instructions, consultez la section Définir des autorisations sur les tags avec stratégie.

    Configurer le contrôle des accès au niveau des colonnes

    Configurez le contrôle d'accès au niveau des colonnes en procédant comme suit :

    • Créez une taxonomie de tags avec stratégie.
    • Associez les comptes principaux aux tags avec stratégie et accordez-leur le rôle "Lecteur détaillé Data Catalog".
    • Associez les tags avec stratégie aux colonnes de table BigQuery.
    • Appliquez le contrôle d'accès à la taxonomie contenant les tags avec stratégie.

    Créer des catégories

    L'utilisateur ou le compte de service qui crée une taxonomie doit disposer du rôle "Administrateur de tags avec stratégie Data Catalog".

    Console

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur Créer une taxonomie.
    3. Sur la page Nouvelle taxonomie :

      1. Dans le champ Nom de la taxonomie, saisissez le nom de la taxonomie à créer.
      2. Dans le champ Description, saisissez une description.
      3. Si nécessaire, modifiez le projet répertorié sous Project (Projet).
      4. Si nécessaire, modifiez l'emplacement répertorié sous Location (Emplacement).
      5. Sous Policy Tags (Tags avec stratégie), saisissez un nom et une description de tag avec stratégie.
      6. Pour ajouter un tag avec stratégie enfant à un tag avec stratégie, cliquez sur Ajouter un sous-tag.
      7. Pour ajouter un tag avec stratégie au même niveau qu'un autre tag, cliquez sur + Ajouter un tag avec stratégie.
      8. Continuez à ajouter des tags avec stratégie et des tags avec stratégie enfant selon les besoins de votre taxonomie.
      9. Lorsque vous avez fini de créer des tags avec stratégie pour votre hiérarchie, cliquez sur Enregistrer.

    API

    Pour utiliser les taxonomies existantes, appelez taxonomies.import à la place des deux premières étapes de la procédure suivante.

    1. Appelez taxonomies.create pour créer une taxonomie.
    2. Appelez taxonomies.policytag.create pour créer un tag avec stratégie.

    Définir des autorisations sur les tags avec stratégie

    L'utilisateur ou le compte de service qui crée une taxonomie doit disposer du rôle "Administrateur de tags avec stratégie Data Catalog".

    Console

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur le nom de la taxonomie qui contient les tags avec stratégie pertinents.

    3. Sélectionnez un ou plusieurs tags avec stratégie.

    4. Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations.

    5. Dans le panneau d'informations, vous pouvez voir les rôles et les comptes principaux pour les tags avec stratégie sélectionnés. Ajoutez le rôle Administrateur de tags avec stratégie aux comptes qui créent et gèrent des tags avec stratégie. Ajoutez le rôle Lecteur détaillé aux comptes qui doivent avoir accès aux données protégées par le contrôle des accès au niveau des colonnes. Vous pouvez également utiliser ce panneau pour supprimer des rôles associés aux comptes ou modifier d'autres autorisations.

    6. Cliquez sur Enregistrer.

    API

    Appelez taxonomies.policytag.setIamPolicy pour accorder l'accès à un tag avec stratégie en attribuant les comptes principaux aux rôles appropriés.

    Définir des tags avec stratégie sur des colonnes

    L'utilisateur ou le compte de service qui définit un tag avec stratégie a besoin des autorisations datacatalog.taxonomies.get et bigquery.tables.setCategory. datacatalog.taxonomies.get est inclus dans les rôles "Administrateur de tags avec stratégie Data Catalog" et "Lecteur de projet". bigquery.tables.setCategory est inclus dans les rôles Administrateur BigQuery (roles/bigquery.admin) et Propriétaire de données BigQuery (roles/bigquery.dataOwner).

    Pour afficher les taxonomies et les tags avec stratégie de tous les projets d'une organisation dans la consoleGoogle Cloud , les utilisateurs doivent disposer de l'autorisation resourcemanager.organizations.get, qui est incluse dans le rôle Lecteur de l'organisation.

    Console

    Définissez le tag avec stratégie en modifiant un schéma à l'aide de la consoleGoogle Cloud .

    1. Ouvrez la page BigQuery dans la console Google Cloud .

      Accéder à la page "BigQuery"

    2. Dans l'explorateur BigQuery, localisez et sélectionnez la table que vous souhaitez mettre à jour. Le schéma de la table s'ouvre.

    3. Cliquez sur Modifier le schéma.

    4. Dans l'écran Current schema (Schéma actuel), sélectionnez la colonne cible, puis cliquez sur Add policy tag (Ajouter un tag avec stratégie).

    5. Dans l'écran Add policy tag (Ajouter un tag avec stratégie), sélectionnez le tag avec stratégie que vous souhaitez appliquer à la colonne.

    6. Cliquez sur Sélectionner. L'écran qui s'affiche devrait se présenter comme ceci :

      Modifier le schéma.

    7. Cliquez sur Enregistrer.

    bq

    1. Enregistrez le schéma dans un fichier local.

      bq show --schema --format=prettyjson \
         project-id:dataset.table > schema.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 est le nom de la table que vous mettez à jour.
    2. Modifiez le fichier schema.json pour définir un tag avec stratégie sur une colonne. Pour la valeur du champ names de policyTags, utilisez le nom de ressource du tag avec stratégie.

      [
       ...
       {
         "name": "ssn",
         "type": "STRING",
         "mode": "REQUIRED",
         "policyTags": {
           "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
         }
       },
       ...
      ]
    3. Mettez à jour le schéma.

      bq update \
         project-id:dataset.table schema.json

    API

    Pour les tables existantes, appelez tables.patch ou, pour les nouvelles tables, appelez tables.insert. Utilisez la propriété schema de l'objet Table que vous transmettez pour définir un tag avec stratégie dans votre définition de schéma. Consultez l'exemple de schéma de ligne de commande pour savoir comment définir un tag avec stratégie.

    Lorsque vous utilisez une table existante, la méthode tables.patch est préférable, car la méthode tables.update remplace l'intégralité de la ressource de table.

    Autres méthodes pour définir des tags avec stratégie sur des colonnes

    Vous pouvez également définir des tags avec stratégie dans les cas suivants :

    • Vous utilisez bq mk pour créer une table. Transmettez un schéma à utiliser pour créer la table.
    • Vous utilisez bq load pour charger des données dans une table. Transmettez un schéma à utiliser lorsque vous chargez la table.

    Pour obtenir des informations générales sur le schéma, consultez la page Spécifier un schéma.

    Appliquer le contrôle des accès

    Suivez ces instructions pour activer ou désactiver l'application du contrôle des accès.

    L'application du contrôle des accès nécessite la création d'une stratégie de données. Si vous appliquez le contrôle des accès à l'aide de la consoleGoogle Cloud , cette opération est effectuée automatiquement. Si vous souhaitez appliquer le contrôle des accès à l'aide de l'API BigQuery Data Policy, vous devez explicitement créer la stratégie de données.

    Le compte principal qui applique le contrôle des accès doit disposer du rôle "Administrateur de BigQuery" ou "Propriétaire de données BigQuery". Le compte principal doit également disposer du rôle "Administrateur Data Catalog" ou du rôle "Lecteur Data Catalog".

    Pour arrêter l'application du contrôle des accès s'il est activé, cliquez sur Appliquer le contrôle des accès pour le désactiver.

    Si des stratégies de données sont associées à l'un des tags avec stratégie de la taxonomie, vous devez supprimer toutes les stratégies de données de la taxonomie avant d'arrêter l'application du contrôle des accès. Si vous supprimez les stratégies de données à l'aide de l'API BigQuery Data Policy, vous devez supprimer toutes les stratégies de données dont le champ dataPolicyType est défini sur DATA_MASKING_POLICY. Pour en savoir plus, consultez la page Supprimer des stratégies de données.

    Créer une règle de données

    Pour créer un règlement sur les données, procédez comme suit :

    Console

    Pour appliquer le contrôle des accès, procédez comme suit :

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur la taxonomie pour laquelle vous souhaitez appliquer le contrôle des accès au niveau des colonnes.

    3. Si l'option Appliquer le contrôle des accès n'est pas déjà activée, cliquez sur Appliquer le contrôle des accès pour l'activer.

    API

    Utilisez la méthode create et transmettez une ressource DataPolicy où le champ dataPolicyType est défini sur COLUMN_LEVEL_SECURITY_POLICY.

    Obtenir un règlement sur les données

    Pour obtenir des informations sur une règle relative aux données, procédez comme suit :

    Node.js

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js 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 Node.js.

    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.

    const {DataPolicyServiceClient} =
      require('@google-cloud/bigquery-datapolicies').v2;
    const {status} = require('@grpc/grpc-js');
    
    const client = new DataPolicyServiceClient();
    
    /**
     * Gets a specific data policy from the BigQuery Data Policy API by its name.
     *
     * This sample demonstrates how to fetch the details of an existing data policy.
     * Data policies are used to define rules for data masking or row-level security
     * on BigQuery tables.
     *
     * @param {string} projectId The Google Cloud project ID (for example, 'example-project-id')
     * @param {string} [location='us'] The Google Cloud location of the data policy (For example, 'us', 'europe-west2').
     * @param {string} [dataPolicyId='example-data-policy'] The ID of the data policy to retrieve.
     */
    async function getDataPolicy(
      projectId,
      location = 'us',
      dataPolicyId = 'example-data-policy',
    ) {
      const name = client.dataPolicyPath(projectId, location, dataPolicyId);
    
      const request = {
        name,
      };
    
      try {
        const [dataPolicy] = await client.getDataPolicy(request);
        console.log('Successfully retrieved data policy:');
        console.log(`  Name: ${dataPolicy.name}`);
        console.log(`  Type: ${dataPolicy.dataPolicyType}`);
        if (dataPolicy.dataMaskingPolicy) {
          console.log(
            `  Data Masking Policy: ${dataPolicy.dataMaskingPolicy.predefinedExpression || dataPolicy.dataMaskingPolicy.routine}`,
          );
        }
        if (dataPolicy.grantees && dataPolicy.grantees.length > 0) {
          console.log(`  Grantees: ${dataPolicy.grantees.join(', ')}`);
        }
      } catch (err) {
        if (err.code === status.NOT_FOUND) {
          console.error(
            `Error: Data policy '${dataPolicyId}' not found in location '${location}' for project '${projectId}'.`,
          );
          console.error(
            'Make sure the data policy ID, project ID, and location are correct.',
          );
        } else {
          console.error('Error retrieving data policy:', err.message);
        }
      }
    }

    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.api_core import exceptions
    from google.cloud import bigquery_datapolicies_v2
    
    
    client = bigquery_datapolicies_v2.DataPolicyServiceClient()
    
    
    def get_data_policy(
        project_id: str,
        location: str,
        data_policy_id: str,
    ) -> None:
        """Gets a specific data policy from the BigQuery Data Policy API by its name.
    
    
        Args:
            project_id: The Google Cloud project ID.
            location: The geographic location of the data policy (for example, "us", "eu").
            data_policy_id: The user-assigned ID of the data policy.
        """
        client = bigquery_datapolicies_v2.DataPolicyServiceClient()
    
        data_policy_name = client.data_policy_path(
            project=project_id,
            location=location,
            data_policy=data_policy_id,
        )
    
        try:
            response = client.get_data_policy(name=data_policy_name)
    
            print(f"Successfully retrieved data policy: {response.name}")
            print(f"  Data Policy ID: {response.data_policy_id}")
            print(f"  Data Policy Type: {response.data_policy_type.name}")
            if response.policy_tag:
                print(f"  Policy Tag: {response.policy_tag}")
            if response.grantees:
                print(f"  Grantees: {', '.join(response.grantees)}")
            if response.data_masking_policy:
                masking_policy = response.data_masking_policy
                if masking_policy.predefined_expression:
                    print(
                        f"  Data Masking Predefined Expression: {masking_policy.predefined_expression.name}"
                    )
                elif masking_policy.routine:
                    print(f"  Data Masking Routine: {masking_policy.routine}")
    
        except exceptions.NotFound:
            print(f"Error: Data policy '{data_policy_name}' not found.")
            print("Make sure the data policy ID, project ID, and location are correct.")
        except Exception as e:
            print(f"An unexpected error occurred: {e}")
    
    

    Obtenir la stratégie IAM (Identity and Access Management) pour une règle relative aux données

    Pour obtenir la stratégie IAM associée à une règle de données, procédez comme suit :

    Node.js

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js 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 Node.js.

    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.

    const {DataPolicyServiceClient} =
      require('@google-cloud/bigquery-datapolicies').v2;
    const {status} = require('@grpc/grpc-js');
    
    const client = new DataPolicyServiceClient();
    
    /**
     * Get the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
     * This is useful for auditing which members have which roles on the policy.
     *
     *
     * @param {string} projectId Google Cloud Project ID (For example, 'example-project-id')
     * @param {string} location Google Cloud Location (For example, 'us-central1')
     * @param {string} dataPolicyId The ID of the data policy (For example, 'example-data-policy-id')
     */
    async function getIamPolicy(projectId, location, dataPolicyId) {
      const resourceName = client.dataPolicyPath(projectId, location, dataPolicyId);
    
      const request = {
        resource: resourceName,
      };
    
      try {
        const [policy] = await client.getIamPolicy(request);
        console.log(
          'Successfully retrieved IAM policy for data policy %s:',
          resourceName,
        );
        console.log(JSON.stringify(policy, null, 2));
      } catch (err) {
        if (err.code === status.NOT_FOUND) {
          console.error(
            `Error: Data Policy '${dataPolicyId}' not found in location '${location}' of project '${projectId}'. ` +
              'Make sure the data policy exists and the resource name is correct.',
          );
        } else {
          console.error(
            `Error getting IAM policy for data policy '${dataPolicyId}':`,
            err,
          );
        }
      }
    }

    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.api_core import exceptions
    from google.cloud import bigquery_datapolicies_v2
    from google.iam.v1 import iam_policy_pb2
    
    client = bigquery_datapolicies_v2.DataPolicyServiceClient()
    
    
    def get_data_policy_iam_policy(
        project_id: str,
        location: str,
        data_policy_id: str,
    ) -> None:
        """Get the IAM policy for a specified data policy resource from the BigQuery Data Policy API. 
        This is useful for auditing which members have which roles on the policy.
    
        Args:
            project_id: The Google Cloud project ID.
            location: The geographic location of the data policy (for example, "us").
            data_policy_id: The ID of the data policy.
        """
    
        resource_name = client.data_policy_path(
            project=project_id,
            location=location,
            data_policy=data_policy_id,
        )
    
        request = iam_policy_pb2.GetIamPolicyRequest(resource=resource_name)
    
        try:
            policy = client.get_iam_policy(request=request)
    
            print(f"Successfully retrieved IAM policy for data policy: {resource_name}")
            print("Policy Version:", policy.version)
            if policy.bindings:
                print("Policy Bindings:")
                for binding in policy.bindings:
                    print(f"  Role: {binding.role}")
                    print(f"  Members: {', '.join(binding.members)}")
                    if binding.condition.expression:
                        print(f"  Condition: {binding.condition.expression}")
            else:
                print("No bindings found in the policy.")
    
        except exceptions.NotFound:
            print(f"Error: Data policy '{resource_name}' not found.")
            print("Make sure the project ID, location, and data policy ID are correct.")
        except exceptions.GoogleAPIError as e:
            print(f"An API error occurred: {e}")
        except Exception as e:
            print(f"An unexpected error occurred: {e}")
    
    

    Lister les règles relatives aux données

    Pour lister les règles relatives aux données, procédez comme suit :

    Node.js

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js 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 Node.js.

    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.

    const {DataPolicyServiceClient} =
      require('@google-cloud/bigquery-datapolicies').v2;
    const {status} = require('@grpc/grpc-js');
    
    const client = new DataPolicyServiceClient();
    
    /**
     * Lists all data policies in a given project and location.
     *
     * Data policies define rules for data masking, row-level security, or column-level security.
     *
     * @param {string} projectId The Google Cloud project ID. (for example, 'example-project-id')
     * @param {string} location The Google Cloud location of the data policies. (For example, 'us')
     */
    async function listDataPolicies(projectId, location) {
      const parent = `projects/${projectId}/locations/${location}`;
    
      const request = {
        parent,
      };
    
      try {
        console.log(
          `Listing data policies for project: ${projectId} in location: ${location}`,
        );
        const [dataPolicies] = await client.listDataPolicies(request);
    
        if (dataPolicies.length === 0) {
          console.log(
            `No data policies found in location ${location} for project ${projectId}.`,
          );
          return;
        }
    
        console.log('Data Policies:');
        for (const dataPolicy of dataPolicies) {
          console.log(`  Data Policy Name: ${dataPolicy.name}`);
          console.log(`    ID: ${dataPolicy.dataPolicyId}`);
          console.log(`    Type: ${dataPolicy.dataPolicyType}`);
          if (dataPolicy.policyTag) {
            console.log(`    Policy Tag: ${dataPolicy.policyTag}`);
          }
          if (dataPolicy.grantees && dataPolicy.grantees.length > 0) {
            console.log(`    Grantees: ${dataPolicy.grantees.join(', ')}`);
          }
          if (dataPolicy.dataMaskingPolicy) {
            if (dataPolicy.dataMaskingPolicy.predefinedExpression) {
              console.log(
                `    Data Masking Predefined Expression: ${dataPolicy.dataMaskingPolicy.predefinedExpression}`,
              );
            } else if (dataPolicy.dataMaskingPolicy.routine) {
              console.log(
                `    Data Masking Routine: ${dataPolicy.dataMaskingPolicy.routine}`,
              );
            }
          }
        }
    
        console.log(`Successfully listed ${dataPolicies.length} data policies.`);
      } catch (err) {
        if (err.code === status.NOT_FOUND) {
          console.error(
            `Error: The project or location '${location}' for project '${projectId}' was not found. ` +
              'Make sure the project ID and location are correct and that the BigQuery Data Policy API is enabled.',
          );
        } else if (err.code === status.PERMISSION_DENIED) {
          console.error(
            `Error: Permission denied when listing data policies for project '${projectId}' in location '${location}'. ` +
              'Make sure the authenticated account has the necessary permissions (For example, bigquery.datapolicies.list).',
          );
        } else {
          console.error(`Error listing data policies: ${err.message}`);
        }
      }
    }

    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.

    import google.api_core.exceptions
    from google.cloud import bigquery_datapolicies_v2
    
    client = bigquery_datapolicies_v2.DataPolicyServiceClient()
    
    
    def list_data_policies(project_id: str, location: str) -> None:
        """Lists all data policies in a specified project.
    
        Args:
            project_id: The Google Cloud project ID.
            location: The geographic location of the data policies (for example, "us", "us-central1").
        """
    
        parent = f"projects/{project_id}/locations/{location}"
    
        try:
            request = bigquery_datapolicies_v2.ListDataPoliciesRequest(parent=parent)
    
            print(
                f"Listing data policies for project '{project_id}' in location '{location}':"
            )
            page_result = client.list_data_policies(request=request)
    
            found_policies = False
            for data_policy in page_result:
                found_policies = True
                print(f"  Data Policy Name: {data_policy.name}")
                print(f"  Data Policy ID: {data_policy.data_policy_id}")
                print(f"  Data Policy Type: {data_policy.data_policy_type.name}")
                if data_policy.policy_tag:
                    print(f"  Policy Tag: {data_policy.policy_tag}")
                if data_policy.grantees:
                    print(f"  Grantees: {', '.join(data_policy.grantees)}")
                print("-" * 20)
    
            if not found_policies:
                print("No data policies found.")
    
        except google.api_core.exceptions.NotFound as e:
            print(f"Error: The specified project or location was not found or accessible.")
            print(f"Details: {e}")
            print(
                "Make sure the project ID and location are correct and you have the necessary permissions."
            )
        except Exception as e:
            print(f"An unexpected error occurred: {e}")
    
    

    Supprimer une stratégie de données

    Pour supprimer une règle relative aux données, procédez comme suit :

    Node.js

    Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js 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 Node.js.

    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.

    const {DataPolicyServiceClient} =
      require('@google-cloud/bigquery-datapolicies').v2;
    const {status} = require('@grpc/grpc-js');
    
    const client = new DataPolicyServiceClient();
    
    /**
     * Deletes a data policy from the BigQuery Data Policy API, which is identified by its project ID, location, and data policy ID.
     *
     * @param {string} projectId The Google Cloud project ID.
     * @param {string} location The Google Cloud location (For example, 'us').
     * @param {string} dataPolicyId The ID of the data policy to delete (For example, 'example-data-policy').
     */
    async function deleteDataPolicy(projectId, location, dataPolicyId) {
      const name = client.dataPolicyPath(projectId, location, dataPolicyId);
    
      const request = {
        name,
      };
    
      try {
        await client.deleteDataPolicy(request);
        console.log(`Successfully deleted data policy: ${name}`);
      } catch (err) {
        if (err.code === status.NOT_FOUND) {
          console.error(
            `Data policy ${name} not found. Make sure the data policy ID and location are correct.`,
          );
        } else {
          console.error(`Error deleting data policy ${name}:`, err.message);
        }
      }
    }

    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.api_core import exceptions as core_exceptions
    from google.cloud import bigquery_datapolicies_v2
    
    client = bigquery_datapolicies_v2.DataPolicyServiceClient()
    
    
    def delete_data_policy(project_id: str, location: str, data_policy_id: str) -> None:
        """Deletes a data policy from the BigQuery Data Policy APIs.
    
        Args:
            project_id: The Google Cloud project ID.
            location: The location of the data policy (for example, "us").
            data_policy_id: The ID of the data policy to delete.
        """
    
        name = client.data_policy_path(
            project=project_id, location=location, data_policy=data_policy_id
        )
    
        try:
            client.delete_data_policy(name=name)
            print(f"Successfully deleted data policy: {name}")
        except core_exceptions.NotFound:
            print(f"Data policy '{name}' not found. It may have already been deleted.")
        except Exception as e:
            print(f"Error deleting data policy '{name}': {e}")
    
    

    Utiliser des tags avec stratégie

    Cette section vous explique comment afficher, modifier et supprimer des tags avec stratégie.

    Afficher les tags avec stratégie

    Pour afficher les tags avec stratégie que vous avez créés pour une taxonomie, procédez comme suit :

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur la taxonomie dont vous souhaitez afficher les tags avec stratégie. La page Taxonomies affiche les tags avec stratégie de la taxonomie.

    Afficher les tags avec stratégie dans le schéma

    Vous pouvez afficher les tags avec stratégie appliqués à une table lorsque vous examinez le schéma de celle-ci. Vous pouvez afficher le schéma à l'aide de la console Google Cloud , de l'outil de ligne de commande bq, de l'API BigQuery et des bibliothèques clientes. Pour en savoir plus sur l'affichage du schéma, consultez la section Obtenir des informations sur la table.

    Afficher les autorisations sur les tags avec stratégie

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur le nom de la taxonomie qui contient les tags avec stratégie pertinents.

    3. Sélectionnez un ou plusieurs tags avec stratégie.

    4. Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations.

    5. Dans le panneau d'informations, vous pouvez voir les rôles et les comptes principaux pour les tags avec stratégie sélectionnés.

    Mettre à jour les autorisations sur les tags avec stratégie

    L'utilisateur ou le compte de service qui crée une taxonomie doit disposer du rôle "Administrateur de tags avec stratégie Data Catalog".

    Console

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur le nom de la taxonomie qui contient les tags avec stratégie pertinents.

    3. Sélectionnez un ou plusieurs tags avec stratégie.

    4. Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations.

    5. Dans le panneau d'informations, vous pouvez voir les rôles et les comptes principaux pour les tags avec stratégie sélectionnés. Ajoutez le rôle Administrateur de tags avec stratégie aux comptes qui créent et gèrent des tags avec stratégie. Ajoutez le rôle Lecteur détaillé aux comptes qui doivent avoir accès aux données protégées par le contrôle des accès au niveau des colonnes. Vous pouvez également utiliser ce panneau pour supprimer des rôles associés aux comptes ou modifier d'autres autorisations.

    6. Cliquez sur Enregistrer.

    API

    Appelez taxonomies.policytag.setIamPolicy pour accorder l'accès à un tag avec stratégie en attribuant les comptes principaux aux rôles appropriés.

    Récupérer les noms de ressources de tags avec stratégie

    Vous avez besoin du nom de ressource d'un tag avec stratégie lorsque vous appliquez ce tag à une colonne.

    Pour récupérer le nom de ressource du tag avec stratégie, procédez comme suit :

    1. Affichez les tags avec stratégie pour la taxonomie contenant le tag avec stratégie.

    2. Recherchez le tag avec stratégie dont vous souhaitez copier le nom de ressource.

    3. Cliquez sur l'icône Copier le nom de la ressource de tag avec stratégie.

      Copier le nom de la ressource.

    Supprimer des tags avec stratégie

    Mettez à jour le schéma de la table pour supprimer un tag avec stratégie d'une colonne. Vous pouvez utiliser la consoleGoogle Cloud , l'outil de ligne de commande bq et la méthode d'API BigQuery pour supprimer un tag avec stratégie d'une colonne.

    Console

    Sur la page Current schema (Schéma actuel), sous Policy tags (Tags avec stratégie), cliquez sur X.

    Supprimer le tag avec stratégie.

    bq

    1. Récupérez le schéma et enregistrez-le dans un fichier local.

      bq show --schema --format=prettyjson \
         project-id:dataset.table > schema.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 est le nom de la table que vous mettez à jour.
    2. Modifiez le fichier schema.json pour supprimer un tag avec stratégie d'une colonne.

      [
       ...
       {
         "name": "ssn",
         "type": "STRING",
         "mode": "REQUIRED",
         "policyTags": {
           "names": []
         }
       },
       ...
      ]
    3. Mettez à jour le schéma.

      bq update \
         project-id:dataset.table schema.json

    API

    Appelez tables.patch et utilisez la propriété schema pour supprimer un tag avec stratégie dans votre définition de schéma. Consultez l'exemple de schéma de ligne de commande pour savoir comment supprimer un tag avec stratégie.

    Étant donné que la méthode tables.update remplace l'intégralité de la ressource de table, la méthode tables.patch est à privilégier.

    Supprimer des tags avec stratégie

    Vous pouvez supprimer un ou plusieurs tags avec stratégie dans une taxonomie, ou supprimer la taxonomie et tous les tags avec stratégie qu'elle contient. La suppression d'un tag avec stratégie supprime automatiquement l'association entre le tag avec stratégie et les colonnes auxquelles il a été appliqué.

    Lorsque vous supprimez un tag avec stratégie auquel une stratégie de données est associée, la suppression de la stratégie de données peut prendre jusqu'à 30 minutes. Vous pouvez supprimer la stratégie de données directement si vous souhaitez qu'elle soit immédiatement supprimée.

    Pour supprimer un ou plusieurs tags avec stratégie d'une taxonomie, procédez comme suit :

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur le nom de la taxonomie contenant les tags à supprimer.
    3. Cliquez sur Modifier.
    4. Cliquez sur  à côté des tags avec stratégie à supprimer.
    5. Cliquez sur Enregistrer.
    6. Cliquez sur Confirmer.

    Pour supprimer une taxonomie entière, procédez comme suit :

    1. Ouvrez la page Catégories de tags avec stratégie dans la consoleGoogle Cloud .

      Ouvrir la page Catégories de tags avec stratégie

    2. Cliquez sur le nom de la taxonomie contenant les tags à supprimer.
    3. Cliquez sur Supprimer la taxonomie de tag avec stratégie.
    4. Saisissez le nom de la taxonomie, puis cliquez sur Supprimer.

    Interroger les données à l'aide du contrôle des accès au niveau des colonnes

    Si un utilisateur dispose d'un accès à un ensemble de données et possède le rôle "Lecteur détaillé Data Catalog", il peut accéder aux données des colonnes. L'utilisateur exécute une requête selon la procédure habituelle.

    Si un utilisateur dispose d'un accès à un ensemble de données, mais ne possède pas le rôle "Lecteur détaillé Data Catalog", il ne peut pas accéder aux données des colonnes. Si cet utilisateur exécute SELECT *, il reçoit une erreur qui répertorie les colonnes auxquelles il ne peut pas accéder. Pour résoudre cette erreur, vous pouvez :

    • Modifier la requête pour exclure les colonnes auxquelles l'utilisateur n'a pas accès. Par exemple, si l'utilisateur n'a pas accès à la colonne ssn, mais a accès aux colonnes restantes, il peut exécuter la requête suivante :

      SELECT * EXCEPT (ssn) FROM ...

      Dans l'exemple précédent, la clause EXCEPT exclut la colonne ssn.

    • demander à un administrateur Data Catalog d'ajouter l'utilisateur en tant que lecteur détaillé Data Catalog à la classe de données correspondante. Le message d'erreur fournit le nom complet du tag avec stratégie auquel l'utilisateur aurait besoin d'accéder.

    FAQ

    La sécurité au niveau des colonnes de BigQuery fonctionne-t-elle pour les vues ?

    Oui. Les vues sont dérivées d'une table sous-jacente. Le même contrôle des accès au niveau des colonnes sur la table s'applique lorsque les colonnes protégées sont accessibles via une vue.

    Il existe deux types de vues dans BigQuery : les vues logiques et les vues autorisées. Les deux types de vues sont dérivés d'une table source et sont cohérents avec le contrôle des accès au niveau des colonnes de la table.

    Pour en savoir plus, consultez Vues autorisées.

    Le contrôle des accès au niveau des colonnes fonctionne-t-il sur les colonnes STRUCT ou RECORD ?

    Oui. Vous ne pouvez appliquer des tags avec stratégie qu'à des champs feuille, et seuls ces champs sont protégés.

    Puis-je utiliser l'ancien SQL et GoogleSQL ?

    Vous pouvez utiliser GoogleSQL pour interroger des tables protégées par le contrôle des accès au niveau des colonnes.

    Toutes les requêtes en ancien SQL sont rejetées s'il existe des tags avec stratégie dans les tables cibles.

    Les requêtes sont-elles journalisées dans Cloud Logging ?

    La vérification des tags avec stratégie Cloud IAM est journalisée dans Logging. Pour plus d'informations, consultez la section Journaux d'audit pour le contrôle des accès au niveau des colonnes.

    La copie d'une table est-elle affectée par le contrôle des accès au niveau des colonnes ?

    Oui. Vous ne pouvez pas copier de colonnes si vous n'y avez pas accès.

    Les opérations suivantes vérifient les autorisations au niveau des colonnes.

    Lorsque je copie des données dans une nouvelle table, les tags avec stratégie sont-ils automatiquement propagés ?

    Dans la plupart des cas, non. Si vous copiez les résultats d'une requête dans une nouvelle table, aucun tag avec stratégie n'est attribué automatiquement à la nouvelle table. La nouvelle table ne dispose donc pas d'un contrôle des accès au niveau des colonnes. Il en va de même si vous exportez des données vers Cloud Storage.

    La seule exception est si vous utilisez une tâche de copie de table. Étant donné que les tâches de copie de table n'appliquent aucune transformation de données, les tags avec stratégie sont automatiquement propagés vers les tables cibles. Cette exception ne s'applique pas aux jobs de copie de tables interrégionales, car ils ne sont pas compatibles avec la copie de tags avec stratégie.

    Le contrôle des accès au niveau des colonnes est-il compatible avec le cloud privé virtuel ?

    Oui, le contrôle des accès au niveau des colonnes et le VPC sont compatibles et complémentaires.

    Le cloud privé virtuel exploite Cloud IAM pour contrôler les accès aux services, tels que BigQuery et Cloud Storage. Le contrôle des accès au niveau des colonnes offre une sécurité précise des colonnes individuelles dans BigQuery.

    Pour appliquer le VPC aux tags avec stratégie et aux stratégies de données pour le contrôle des accès au niveau des colonnes et le masquage dynamique des données, vous devez limiter les API suivantes dans le périmètre :

    Résoudre les problèmes

    Je ne vois pas les rôles Data Catalog

    Si vous ne voyez pas les rôles tels que "Lecteur détaillé Data Catalog", il est possible que vous n'ayez pas activé l'API Data Catalog dans votre projet. Pour en savoir plus sur l'activation de l'API Data Catalog, consultez la section Avant de commencer. Les rôles Data Catalog doivent apparaître quelques minutes après l'activation de l'API Data Catalog.

    Je ne peux pas afficher la page "Taxonomies"

    Vous devez disposer d'autorisations supplémentaires pour afficher la page Taxonomies. Par exemple, le rôle Administrateur de tags avec stratégie Data Catalog a accès à la page Taxonomies.

    J'ai appliqué des tags avec stratégie, mais cela ne semble pas fonctionner

    Si vous continuez à recevoir des résultats de requête pour un compte qui ne devrait pas disposer d'un accès, il est possible que ce compte reçoive des résultats mis en cache. Plus précisément, si vous avez précédemment exécuté la requête avec succès, puis appliqué des tags avec stratégie, vous pouvez obtenir des résultats provenant du cache des résultats de requête. Par défaut, les résultats de requête sont mis en cache pendant 24 heures. La requête devrait échouer immédiatement si vous désactivez le cache des résultats. Pour plus d'informations sur la mise en cache, consultez la section Impact du contrôle des accès au niveau des colonnes.

    En règle générale, la propagation des mises à jour de Cloud IAM prend environ 30 secondes. La propagation des modifications apportées à la hiérarchie des tags avec stratégie peut prendre jusqu'à 30 minutes.

    Je ne dispose pas de l'autorisation de lire dans une table avec une sécurité définie au niveau des colonnes

    Vous devez disposer du rôle Lecteur détaillé ou du rôle Lecteur masqué à différents niveaux, par exemple au niveau de l'organisation, du dossier, du projet et du tag avec stratégie. Le rôle Lecteur détaillé accorde l'accès aux données brutes, tandis que le rôle Lecteur masqué accorde l'accès aux données masquées. Vous pouvez vérifier cette autorisation au niveau du projet à l'aide de l'outil de dépannage IAM.

    J'ai défini un contrôle des accès précis dans la taxonomie des tags avec stratégie, mais les utilisateurs voient des données protégées

    Pour résoudre ce problème, vérifiez les points suivants :

    • Sur la page Taxonomie de tags avec stratégie, vérifiez que le bouton Appliquer le contrôle des accès est bien activé.
    • Assurez-vous que vos requêtes n'utilisent pas de résultats de requête mis en cache. Si vous utilisez l'outil d'interface de ligne de commande bq pour tester vos requêtes, vous devez utiliser --nouse_cache flag pour désactiver le cache de requêtes. Exemple :

      bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"