Ensembles de données autorisés

Ce document explique comment utiliser des ensembles de données autorisés dans BigQuery. Un ensemble de données autorisé vous permet d'autoriser toutes les vues d'un ensemble de données spécifié à accéder aux données d'un deuxième ensemble de données. Avec un ensemble de données autorisé, vous n'avez pas besoin de configurer de vues autorisées individuelles.

Vous pouvez créer un ensemble de données autorisé dans BigQuery à l'aide des outils suivants :

Présentation

Une vue dans BigQuery est une table virtuelle définie par une requête SQL. Par exemple, la requête d'une vue peut ne renvoyer qu'un sous-ensemble de colonnes d'une table, en excluant par exemple les colonnes contenant des informations personnelles. Pour interroger une vue, un utilisateur doit avoir accès aux ressources auxquelles la requête accède.

Si vous souhaitez autoriser les utilisateurs à interroger une vue, sans leur donner un accès direct aux ressources référencées par la vue, vous pouvez utiliser une vue autorisée. Une vue autorisée vous permet, par exemple, de partager des données plus limitées avec des groupes ou des utilisateurs spécifiés (comptes principaux) dans une vue, sans autoriser les comptes principaux à accéder à toutes les données sous-jacentes. Pour ce faire, vous devez autoriser les comptes principaux à accéder à la vue, et permettre à la vue d'accéder à l'ensemble de données contenant les données sous-jacentes.

Si vous souhaitez autoriser un ensemble de vues à accéder à un ensemble de données sans avoir à autoriser individuellement chaque vue, vous pouvez regrouper les vues dans un ensemble de données puis autoriser l'ensemble de données qui contient les vues à accéder à l'ensemble de données contenant les données. Vous pouvez ensuite accorder aux comptes principaux l'accès à l'ensemble de données contenant les vues, ou à des vues individuelles de l'ensemble de données, le cas échéant. Un ensemble de données ayant accès à un autre ensemble de données est appelé ensemble de données autorisé. L'ensemble de données qui autorise un autre ensemble de données à accéder à ses données est appelé ensemble de données partagé.

Autorisations et rôles requis

Pour autoriser un ensemble de données ou révoquer l'autorisation d'un ensemble de données, vous devez disposer des autorisations IAM (Identity and Access Management) suivantes, qui vous permettent de mettre à jour la liste de contrôle d'accès de l'ensemble de données que vous partagez.

Une fois qu'un ensemble de données est autorisé, vous avez besoin de ces mêmes autorisations si vous souhaitez créer ou mettre à jour des vues dans l'ensemble de données autorisé. Pour en savoir plus, consultez la page Créer ou mettre à jour une vue dans un ensemble de données autorisé.

Autorisation Ressource
bigquery.datasets.get L'ensemble de données que vous partagez.
bigquery.datasets.update L'ensemble de données que vous partagez.

Les rôles IAM prédéfinis suivants fournissent les autorisations requises.

Rôle Ressource
bigquery.dataOwner L'ensemble de données que vous partagez.
bigquery.admin L'ensemble de données que vous partagez.

Quotas et limites

Les ensembles de données autorisés sont soumis à des limites. Pour en savoir plus, consultez la section Limites des ensembles de données.

Autoriser un ensemble de données

Vous pouvez autoriser les vues actuelles et futures d'un ensemble de données à accéder à un autre ensemble de données. Pour ce faire, ajoutez l'ensemble de données à la liste d'accès de l'ensemble de données que vous souhaitez partager, comme suit :

Console

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

    Accéder à BigQuery

  2. Dans le panneau Explorateur, développez votre projet et sélectionnez l'ensemble de données contenant les données que vous souhaitez partager.

  3. Cliquez sur l'icône Actions, puis sélectionnez Ouvrir.

  4. Dans le volet Détails qui s'affiche, cliquez sur Partager et sélectionnez l'option Autoriser les ensembles de données.

    Autoriser un ensemble de données

  5. Dans le volet Ensemble de données autorisé qui s'affiche, saisissez l'ID de l'ensemble de données que vous souhaitez autoriser, au format suivant :

    PROJECT.AUTHORIZED_DATASET

    Exemple :

    myProject.myDataset

  6. Cliquez sur Ajouter une autorisation, puis sur Fermer.

bq

  1. Ouvrez Cloud Shell.

    Accéder à Cloud Shell

  2. Écrivez les métadonnées existantes (y compris la liste de contrôle d'accès) pour l'ensemble de données que vous souhaitez partager dans un fichier JSON à l'aide de la commande bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
    
  3. Utilisez un éditeur de texte pour ajouter l'ensemble de données que vous souhaitez autoriser dans la section access existante du fichier JSON créé à l'adresse FILE_PATH.

    Par exemple :

     "access": [
       ...
       {
         "dataset": {
           "dataset": {
             "project_id": "PROJECT",
             "dataset_id": "AUTHORIZED_DATASET"
           },
           "target_types": "VIEWS"
         }
       }
     ]
    

  4. Mettez à jour l'ensemble de données partagé à l'aide de la commande bq update. Exemple :

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
    
  5. Pour vérifier que l'ensemble de données autorisé a été ajouté, saisissez à nouveau la commande bq show. Exemple :

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Get the current metadata for the dataset you want to share by calling the datasets.get method, as follows:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
    
    .

    Le corps de la réponse retourne une ressource Dataset qui contient les métadonnées JSON de l'ensemble de données.

  2. Ajoutez l'ensemble de données que vous souhaitez autoriser dans la section access des métadonnées JSON renvoyées dans la ressource Dataset, comme suit :

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
    
  3. Utilisez la méthode datasets.update pour mettre à jour l'ensemble de données avec l'autorisation ajoutée :

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
    

    Incluez la ressource Dataset mise à jour dans le corps de la requête.

  4. Vous pouvez vérifier que l'ensemble de données autorisé a été ajouté en appelant à nouveau la méthode datasets.get.

Révoquer l'autorisation d'un ensemble de données

Lorsque vous supprimez un ensemble de données autorisé à accéder à un autre ensemble de données source, la prise en compte complète de la modification dans les listes de contrôle d'accès (LCA) de l'ensemble de données source peut prendre jusqu'à 24 heures. Pendant ce temps :

  • Vous ne pourrez plus accéder aux données sources via l'ensemble de données supprimé.
  • L'ensemble de données supprimé peut toujours apparaître dans la LCA de l'ensemble de données source et être comptabilisé dans les limites de l'ensemble de données autorisé. Cela peut vous empêcher de créer des ensembles de données autorisés tant que la LCA n'est pas mise à jour.

Pour révoquer l'accès accordé aux vues d'un ensemble de données autorisé, supprimez l'ensemble de données autorisé de la liste d'accès de l'ensemble de données partagé, comme suit :

Console

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

    Accéder à BigQuery

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

  3. Cliquez sur l'icône Actions, puis sélectionnez Ouvrir.

  4. Dans le volet Détails qui s'affiche, cliquez sur Partager et sélectionnez l'option Autoriser les ensembles de données.

    Autoriser un ensemble de données

  5. Dans le volet Ensemble de données autorisé qui s'affiche, recherchez l'entrée de l'ensemble de données autorisé dans la section Ensembles de données actuellement autorisés.

  6. Cliquez sur l'icône de suppression à côté de l'ensemble de données autorisé que vous souhaitez supprimer, puis sur Fermer.

bq

  1. Ouvrez Cloud Shell.

    Accéder à Cloud Shell

  2. Écrivez les métadonnées existantes (y compris la liste de contrôle d'accès) de l'ensemble de données partagé dans un fichier JSON à l'aide de la commande bq show.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
    
  3. Utilisez un éditeur de texte pour supprimer l'ensemble de données autorisé de la section access du fichier JSON créé à l'adresse FILE_PATH, comme suit :

       {
         "dataset": {
           "dataset": {
             "project_id": "PROJECT",
             "dataset_id": "AUTHORIZED_DATASET"
           },
           "target_types": "VIEWS"
         }
       }
    
  4. Mettez à jour l'ensemble de données partagé à l'aide de la commande bq update. Exemple :

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
    
  5. Pour vérifier que l'ensemble de données autorisé a été supprimé, saisissez à nouveau la commande bq show. Exemple :

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. Get the current metadata for the shared dataset by calling the datasets.get method, as follows:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
    
    .

    Le corps de la réponse retourne une ressource Dataset qui contient les métadonnées JSON de l'ensemble de données.

  2. Supprimez l'ensemble de données autorisé de la section access du fichier JSON renvoyé dans la ressource Dataset. Exemple :

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    
  3. Utilisez la méthode datasets.update pour mettre à jour l'ensemble de données avec l'autorisation supprimée :

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
    

    Incluez la ressource Dataset mise à jour dans le corps de la requête.

  4. Vous pouvez vérifier que l'ensemble de données autorisé a été supprimé en appelant à nouveau la méthode datasets.get.

Créer ou mettre à jour une vue dans un ensemble de données autorisé

Pour créer ou mettre à jour une vue dans un ensemble de données autorisé, vous devez disposer des autorisations listées dans Autorisations et rôles requis pour l'ensemble de données partagé, en plus des autorisations requises pour créer ou mettre à jour une vue dans un ensemble de données standard.

Le tableau suivant récapitule les autorisations IAM (Identity and Access Management) requises pour créer ou mettre à jour une vue qui se trouve dans un ensemble de données autorisé :

Autorisation Ressource
bigquery.datasets.get L'ensemble de données que vous partagez.
bigquery.datasets.update L'ensemble de données que vous partagez.
bigquery.tables.getData Toutes les tables ou vues de l'ensemble de données partagé référencées dans la nouvelle vue que vous créez ou mettez à jour.
bigquery.tables.create L'ensemble de données autorisé dans lequel vous créez une vue.
bigquery.tables.update L'ensemble de données autorisé dans lequel vous mettez à jour une vue.

Vous n'avez pas besoin d'autorisations supplémentaires pour supprimer une vue d'un ensemble de données autorisé.

Interroger une vue dans un ensemble de données autorisé

Pour interroger une vue dans un ensemble de données autorisé, un utilisateur doit avoir accès à la vue mais pas nécessairement à l'ensemble de données partagé.

Pour en savoir plus, consultez la page Vues autorisées.

Exemple d'ensemble de données autorisé

L'exemple suivant montre comment créer et utiliser un ensemble de données autorisé.

Supposons que vous disposez de deux ensembles de données nommés private_dataset et public_dataset. L'ensemble de données private_dataset contient une table nommée private_table. L'ensemble de données public_dataset contient une vue nommée private_table_filtered. La vue private_table_filtered est basée sur une requête qui ne renvoie que certains champs de la table private_table.

Vous pouvez autoriser un utilisateur à accéder aux données renvoyées par la vue private_table_filtered sans qu'il n'ait accès à toutes les données de la table private_table, en procédant comme suit :

  1. Attribuez le rôle bigquery.dataViewer à l'utilisateur pour l'ensemble de données public_dataset. Ce rôle inclut l'autorisation bigquery.tables.getData, qui permet à l'utilisateur d'interroger les vues dans l'ensemble de données public_dataset. Pour savoir comment attribuer un rôle à un utilisateur pour un ensemble de données, consultez la page Contrôler l'accès aux ensembles de données.

    L'utilisateur est désormais autorisé à interroger les vues dans public_dataset, mais il ne peut toujours pas accéder à la table private_table dans private_dataset. Si l'utilisateur tente d'interroger directement la table private_table ou s'il tente indirectement d'accéder à la table private_table en interrogeant la vue private_table_filtered, il reçoit un message d'erreur semblable à celui-ci :

    Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.

  2. Sur la page BigQuery de Google Cloud Console, ouvrez l'ensemble de données private_dataset, cliquez sur Partage puis sélectionnezAutoriser les ensembles de données.

  3. Dans le panneau Ensemble de données autorisé qui s'affiche, saisissez PROJECT.public_dataset dans le champ ID de l'ensemble de données puis cliquez sur Ajouter une autorisation.

    L'ensemble de données public_dataset est ajouté à la liste de contrôle d'accès de l'ensemble de données private_dataset, ce qui autorise les vues de l'ensemble de données public_dataset à interroger les données de l'ensemble de données private_dataset.

    L'utilisateur peut désormais interroger la vue private_table_filtered dans l'ensemble de données public_dataset, ce qui lui permet d'accéder indirectement à l'ensemble de données private_dataset sans l'autoriser à accéder directement aux données de l'ensemble de données private_dataset.

Limites

  • Vous pouvez créer des ensembles de données autorisés dans différentes régions, mais BigQuery n'est pas compatible avec les requêtes interrégionales. Par conséquent, nous vous recommandons de créer des ensembles de données dans la même région.

Étapes suivantes

  • Pour en savoir plus sur l'autorisation d'accéder à des données individuelles dans un ensemble de données via une vue individuelle, consultez la page Vues autorisées.

  • Pour en savoir plus sur l'autorisation d'accéder à des données d'un ensemble de données à partir d'une fonction de table ou d'une fonction définie par l'utilisateur, consultez la page Fonctions autorisées.