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 :
- Google Cloud Console
- La commande
bq update
- La méthode d'API
datasets.update
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
Dans la console Google Cloud, accédez à la page BigQuery.
Dans le panneau Explorateur, développez votre projet et sélectionnez l'ensemble de données contenant les données que vous souhaitez partager.
Cliquez sur l'icône
Actions, puis sélectionnez Ouvrir.Dans le volet Détails qui s'affiche, cliquez sur Partager et sélectionnez l'option Autoriser les ensembles de données.
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
Cliquez sur Ajouter une autorisation, puis sur Fermer.
bq
Ouvrez Cloud Shell.
É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
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" } } ]
Mettez à jour l'ensemble de données partagé à l'aide de la commande
bq update
. Exemple :bq update --source FILE_PATH PROJECT:SHARED_DATASET
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
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.Ajoutez l'ensemble de données que vous souhaitez autoriser dans la section
access
des métadonnées JSON renvoyées dans la ressourceDataset
, comme suit :"access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ]
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.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
Dans la console Google Cloud, accédez à la page BigQuery.
Dans le panneau Explorateur, développez votre projet et sélectionnez l'ensemble de données partagé.
Cliquez sur l'icône
Actions, puis sélectionnez Ouvrir.Dans le volet Détails qui s'affiche, cliquez sur Partager et sélectionnez l'option Autoriser les ensembles de données.
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.
Cliquez sur l'icône de suppression à côté de l'ensemble de données autorisé que vous souhaitez supprimer, puis sur Fermer.
bq
Ouvrez Cloud Shell.
É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
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" } }
Mettez à jour l'ensemble de données partagé à l'aide de la commande
bq update
. Exemple :bq update --source FILE_PATH PROJECT:SHARED_DATASET
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
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.Supprimez l'ensemble de données autorisé de la section
access
du fichier JSON renvoyé dans la ressourceDataset
. Exemple :{ "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } }
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.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 :
Attribuez le rôle
bigquery.dataViewer
à l'utilisateur pour l'ensemble de donnéespublic_dataset
. Ce rôle inclut l'autorisationbigquery.tables.getData
, qui permet à l'utilisateur d'interroger les vues dans l'ensemble de donnéespublic_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 tableprivate_table
dansprivate_dataset
. Si l'utilisateur tente d'interroger directement la tableprivate_table
ou s'il tente indirectement d'accéder à la tableprivate_table
en interrogeant la vueprivate_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.
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.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éesprivate_dataset
, ce qui autorise les vues de l'ensemble de donnéespublic_dataset
à interroger les données de l'ensemble de donnéesprivate_dataset
.L'utilisateur peut désormais interroger la vue
private_table_filtered
dans l'ensemble de donnéespublic_dataset
, ce qui lui permet d'accéder indirectement à l'ensemble de donnéesprivate_dataset
sans l'autoriser à accéder directement aux données de l'ensemble de donnéesprivate_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.