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."
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.
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
.
Filtrer les données de ligne en fonction du tableau de conversion
Pour envoyer des commentaires ou demander de l'aide concernant cette fonctionnalité, envoyez un e-mail à l'adresse bigquery-row-level-security-support@google.com.Grâce à la compatibilité avec les sous-requêtes, les règles d'accès aux lignes peuvent référencer d'autres tables et les utiliser en tant que tableaux de conversion. Les données utilisées dans les règles de filtrage peuvent être stockées dans une table. Une seule règle d'accès aux lignes de sous-requête peut remplacer plusieurs règles d'accès aux lignes configurées. Pour mettre à jour les règles d'accès aux lignes, il vous suffit de mettre à jour le tableau de conversion, qui remplace plusieurs règles d'accès aux lignes. Vous n'avez pas besoin de mettre à jour chaque règle d'accès aux lignes.
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 :
Des règles d'accès au niveau des lignes, en particulier des règles incluant des sous-requêtes faisant référence à d'autres tables, peuvent entraîner une facturation supplémentaire.
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 ne signifie pas qu'ils lisent davantage de données lors de l'exécution de la requête principale. Il n'exploite pas les prédicats des règles d'accès aux lignes pour l'ajuster davantage.
Avec les filtres des règles d'accès au niveau des lignes, tous les filtres utilisateur ne sont pas appliqués de manière anticipée. Cela peut entraîner une augmentation de la quantité de données lues dans les tables, ainsi que la lecture et la facturation d'un plus grand nombre de lignes.
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. Cette limitation ne ralentit pas l'exécution de la requête principale.
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.
Les résultats des règles de sous-requêtes de premier niveau sont limités à 100 Mo. Cette limite s'applique à chaque règle d'accès au niveau des lignes.
Si le prédicat de la règle d'accès au niveau des lignes ne peut pas être évalué en raison de la suppression de toute table référencée, la requête échoue.
Les règles d'accès aux lignes des sous-requêtes ne sont compatibles qu'avec les tables BigQuery, les tables externes BigLake et les tables gérées BigLake.
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 et toutes les tables correspondantes référencées dans les sous-requêtes apparaissent dans les informations d'autorisation IAM pour 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
Pour en savoir plus sur la gestion de la sécurité au niveau des lignes, consultez la page Utiliser la sécurité au niveau des lignes.
Pour en savoir plus sur le fonctionnement de la sécurité au niveau des lignes avec les autres fonctionnalités et services BigQuery, consultez la page Utiliser la sécurité au niveau des lignes avec d'autres fonctionnalités BigQuery.
Pour en savoir plus sur les bonnes pratiques à adopter concernant la sécurité au niveau des lignes, consultez la page Bonnes pratiques en matière de sécurité au niveau des lignes dans BigQuery.