Vues autorisées

Ce document explique comment créer des vues autorisées et des vues matérialisées autorisées dans BigQuery.

Présentation

En tant qu'administrateur de données, vous pouvez créer une vue autorisée pour partager un sous-ensemble de données d'un ensemble de données avec des utilisateurs et des groupes (principaux) spécifiques. Les principaux peuvent afficher les données que vous partagez et exécuter des requêtes sur celles-ci, mais ils ne peuvent pas accéder directement à l'ensemble de données source.

Types de vues

Une vue logique est le type de vue par défaut pour BigQuery. Une vue matérialisée est une vue précalculée qui met régulièrement en cache les résultats d'une requête pour améliorer les performances et l'efficacité.

Une vue autorisée pour une vue logique est appelée "vue autorisée", mais une vue autorisée pour une vue matérialisée est appelée vue matérialisée autorisée.

Si une vue logique repose sur une requête volumineuse ou exigeante en puissance de calcul, vous pouvez créer une vue matérialisée à la place. Toutefois, interroger uniquement un sous-ensemble de vos données ou utiliser d'autres techniques peut souvent améliorer les performances sans avoir à créer de vue matérialisée.

Pour en savoir plus, consultez les ressources suivantes :

Étapes générales pour créer des vues autorisées

Pour créer et partager une vue, suivez ces étapes générales, qui sont les mêmes pour les vues logiques autorisées et les vues matérialisées autorisées.

  • Créez un ensemble de données contenant vos données sources.
  • Exécutez une requête pour charger des données dans une table de destination de l'ensemble de données source.
  • Créez un ensemble de données contenant votre vue autorisée.
  • Créez une vue autorisée à partir d'une requête SQL qui limite les colonnes que vos analystes de données peuvent voir dans les résultats de la requête.
  • Accordez à vos analystes de données l'autorisation d'exécuter des tâches de requête.
  • Accordez à vos analystes de données l'accès à l'ensemble de données contenant la vue autorisée.
  • Autorisez la vue autorisée à accéder à l'ensemble de données source.

Alternatives

Bien que les vues autorisées soient flexibles et évolutives, l'une des méthodes suivantes peut mieux s'appliquer à votre cas d'utilisation :

  • Définir des règles au niveau des lignes dans une table.
  • Définir des règles au niveau des colonnes dans une table.
  • Stockez les données dans une table distincte.
  • Partagez toutes les vues d'un ensemble de données (ensembles de données autorisés).

Utiliser la sécurité au niveau des lignes ou des colonnes, ou des tables distinctes

En définissant des règles d'accès au niveau des lignes dans une table ou en créant une table distincte pour stocker les données sensibles, un administrateur de données peut limiter la capacité d'un utilisateur à afficher ces données. Le stockage des données dans une table distincte les isole et empêche de voir le nombre de lignes qu'elle contient.

De plus, en créant et en appliquant des tags avec stratégie, un administrateur de données peut limiter la capacité de l'utilisateur à afficher les colonnes d'un tableau.

Le stockage des données dans une table distincte est la méthode la plus sécurisée, mais la moins flexible. La définition de règles au niveau des lignes est flexible et sécurisée, tandis que le partage de vues autorisées est flexible et offre les meilleures performances.

Pour comparer ces méthodes en détail, consultez les ressources suivantes :

Partager toutes les vues d'un ensemble de données

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 le groupe de 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é.

Pour en savoir plus, consultez Ensembles de données autorisés et Autoriser un ensemble de données.

Limites

  • Lorsque vous créez une vue autorisée ou une vue matérialisée autorisée dans un autre ensemble de données, l'ensemble de données source et celui de la vue autorisée doivent se trouver dans le même emplacement régional.
  • Lorsque vous supprimez une vue autorisée, sa suppression de la liste des vues peut prendre jusqu'à 24 heures. Pendant ce délai, vous ne pouvez plus accéder à la vue autorisée, mais elle peut tout de même apparaître dans la liste des vues et est comptabilisée dans la limite de vues autorisées. Cette limite peut empêcher la création de vues autorisées supplémentaires si la nouvelle vue autorisée entraîne un dépassement de cette limite.

Avant de commencer

Attribuez des rôles IAM (Identity and Access Management) qui accordent aux utilisateurs les autorisations nécessaires pour interroger les vues autorisées ou les vues matérialisées autorisées que vous partagez.

Rôles requis

Pour créer ou mettre à jour une vue autorisée, vous devez disposer d'autorisations sur l'ensemble de données qui contient la vue et sur celui qui lui donne accès.

Vous devez également accorder aux utilisateurs ou aux groupes l'accès au projet et à l'ensemble de données contenant la vue.

Autorisations d'administrateur sur l'ensemble de données contenant la vue

Les vues sont traitées comme des ressources de table dans BigQuery. Par conséquent, la création d'une vue nécessite les mêmes autorisations que la création d'une table. Vous devez également être autorisé à interroger les tables référencées par la requête SQL de la vue.

Pour créer une vue, vous avez besoin de l'autorisation IAM bigquery.tables.create. Le rôle IAM prédéfini roles/bigquery.dataEditor inclut les autorisations dont vous avez besoin pour créer une vue.

En outre, si vous disposez de l'autorisation bigquery.datasets.create, vous pouvez créer des vues dans les ensembles de données que vous créez. Pour créer une vue pour des données qui ne vous appartiennent pas, vous devez disposer de l'autorisation bigquery.tables.getData pour cette table.

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.

Autorisations d'administrateur sur le deuxième ensemble de données donnant accès à la vue

Pour mettre à jour les propriétés d'un ensemble de données, vous devez disposer des autorisations IAM suivantes :

  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy (obligatoire uniquement lors de la mise à jour des contrôles d'accès d'un ensemble de données dans la console Google Cloud )

Le rôle IAM prédéfini roles/bigquery.dataOwner inclut les autorisations dont vous avez besoin pour mettre à jour les propriétés d'un ensemble de données.

En outre, si vous disposez de l'autorisation bigquery.datasets.create, vous pouvez mettre à jour les propriétés des ensembles de données que vous créez.

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.

Autorisations utilisateur sur le projet et l'ensemble de données pour la vue

Pour partager une vue autorisée avec des utilisateurs ou des groupes, vous devez leur accorder les autorisations IAM suivantes :

  • Le rôle Cloud IAM roles/bigquery.user pour le projet contenant la vue autorisée.
  • Le rôle IAM roles/bigquery.dataViewer pour l'ensemble de données contenant la vue autorisée.

Utiliser des vues autorisées

Les sections suivantes décrivent comment utiliser les vues autorisées et les vues matérialisées autorisées.

Créer une vue autorisée

Pour créer une vue autorisée, choisissez l'une des options suivantes. Pour obtenir la procédure complète permettant d'autoriser, de partager et de supprimer une vue autorisée, consultez le tutoriel Créer une vue autorisée.

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez la requête sur laquelle vous souhaitez baser la vue autorisée.

  3. Cliquez sur Enregistrer > Enregistrer la vue.

  4. Dans la boîte de dialogue Enregistrer la vue, procédez comme suit :

    1. Dans le champ Projet, saisissez le projet dans lequel enregistrer la vue.

    2. Pour Ensemble de données, saisissez l'ensemble de données dans lequel enregistrer la vue. Il doit s'agir d'un ensemble de données différent de celui utilisé dans la requête source.

    3. Dans Table, saisissez le nom de la vue.

    4. Cliquez sur Enregistrer.

  5. Accordez les autorisations nécessaires aux utilisateurs qui peuvent utiliser la vue autorisée.

  6. Dans le volet Explorateur, sélectionnez l'ensemble de données utilisé dans la requête source.

  7. Dans le volet Détails, cliquez sur Partage > Autoriser les vues.

  8. Dans le volet Vues autorisées, saisissez le nom complet de la vue dans le champ Vue autorisée, au format PROJECT_ID.DATASET_ID.VIEW_NAME.

  9. Cliquez sur Ajouter une autorisation.

Terraform

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.

# Creates an authorized view.

# Create a dataset to contain the view.
resource "google_bigquery_dataset" "view_dataset" {
  dataset_id  = "view_dataset"
  description = "Dataset that contains the view"
  location    = "us-west1"
}

# Create the view to authorize.
resource "google_bigquery_table" "movie_view" {
  project     = google_bigquery_dataset.view_dataset.project
  dataset_id  = google_bigquery_dataset.view_dataset.dataset_id
  table_id    = "movie_view"
  description = "View to authorize"

  view {
    query          = "SELECT item_id, avg(rating) FROM `movie_project.movie_dataset.movie_ratings` GROUP BY item_id ORDER BY item_id;"
    use_legacy_sql = false
  }
}


# Authorize the view to access the dataset
# that the query data originates from.
resource "google_bigquery_dataset_access" "view_authorization" {
  project    = "movie_project"
  dataset_id = "movie_dataset"

  view {
    project_id = google_bigquery_table.movie_view.project
    dataset_id = google_bigquery_table.movie_view.dataset_id
    table_id   = google_bigquery_table.movie_view.table_id
  }
}

# Specify the IAM policy for principals that can access
# the authorized view. These users should already
# have the roles/bigqueryUser role at the project level.
data "google_iam_policy" "principals_policy" {
  binding {
    role = "roles/bigquery.dataViewer"
    members = [
      "group:[email protected]",
    ]
  }
}

# Set the IAM policy on the authorized  view.
resource "google_bigquery_table_iam_policy" "authorized_view_policy" {
  project     = google_bigquery_table.movie_view.project
  dataset_id  = google_bigquery_table.movie_view.dataset_id
  table_id    = google_bigquery_table.movie_view.table_id
  policy_data = data.google_iam_policy.principals_policy.policy_data
}

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.

Gérer les utilisateurs ou les groupes pour les vues autorisées

Après avoir autorisé une vue, vous pouvez conserver l'accès à celle-ci en effectuant les tâches suivantes pour un ensemble de données, une table ou une vue :

  • Affichez la règle d'accès.
  • Accordez l'accès.
  • Révoquez l'accès.
  • Refusez l'accès.

Pour en savoir plus, consultez Contrôler l'accès aux ressources à l'aide d'IAM.

Supprimer une autorisation associée à une vue

Pour supprimer une autorisation d'affichage, sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery de la console Google Cloud .

    Accéder à BigQuery

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

  3. Cliquez sur Partage > Autoriser les vues.

  4. Cliquez sur  pour Supprimer l'autorisation.

  5. Cliquez sur Fermer.

bq

Pour supprimer l'autorisation d'une vue, utilisez la commande bq rm. Saisissez le table_id de la vue dont vous souhaitez supprimer l'autorisation.

    bq rm \
    project_id:dataset:table_id
    

API

Appelez la méthode tables.delete,puis utilisez les propriétés projectID, datasetID et tableID pour supprimer la vue autorisée pour votre ensemble de données. Pour en savoir plus, consultez Tables.

Quotas et limites

  • Les vues autorisées sont soumises à des limites. Pour en savoir plus, consultez la section Limites des ensembles de données.
  • Si vous supprimez une vue autorisée, la suppression de toutes les références à la vue dans le système peut prendre jusqu'à 24 heures. Pour éviter les erreurs, attendez 24 heures avant de réutiliser le nom d'une vue supprimée ou utilisez un nom unique.

Rubriques avancées

Les sections suivantes décrivent des méthodes avancées d'utilisation des vues autorisées.

Combiner la sécurité au niveau des lignes avec les vues autorisées

Les données affichées dans une vue logique ou une vue matérialisée sont filtrées en fonction des règles d'accès au niveau des lignes de la table source sous-jacente.

Pour en savoir plus sur l'interaction de la sécurité au niveau des lignes avec les vues matérialisées, consultez Utiliser la sécurité au niveau des lignes avec d'autres fonctionnalités BigQuery.

Combiner la sécurité au niveau des colonnes avec les vues autorisées

L'impact de la sécurité au niveau des colonnes sur une vue ne dépend pas du fait qu'il s'agisse ou non d'une vue autorisée.

Pour obtenir une description détaillée de l'application des autorisations, consultez Interroger des vues pour la sécurité au niveau des colonnes.

Utiliser le partage BigQuery avec des vues autorisées

BigQuery Sharing (anciennement Analytics Hub) est une plate-forme d'échange de données qui offre les fonctionnalités suivantes :

  • Vous permet de partager des données et des insights à grande échelle à travers les limites organisationnelles.
  • Utilise un framework de sécurité et de confidentialité robuste.
  • Permet de publier un ensemble de données BigQuery, appelé ensemble de données partagé, ainsi que ses vues et ensembles de données autorisés associés, auprès d'un ensemble d'abonnés.

Un ensemble de données associé est un ensemble de données BigQuery en lecture seule qui sert de pointeur ou de référence vers un ensemble de données partagé. L'abonnement à une fiche de partage crée un ensemble de données associé dans votre projet, et non une copie de l'ensemble de données. Les abonnés peuvent donc lire les données, mais ne peuvent pas lui ajouter des objets ni mettre à jour les objets qu'il contient.

Les vues matérialisées faisant référence à des tables de l'ensemble de données associé ne sont pas acceptées.

Pour en savoir plus, consultez Présentation du partage.

Étapes suivantes