Présentation de la sécurité au niveau des lignes de BigQuery

Ce document présente le concept de sécurité au niveau des lignes et explique comment l'utiliser pour sécuriser vos données, en plus d'autres informations.

Qu'est-ce que la sécurité au niveau des lignes ?

La sécurité au niveau des lignes vous permet de filtrer les données et d'accéder à des lignes spécifiques d'une table, en fonction des conditions éligibles de l'utilisateur.

BigQuery est déjà compatible avec les contrôles d'accès du projet, de l'ensemble de données et de la table, ainsi qu'avec la sécurité au niveau des colonnes à l'aide de tags avec stratégie. La sécurité au niveau des lignes étend le principe du moindre privilège en permettant un contrôle d'accès précis à un sous-ensemble de données d'une table BigQuery, au moyen de règles d'accès au niveau des lignes.

Une même table peut disposer de plusieurs règles d'accès au niveau des lignes. Les règles d'accès au niveau des lignes peuvent coexister sur une table avec une sécurité au niveau des colonnes, ainsi que des contrôles d'accès au niveau de l'ensemble de données, au niveau de la table et au niveau du projet.

Fonctionnement de la sécurité au niveau des lignes

En règle générale, la sécurité au niveau des lignes implique la création de règles d'accès au niveau des lignes sur une table BigQuery cible. Ces règles servent de filtres pour masquer ou afficher certaines lignes de données, selon qu'un utilisateur ou un groupe figure dans une liste autorisée. Les utilisateurs ou groupes ne figurant pas spécifiquement dans la liste des accès autorisés se voient refuser l'accès.

Un utilisateur autorisé, doté des rôles IAM (Identity and Access Management) administrateur BigQuery ou DataOwner, peut créer des règles d'accès au niveau des lignes sur une table BigQuery.

Lorsque vous créez une règle d'accès au niveau des lignes, vous spécifiez la table par son nom, et les utilisateurs ou groupes (désignés par le terme "grantee-list") peuvent accéder à certaines données de ligne. La règle inclut également les données suivant lesquelles filtrer, appelées filter_expression. La fonction filter_expression agit comme une clause WHERE dans une requête type.

Pour découvrir comment créer et utiliser une règle d'accès au niveau des lignes, consultez la page Utiliser la sécurité au niveau des lignes.

Consultez la documentation de référence sur le LDD pour connaître la syntaxe complète, l'utilisation et les options lors de la création de règles d'accès au niveau des lignes.

Exemples de cas d'utilisation

Filtrer les données de ligne en fonction de la région

Prenons l'exemple d'une table dataset1.table1 qui contient des lignes appartenant à différentes régions (indiquées par la colonne region).

La sécurité au niveau des lignes permet à un propriétaire de données ou à un administrateur de mettre en œuvre des règles, telles que "Les utilisateurs de group:apac ne peuvent voir que les partenaires de la région APAC."

Cas d'utilisation de la sécurité au niveau des lignes pour les régions

Par conséquent, les utilisateurs du groupe sales-apac@example.com ne peuvent afficher que les lignes où Region = "APAC". De même, les utilisateurs du groupe sales-us@example.com ne peuvent afficher que les lignes de la région US. Les utilisateurs qui ne font pas partie des groupes APAC ou US ne voient aucune ligne.

La règle d'accès au niveau des lignes nommée us_filter accorde l'accès à plusieurs entités, y compris au responsable commercial jon@example.com, qui peuvent toutes accéder aux lignes appartenant à US.

Filtrer les données de ligne en fonction de données sensibles

Prenons un cas d'utilisation différent, dans lequel nous disposons d'une table de données sur les salaires.

Cas d'utilisation de la sécurité au niveau des lignes pour les salaires

La méthode grantee_list limite les requêtes aux membres du domaine de l'entreprise. En outre, l'utilisation de la fonction SESSION_USER() limite davantage l'accès aux lignes appartenant à l'utilisateur exécutant la requête, en fonction de sa propre adresse e-mail. Dans ce cas, il s'agit de jim@example.com.

Quand utiliser la sécurité au niveau des lignes par rapport à d'autres méthodes ?

Les vues autorisées, les règles d'accès au niveau des lignes et le stockage des données dans des tables distinctes présentent différents niveaux de sécurité, de performances et de commodité. Il est important de choisir le mécanisme adéquat pour votre cas d'utilisation afin de garantir un niveau de sécurité approprié pour vos données.

Comparaison avec les vues autorisées : failles

La sécurité au niveau des lignes et l'application d'un accès au niveau des lignes avec une vue autorisée peuvent présenter des failles si elles sont utilisées de manière incorrecte.

Lorsque vous utilisez des vues autorisées ou des règles d'accès au niveau des lignes pour la sécurité au niveau des lignes, nous vous recommandons de surveiller les activités suspectes à l'aide de la journalisation d'audit.

Les canaux secondaires, tels que la durée de la requête, peuvent divulguer des informations sur les lignes situées à la périphérie d'une partition de stockage. De telles attaques nécessiteront soit une certaine connaissance de la partition de la table, soit un grand nombre de requêtes.

Pour en savoir plus sur la prévention de ces attaques, vous pouvez consulter les bonnes pratiques de sécurité au niveau des lignes.

Comparaison des vues autorisées, de la sécurité au niveau des lignes et des tables distinctes

Le tableau ci-dessous compare la flexibilité, les performances et la sécurité des vues autorisées, des règles d'accès au niveau des lignes et des tables distinctes.

Méthode Considérations de sécurité Recommandation
Vues
autorisées
Recommandé pour la flexibilité. Peut être vulnérable aux requêtes élaborées, à la durée des requêtes et à d'autres types d'attaques par canal secondaire. Les vues autorisées constituent un bon choix lorsque vous devez partager des données avec d'autres personnes, et que la flexibilité et les performances sont importantes. Par exemple, vous pouvez utiliser des vues autorisées pour partager des données dans votre groupe de travail.
Règles d'accès au niveau des lignes Option recommandée pour un équilibre entre flexibilité et sécurité. Peut être vulnérable aux attaques par canal secondaire exploitant la durée des requêtes. Les règles d'accès au niveau des lignes sont un bon choix lorsque vous devez partager des données avec d'autres utilisateurs et que vous souhaitez renforcer la sécurité des vues ou des tranches de table. Par exemple, vous pouvez utiliser des règles d'accès au niveau des lignes pour partager des données avec des personnes utilisant le même tableau de bord, même si certaines personnes ont accès à plus de données que d'autres.
Tables distinctes Recommandé pour la sécurité. Les utilisateurs ne peuvent pas déduire des données sans accéder à la table. Les tables distinctes constituent un bon choix lorsque vous devez partager des données avec d'autres personnes et que vous devez isoler les données. Par exemple, vous pouvez utiliser des tables distinctes pour partager des données avec des partenaires et des fournisseurs tiers, alors que le nombre total de lignes doit rester secret.

Créer et gérer des règles d'accès au niveau des lignes

Pour en savoir plus sur la création, la mise à jour (recréation), la liste, l'affichage et la suppression des règles d'accès au niveau des lignes d'une table, ainsi que sur l'interrogation de tables avec des règles d'accès au niveau des lignes, consultez la page Utiliser la sécurité d'accès au niveau des lignes.

Quotas

Pour en savoir plus sur les quotas et les limites concernant la sécurité au niveau des lignes, consultez la page Quotas et limites de BigQuery.

Tarifs

La sécurité au niveau des lignes est incluse dans BigQuery, sans frais supplémentaires. Toutefois, une règle d'accès au niveau des lignes peut affecter le coût d'exécution d'une requête de différentes manières :

  • Si une règle d'accès au niveau des lignes empêche un utilisateur d'accéder à une ligne d'une requête, cette ligne n'est ni traitée, ni facturée.

  • Les filtres des règles d'accès au niveau des lignes ne participent pas à l'élimination des requêtes sur les tables partitionnées et en cluster. Cela signifie qu'un filtre de sécurité au niveau des lignes peut entraîner le traitement de davantage de données que si le filtre n'était pas utilisé.

Pour en savoir plus sur la tarification des requêtes BigQuery, consultez la section Tarifs de BigQuery.

Limites

Pour en savoir plus sur les limites de sécurité au niveau des lignes, consultez la section Limites de sécurité au niveau des lignes de BigQuery. Les sections suivantes décrivent des limites de sécurité supplémentaires au niveau des lignes.

Limites de performances

  • Certaines fonctionnalités de BigQuery ne sont pas accélérées lorsque vous utilisez des tables contenant des règles d'accès au niveau des lignes, comme BigQuery BI Engine et les vues matérialisées.

  • La sécurité au niveau des lignes ne participe pas à l'élimination des requêtes, qui constitue une fonctionnalité des tables partitionnées. Pour en savoir plus, consultez la page Tables partitionnées et en cluster.

  • Vous risquez de constater une légère dégradation des performances lorsque vous interrogez des tables avec une sécurité au niveau des lignes.

Pour en savoir plus sur l'interaction de la sécurité au niveau des lignes avec certaines fonctionnalités et des services BigQuery spécifiques, consultez la page Utiliser la sécurité au niveau des lignes avec d'autres fonctionnalités BigQuery.

Autres limites

  • Cette fonctionnalité peut ne pas être disponible si vous utilisez des réservations créées avec certaines éditions BigQuery. Pour en savoir plus sur les fonctionnalités activées dans chaque édition, consultez la page Présentation des éditions BigQuery.

  • Les règles d'accès aux lignes ne sont pas compatibles avec l'ancien SQL. Les requêtes de tables avec des règles d'accès au niveau des lignes doivent utiliser GoogleSQL. Les requêtes en ancien SQL sont rejetées et renvoient une erreur.

  • Vous ne pouvez pas appliquer de règles d'accès au niveau des lignes sur des colonnes JSON.

  • Certaines fonctionnalités de BigQuery ne sont pas compatibles avec la sécurité au niveau des lignes. Pour plus d'informations, consultez la section Utiliser la sécurité au niveau des lignes.

  • Les opérations autres que les requêtes, y compris les tâches de compte de service, qui nécessitent un accès complet aux données des tables peuvent utiliser la sécurité au niveau des lignes avec le filtre TRUE. Exemples : copie de table, workflows Dataproc, etc. Pour plus d'informations, consultez la section Utiliser la sécurité au niveau des lignes.

  • La création, le remplacement ou la suppression de règles d'accès au niveau des lignes doivent être effectués avec des instructions LDD. La liste et l'affichage des règles d'accès au niveau des lignes peuvent être effectués via la console Google Cloud ou l'outil de ligne de commande bq.

  • L'échantillonnage de table n'est pas compatible avec la sécurité au niveau des lignes.

Journalisation et surveillance des audits

Lorsque des données d'une table avec une ou plusieurs règles d'accès au niveau des lignes sont lues, les règles d'accès au niveau des lignes autorisées pour l'accès en lecture apparaissent dans les informations d'autorisation IAM de cette requête de lecture.

Les règles d'accès au niveau des lignes créées et supprimées sont consignées dans un journal d'audit et sont accessibles via Cloud Logging. Les journaux d'audit incluent le nom de la règle d'accès au niveau des lignes. Toutefois, les définitions filter_expression et grantee_list d'une règle d'accès au niveau des lignes sont omises des journaux, car elles peuvent contenir des informations sur l'utilisateur ou d'autres informations sensibles. La liste et l'affichage des règles d'accès au niveau des lignes ne sont pas consignés.

Pour plus d'informations sur la journalisation dans BigQuery, consultez la page Présentation de la surveillance BigQuery.

Pour en savoir plus sur la journalisation dans Google Cloud, consultez la page Cloud Logging.

Étape suivante