Comment déléguer les données de la base d’audit vers AWS S3 et les lire en utilisant le service AWS Athena
Archivage des audits est une fonctionnalité optionnelle de la tâche de nettoyage de la base d’audit dans DataSunrise Database Security. Cette fonctionnalité permet à un administrateur d’installation DataSunrise de supprimer les anciennes données auditées et de les stocker dans le service AWS S3 afin de fournir une solution de stockage des données périmées plus efficace et moins coûteuse. Grâce à l’utilisation du service AWS Athena, l’équipe de sécurité et les auditeurs externes peuvent examiner les données historiques nécessaires aux audits et aux enquêtes sur les incidents. Par ailleurs, l’utilisation de l’archivage des audits permet aux clients DataSunrise de conserver de plus grands ensembles de données d’événements audités, sans devoir tout stocker dans une unique base de stockage d’audit et subir ainsi des délais de génération de rapports plus longs. De plus, l’utilisation de S3 pour les données froides est une solution plus économique, ce qui peut aider à optimiser le budget du projet en maîtrisant la taille de la base d’audit.
Pour l’archivage des audits, l’équipe DataSunrise fournit un script dédié pour les déploiements Linux, lequel peut être ajusté pour transférer les données supprimées vers un emplacement S3 personnalisable. Il est fourni dans le bundle d’installation par défaut de DataSunrise, vous n’avez donc pas besoin de le télécharger ailleurs.
Cet article va vous guider à travers le processus de configuration et d’exécution de la tâche de nettoyage de l’audit, le transfert des données supprimées vers l’emplacement du compartiment S3 de votre choix et la configuration de l’environnement dans AWS Athena pour les analyses forensiques.
Configurer une tâche de nettoyage des données d’audit avec l’option d’archivage des audits
- Ouvrez l’interface Web de DataSunrise et naviguez vers Configuration → Tâches périodiques. Cliquez sur le bouton Nouvelle tâche et fournissez les informations générales telles que le nom, le type de tâche (par exemple, Nettoyer les données d’audit) et sélectionnez le serveur sur lequel exécuter la tâche au cas où vous utilisez un cluster de nœuds DataSunrise.
- Configurez les Options d’archivage dans la section Nettoyer les données d’audit :
- Cochez l’option Archiver les données supprimées avant nettoyage.
- Spécifiez le chemin du dossier d’archive où les données d’audit doivent être temporairement stockées avant d’être transférées vers S3.
- Spécifiez le chemin vers le script qui charge les données vers AWS S3 en utilisant le champ de saisie « Exécuter la commande après archivage ». Chemin par défaut – /opt/datasunrise/scripts/aws/cf_upload_ds_audit_to_aws_s3.sh
(obligatoire) - Fournissez des paramètres supplémentaires pour le script afin d’ajuster son comportement (voir ci-dessous pour les arguments d’options du script).
- Ajustez la fréquence de la tâche dans la section « Fréquence de démarrage ». Vous pouvez définir la fréquence d’exécution de la tâche (par exemple, quotidienne, hebdomadaire, mensuelle) en fonction des besoins organisationnels en matière de conservation et d’archivage des données d’audit.
- Enregistrez la tâche après avoir configuré tous les paramètres nécessaires.
- Démarrez la tâche manuellement ou automatiquement. Si l’utilisateur a configuré la tâche pour démarrer manuellement, il peut la lancer en sélectionnant la tâche et en cliquant sur Démarrer maintenant. Si elle est programmée pour démarrer selon un calendrier, elle s’exécutera automatiquement aux moments spécifiés.
- Après l’exécution de la tâche, un dossier d’archive sera créé sur le système de fichiers du serveur DataSunrise où la tâche a été exécutée (sur les distributions Linux, le chemin par défaut sera /opt/datasunrise/).

Image 1. Paramètres généraux
Remarque : si vous exécutez DataSunrise sur AWS ECS Fargate, utilisez à la place le script ecs_upload_ds_audit_to_aws_s3.sh situé dans le même répertoire.
Remarque : vous pouvez fournir des chemins relatifs au dossier d’installation de DataSunrise (c’est-à-dire ./scripts/aws/cf_upload_ds_audit_to_aws_s3.sh
Remarque : si vous fournissez le nom de dossier d’archive par défaut attendu par le script (c’est-à-dire /ds-audit-folder), il n’est pas nécessaire de le spécifier dans les arguments du script.

Image 2. Commandes supplémentaires pour la tâche de nettoyage des données d’audit

Image 3. Démarrer la tâche
Remarque : Les étapes ci-dessus peuvent également être utilisées pour gérer la conservation des données d’audit dans DataSunrise. Les utilisateurs peuvent utiliser la fonctionnalité « Nettoyage périodique des audits » pour supprimer régulièrement les données d’audit obsolètes. Cela garantit l’efficacité du serveur DataSunrise en évitant un débordement de stockage dû aux données périmées.
Le script de chargement des données d’audit archivées
Pour transférer le dossier d’archive vers un bucket AWS S3, utilisez le script fourni par DataSunrise situé dans le dossier installation DataSunrise/scripts/aws pour charger le dossier d’archive vers le bucket AWS S3. Le script nécessite que l’AWS CLI soit installé sur le serveur DataSunrise et que le profil d’instance IAM approprié, contenant les autorisations pour l’emplacement S3 vers lequel vous souhaitez charger les données archivées, soit attaché. Si vous utilisez un DataSunrise hébergé sous Linux déployé depuis AWS Marketplace ou le modèle CloudFormation disponible sur le compte GitHub public, il vous suffit de vous assurer que le profil d’instance IAM associé est correctement configuré.
Pour définir un bucket vers lequel pousser les données d’audit archivées, fournissez le nom de votre bucket S3 sans le préfixe s3:// :
./scripts/aws/cf_upload_ds_audit_to_aws_s3.sh datasunrise-audit-archive
Pour personnaliser le processus d’archivage, vous pouvez utiliser les indicateurs optionnels suivants :
- –archive-folder : fournissez votre propre chemin sur le serveur DataSunrise où placer les fichiers de données d’audit archivées. Par défaut, le dossier ds-audit-archive sera créé à l’emplacement /opt/datasunrise/. Il n’est pas nécessaire de fournir cette option si vous définissez le dossier d’archive d’audit comme ds-audit-archive dans le répertoire racine de l’installation de DataSunrise.
- –folder-in-bucket : fournissez votre propre préfixe pour stocker les données auditées. Par défaut, le script décharge les données dans le préfixe identifiant-instance-EC2/ds-audit-archive.
- –predefined-credentials : Dans le cas où vous exécutez DataSunrise en dehors d’AWS, pour pouvoir charger les données vers S3, vous aurez besoin soit d’un fichier d’identifiants soit de la paire de clés ACCESS/SECRET pour l’utilisateur IAM autorisé à accéder au bucket S3 souhaité. Aucune saisie n’est requise.
Remarque : La taille du dossier est surveillée pendant le transfert des audits et, lorsqu’elle dépasse un certain seuil, la commande est exécutée. Si aucun script n’est spécifié, une erreur survient lorsque le seuil est dépassé. Le seuil est défini à l’aide du paramètre supplémentaire “AuditArchiveFolderSizeLimit”, avec une valeur par défaut de 1 Go. Un utilisateur peut pré-nettoyer un dossier d’archive à l’aide de l’option “Effacer un dossier d’archive avant archivage”.
Structure du dossier d’archive des audits
La structure du dossier d’archive où DataSunrise stocke les données d’audit suit généralement un format hiérarchique organisé par date. Cette organisation aide à gérer efficacement les données et facilite la localisation d’enregistrements d’audit spécifiques en fonction de la date. Voici une description générale de ce à quoi la structure peut ressembler :
Structure de dossier généralisée
Répertoire de base : /opt/datasunrise/ds-audit-archive/ └── Année : {YYYY}/ └── Mois : {MM}/ └── Jour : {DD}/ └── Fichiers d'audit : audit_data_{YYYY}-{MM}-{DD}.csv.gz
Une fois les données d’audit transférées vers S3, la structure est préservée de la même manière qu’elle est organisée sur le serveur DataSunrise :

Image 4. Données dans le bucket Amazon S3
Utilisation d’AWS Athena pour lire les données d’archive des audits depuis S3
Une fois les données d’audit transférées vers S3, vous pouvez créer le schéma de la base d’audit dans le service AWS Athena pour une analyse ultérieure. Rendez-vous dans AWS Athena via la console de gestion AWS pour configurer une base de données et des tables afin de lire vos données archivées. Pour pouvoir utiliser pleinement le service AWS Athena, nous recommandons d’utiliser la policy IAM gérée AmazonAthenaFullAccess pour l’utilisateur IAM créé pour travailler avec les données d’audit archivées.
Créer des tables d’archive d’audit dans AWS Athena
Les scripts SQL supposent ce qui suit pour la clause LOCATION des requêtes CREATE EXTERNAL TABLE :
– Le nom du bucket S3 est datasunrise-audit
Le fichier SQL DDL pour les tables d’archive d’audit AWS Athena est également disponible dans la distribution DataSunrise avec le chemin par défaut : /opt/datasunrise/scripts/aws/aws-athena-create-audit-archive-tables.sql.
CREATE DATABASE IF NOT EXISTS datasunrise_audit; --------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.audit_archive ( operations__id STRING, operations__session_id STRING, operations__begin_time STRING, operations__end_time STRING, operations__type_name STRING, operations__sql_query STRING, operations__exec_count STRING, sessions__user_name STRING, sessions__db_name STRING, sessions__service_name STRING, sessions__os_user STRING, sessions__application STRING, sessions__begin_time STRING, sessions__end_time STRING, connections__client_host_name STRING, connections__client_port STRING, connections__server_port STRING, connections__sniffer_id STRING, connections__proxy_id STRING, connections__db_type_name STRING, connections__client_host STRING, connections__server_host STRING, connections__instance_id STRING, connections__instance_name STRING, operation_rules__rule_id STRING, operation_rules__rule_name STRING, operation_rules__chain STRING, operation_rules__action_type STRING, operation_exec__row_count STRING, operation_exec__error STRING, operation_exec__error_code STRING, operation_exec__error_text STRING, operation_group__query_str STRING, operations__operation_group_id STRING, operations__all_exec_have_err STRING, operations__total_affected_rows STRING, operations__duration STRING, operations__type_id STRING, connections__db_type_id STRING ) PARTITIONED BY ( `year` STRING, `month` STRING, `day` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) LOCATION 's3://datasunrise-audit/audit-archive/' TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); -- La requête suivante charge les partitions pour pouvoir interroger les données. MSCK REPAIR TABLE datasunrise_audit.audit_archive; --------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.sessions ( partition_id STRING, id STRING, connection_id STRING, host_name STRING, user_name STRING, scheme STRING, application STRING, thread_id STRING, process_id STRING, begin_time STRING, end_time STRING, error_str STRING, params STRING, db_name STRING, service_name STRING, os_user STRING, external_user STRING, domain STRING, realm STRING, sql_state STRING ) PARTITIONED BY ( `year` STRING, `month` STRING, `day` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) LOCATION 's3://datasunrise-audit/sessions/' TBLPROPERTIES ('has_encrypted_data'='false','skip.header.line.count'='1'); MSCK REPAIR TABLE datasunrise_audit.sessions; --------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.connections ( partition_id STRING, id STRING, interface_id STRING, client_host STRING, client_port STRING, begin_time STRING, end_time STRING, client_host_name STRING, instance_id STRING, instance_name STRING, proxy_id STRING, sniffer_id STRING, server_host STRING, server_port STRING, db_type_id STRING, db_type_name STRING ) PARTITIONED BY ( `year` STRING, `month` STRING, `day` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) LOCATION 's3://datasunrise-audit/connections/' TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); MSCK REPAIR TABLE datasunrise_audit.connections; ---------------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.operation_sub_query ( operation_sub_query__operation_id STRING, operation_sub_query__session_id STRING, operation_sub_query__type_name STRING, operations__begin_time STRING, operation_sub_query__type_id STRING ) PARTITIONED BY ( `year` STRING, `month` STRING, `day` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) LOCATION 's3://datasunrise-audit/operation-sub-query/' TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); MSCK REPAIR TABLE datasunrise_audit.operation_sub_query; ---------------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.col_objects ( operation_id STRING, session_id STRING, obj_id STRING, name STRING, tbl_id STRING, operations__begin_time STRING ) PARTITIONED BY ( `year` STRING, `month` STRING, `day` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) LOCATION 's3://datasunrise-audit/col-objects/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); MSCK REPAIR TABLE datasunrise_audit.col_objects; --------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.tbl_objects ( tbl_objects__operation_id STRING, tbl_objects__session_id STRING, tbl_objects__obj_id STRING, tbl_objects__sch_id STRING, tbl_objects__db_id STRING, tbl_objects__tbl_name STRING, tbl_objects__sch_name STRING, tbl_objects__db_name STRING, operations__begin_time STRING ) PARTITIONED BY ( `year` STRING, `month` STRING, `day` STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) LOCATION 's3://datasunrise-audit/tbl-objects/' TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); MSCK REPAIR TABLE datasunrise_audit.tbl_objects;
Interroger les données dans la console AWS Athena en utilisant des requêtes SQL standard :
-- Exécution d'un SELECT sur la table audit_archive avec des filtres par année, mois et jour SELECT * FROM audit_archive WHERE year = '2024' and month = '05' and day = '16'; -- Sélection des données à partir de plusieurs tables à l'aide de la clause JOIN SELECT r.operations__type_name, s.operation_sub_query__type_name, r.operations__sql_query FROM audit_archive AS r JOIN operation_sub_query AS s ON r.operations__id = s.operation_sub_query__operation_id AND r.operations__session_id = s.operation_sub_query__session_id; -- Extraire 100 lignes sans appliquer de filtre select * from audit_archive LIMIT 100;

Image 5. Archive des audits
Conclusion
Une longue période de conservation des données sensibles telles que les événements audités peut représenter un véritable défi et constituer une charge supplémentaire sur le budget de maintenance de grands ensembles de données au sein des fichiers de base de données. L’archivage des audits de DataSunrise offre une solution efficace et sécurisée pour conserver les anciennes données de manière lisible, décharger la couche de stockage de la base de données et permettre à nos clients de bénéficier d’une solution résiliente et économique basée sur les services AWS S3 et Athena, afin de conserver les anciennes données au sein de leur organisation et de les rendre accessibles pour les audits et la conformité.