Comment Décharger Les Données De La Base De Données D’Audit Vers AWS S3 Et Les Lire À L’aide Du Service AWS Athena
Archivage D’Audit est une fonctionnalité optionnelle de la tâche de nettoyage de la base de données d’audit dans DataSunrise Database Security. Cette fonctionnalité permet à un administrateur de l’installation DataSunrise de supprimer les données d’audit plus anciennes pour les stocker dans le service AWS S3 afin de fournir un meilleur moyen rentable de stocker les données expirées. 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 pour les audits et les enquêtes sur les incidents. En outre, l’utilisation de l’archivage d’audit permet aux clients de DataSunrise de maintenir des ensembles de données plus importants d’événements audités sans tout stocker dans la seule base de données de stockage d’audit et de subir des temps de rapport accrus. De plus, l’utilisation de S3 pour les données froides est une solution plus rentable, qui peut aider à optimiser le budget sur le projet en gardant la taille de la base de données d’audit sous contrôle.
Pour l’archivage d’audit, l’équipe DataSunrise fournit le script dédié pour les déploiements Linux qui peut être ajusté pour envoyer les données supprimées à un emplacement S3 personnalisable. Il fait partie du pack d’installation par défaut de DataSunrise, vous n’avez donc pas besoin de le télécharger ailleurs en plus.
Cet article vous guidera à travers le processus de configuration de la tâche de nettoyage d’audit, de transfert des données supprimées vers l’emplacement de votre choix dans le bucket S3 et de configuration de l’environnement dans AWS Athena pour la criminalistique.
Configurer une Tâche De Nettoyage Des Données D’Audit avec l’Option d’Archivage D’Audit
- Ouvrez l’interface Web de DataSunrise et allez à 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 pour exécuter la tâche au cas où vous utilisez un Cluster de nœuds DataSunrise.
- Définissez les Options d’Archivage dans la section Nettoyer les Données d’Audit :
- Cochez l’option Archiver les Données Supprimées avant de Nettoyer.
- Spécifiez le chemin du Dossier d’Archive où les données d’audit doivent être temporairement stockées avant de passer à S3.
- Spécifiez le chemin du script qui télécharge les données vers AWS S3 en utilisant le champ d’entrée “Exécuter la Commande Après Archivage”. Chemin par défaut – /opt/datasunrise/scripts/aws/cf_upload_ds_audit_to_aws_s3.sh
(requis) - Fournissez des paramètres supplémentaires pour le script afin d’ajuster le comportement (voir ci-dessous pour les arguments d’option de script)
- Ajustez la Fréquence des Tâches dans la section “Fréquence de Démarrage”, vous pouvez définir la fréquence d’exécution de la tâche (par exemple, quotidien, hebdomadaire, mensuel) en fonction des besoins de l’organisation pour la conservation et l’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 démarrer en sélectionnant la tâche et en cliquant sur Démarrer Maintenant. Si elle est configurée pour démarrer sur la base d’un calendrier, elle s’exécutera automatiquement aux heures spécifiées.
- Après avoir exécuté 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/).
Remarque : si vous exécutez DataSunrise sur AWS ECS Fargate, utilisez le ecs_upload_ds_audit_to_aws_s3.sh à la place situé dans le même répertoire.
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 d’Audit” pour supprimer régulièrement les données d’audit obsolètes. Cela assure l’efficacité du serveur DataSunrise en prévenant le débordement de stockage avec des données obsolètes.
Le Script de Téléchargeur de Données D’Audit Archivées
Pour télécharger le dossier d’archive dans un bucket AWS S3, utilisez le script fourni par DataSunrise situé dans le dossier
Pour personnaliser la procédure, vous pouvez utiliser les drapeaux optionnels suivants :
- –-archive-folder: remplacer le dossier par défaut sur le serveur DataSunrise pour placer les fichiers de données d’audit archivés. Par défaut, le dossier ds-audit-archive sera créé à l’emplacement /opt/datasunrise/.
- –folder-in-bucket: fournissez votre propre préfixe pour placer les données auditées. Par défaut, le script décharge les données dans le préfixe
/ds-audit-archive. - –predefined-credentials: Au cas où vous exécutez DataSunrise en dehors AWS, pour être en mesure de téléverser des données vers S3, vous aurez besoin soit d’un fichier de justificatifs ou de la paire de clés ACCESS/SECRET pour l’utilisateur IAM autorisé à accéder au bucket S3 souhaité. Ne nécessite pas d’entrées.
Remarque: La taille du dossier est surveillée pendant le déchargement de l’audit, et lorsqu’il dépasse un certain seuil, la commande est exécutée. Si aucun script n’est spécifié, une erreur se produit lorsque le seuil est dépassé. Le seuil est défini en utilisant le Paramètre Supplémentaire “AuditArchiveFolderSizeLimit”, avec une valeur par défaut de 1 GB. Un utilisateur peut pré-nettoyer un dossier d’archive en utilisant l’option “Effacer un dossier d’archive avant l’archivage”.
Considérations
- Le nom du bucket pour télécharger les données archivées doit être fourni sans le schéma s3://
Structure du Dossier d’Archive de l’Audit
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 des enregistrements d’audit spécifiques en fonction de la date. Voici un aperçu général de ce à quoi la structure pourrait ressembler :
Modèle de Structure de Dossier Généralisé
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
Remarque: Les fichiers seront en forme compressée et doivent être décompressés pour lire l’information (par exemple, les utilisateurs peuvent utiliser la commande gunzip).
Une fois que les données d’audit sont téléchargées vers S3, la structure est conservée de la même manière qu’elle était stockée sur le serveur DataSunrise :
Utilisation de AWS Athena pour Lire les Données d’Archive d’Audit De S3
Une fois que les données d’audit sont téléchargées vers S3, vous pouvez créer le schéma de base de données d’audit dans le service AWS Athena pour une analyse plus poussée. Rendez-vous sur AWS Athena dans la console de gestion AWS pour configurer des objets de base de données et de table externe pour lire vos données 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’archives 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.
-- La prochaine requête crée une base de données dans Athena 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/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- La prochaine requête 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/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false','skip.header.line.count'='1');
-- La prochaine requête charge les partitions pour pouvoir interroger les données. 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/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- La prochaine requête charge les partitions pour pouvoir interroger les données. 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/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- La prochaine requête charge les partitions pour pouvoir interroger les données. MSCK REPAIR TABLE datasunrise_audit.operation_sub_query; --------------------------------------------------------------------- CREATE EXTERNAL TABLE IF NOT EXISTS datasunrise_audit.session_rules ( session_id STRING, rule_id STRING, rule_name STRING, chain STRING, action_type STRING, sessions__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/session-rules/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- La prochaine requête charge les partitions pour pouvoir interroger les données. MSCK REPAIR TABLE datasunrise_audit.session_rules; -------------------------------------------------------------------------------- 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');
-- La prochaine requête charge les partitions pour pouvoir interroger les données. 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/' -- chemin vers le dossier S3 TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); -- La prochaine requête charge les partitions pour pouvoir interroger les données. MSCK REPAIR TABLE datasunrise_audit.tbl_objects;
Interroger les données dans la Console AWS Athena à l’aide de requêtes SQL standard:
--exécuter SELECT contre 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électionner des données à partir de plusieurs tables à travers 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; –-exécuter un SELECT simple interrogeant toutes les tables sans filtres appliqués select * from audit_archive;
Conclusion
Une longue période de rétention des données pour les données sensibles comme les événements audités peut constituer un véritable défi et une charge supplémentaire sur le budget pour maintenir de grands ensembles de données au sein des fichiers de base de données. DataSunrise Audit Archiving offre une solution efficace et sécurisée pour maintenir les anciennes données lisibles, déchargeant la couche de stockage de la base de données et permettant à nos clients une solution résiliente et rentable basée sur les services AWS S3 Athena pour garder les anciennes données au sein de votre organisation et accessibles pour l’audit et la conformité.