Wie man die Audit-Datenbankdaten auf AWS S3 verlagert und sie mit dem AWS Athena Service liest
Audit Archiving ist ein optionales Feature der Audit Database Cleanup Task in DataSunrise Database Security. Diese Funktion ermöglicht es einem DataSunrise Installationsadministrator, ältere geprüfte Daten zu entfernen und sie im AWS S3-Service zu speichern, um eine bessere, kosteneffiziente Art der Speicherung der abgelaufenen Daten zu bieten. Mit der Nutzung des AWS Athena Service Security Teams und externer Wirtschaftsprüfer können sie die historischen Daten, die für Audits und Incidents-Untersuchungen benötigt werden, überprüfen. Darüber hinaus ermöglicht die Verwendung von Audit Archiving den DataSunrise-Kunden, größere Datensätze von geprüften Ereignissen zu pflegen, ohne alles in der einzelnen Audit Storage-Datenbank zu speichern und eine erhöhte Berichtszeit zu erleben. Außerdem ist die Verwendung von S3 für Cold-Data eine kosteneffizientere Lösung, die helfen kann, das Budget des Projekts zu optimieren, indem die Audit Database Size unter Kontrolle gehalten wird.
Für Audit Archiving stellt das DataSunrise Team das dedizierte Skript für Linux-Einsätze bereit, das angepasst werden kann, um die entfernten Daten an einen anpassbaren S3-Ort zu legen. Es ist Teil des Standard-DataSunrise Installationspaketes, so dass Sie es nicht von anderswo zusätzlich herunterladen müssen.
Dieser Artikel wird Sie durch den Prozess der Einrichtung und der Audit Cleanup Aufgabe, Verlagern der entfernten Daten an den S3 Bucket Ort Ihrer Wahl und Einrichtung der Umgebung in der AWS Athena für die Forensik führen.
Konfigurieren eines Clean Audit Data Tasks mit Audit Archiving Option
- Öffnen Sie die DataSunrise Web-UI und navigieren Sie zu Konfiguration → Periodische Aufgaben. Klicken Sie auf die Schaltfläche Neue Aufgabe und geben Sie die allgemeinen Informationen wie Name, Aufgabentyp (z.B. Clean Audit Data) ein und wählen Sie den Server aus, auf dem die Aufgabe ausgeführt werden soll, falls Sie einen Cluster von DataSunrise-Knoten verwenden.
- Stellen Sie die Archivierungsoptionen im Bereich Audit Daten Bereinigen ein:
- Aktivieren Sie die Option Archivierte Daten vor der Bereinigung.
- Geben Sie den Pfad zum Archivordner an, in dem die Audit-Daten temporär gespeichert werden sollen, bevor sie nach S3 verschoben werden.
- Geben Sie den Pfad zum Skript an, das die Daten auf AWS S3 hochlädt, indem Sie das Eingabefeld „Kommando nach der Archivierung ausführen“ verwenden. Standardpfad – /opt/datasunrise/scripts/aws/cf_upload_ds_audit_to_aws_s3.sh
(erforderlich) - Geben Sie zusätzliche Parameter für das Skript ein, um das Verhalten anzupassen (siehe unten für die Optionsskript-Argumente)
- Stellen Sie die Aufgabenfrequenz im Abschnitt “Startup-Frequenz” ein, Sie können festlegen, wie oft die Aufgabe ausgeführt werden soll (z.B. täglich, wöchentlich, monatlich), abhängig von den Bedürfnissen Ihrer Organisation hinsichtlich der Aufbewahrung und Archivierung von Prüfdaten.
- Speichern Sie die Aufgabe nach der Konfiguration aller notwendigen Einstellungen.
- Starten Sie die Aufgabe manuell oder automatisch, Wenn der Benutzer die Aufgabe so konfiguriert hat, dass sie manuell gestartet wird, kann der Benutzer sie starten, indem er die Aufgabe auswählt und auf Jetzt starten klickt. Wenn sie so eingestellt ist, dass sie gemäß einem Zeitplan startet, wird sie automatisch zu den angegebenen Zeiten ausgeführt.
- Nach Durchführung der Aufgabe wird ein Archivordner auf dem Dateisystem des DataSunrise Servers erstellt, auf dem die Aufgabe ausgeführt wurde (bei Linux-Distributionen wird der Standardpfad /opt/datasunrise/ sein).
Hinweis: Wenn Sie DataSunrise auf AWS ECS Fargate ausführen, verwenden Sie stattdessen das ecs_upload_ds_audit_to_aws_s3.sh, das sich im gleichen Verzeichnis befindet.
Hinweis: Die oben genannten Schritte können auch zur Verwaltung der Aufbewahrung von Auditdaten in DataSunrise verwendet werden, Benutzer können das “Periodic Clean Audit” Feature nutzen, um regelmäßig veraltete Auditdaten zu entfernen. Dadurch wird die Effizienz des DataSunrise Servers sichergestellt, indem die Überfüllung des Speichers mit veralteten Daten verhindert wird.
Das Archivierte Audit-Daten Uploader-Skript
Um den Archivordner auf einen AWS S3 Bucket hochzuladen, verwenden Sie das von DataSunrise bereitgestellte Skript, das sich im Ordner
Um das Verfahren zu personalisieren, können Sie die folgenden optionalen Flags nutzen:
- –archive-folder: Überschreibt den Standardordner auf dem DataSunrise Server, um die archivierten Audit-Datendateien abzulegen. Standardmäßig wird der Ordner ds-audit-archive im Pfad /opt/datasunrise/ erstellt.
- –folder-in-bucket: Geben Sie Ihren eigenen Präfix an, um die geprüften Daten abzulegen. Standardmäßig entlädt das Skript die Daten zum Präfix
/ds-audit-archive. - –predefined-credentials: Falls Sie DataSunrise außerhalb von AWS ausführen, benötigen Sie entweder eine Credentials-Datei oder das ACCESS/SECRET Key Pair für den IAM-Benutzer, der berechtigt ist, auf den gewünschten S3 Bucket zuzugreifen, um Daten auf S3 hochladen zu können. Erfordert keine Eingaben.
Hinweis: Die Ordnergröße wird während des Audit Unloads überwacht, und wenn sie einen bestimmten Schwellenwert überschreitet, wird das Kommando ausgeführt. Wenn kein Skript angegeben ist, tritt ein Fehler auf, wenn der Schwellenwert überschritten wird. Der Schwellenwert wird mit dem zusätzlichen Parameter “AuditArchiveFolderSizeLimit” festgelegt, mit einem Standardwert von 1 GB. Ein Benutzer kann einen Archivordner vor dem Archivieren mit der Option “Clear an archive folder before archiving” vorreinigen.
Berücksichtigungen
- Der Bucket-Name für den Upload der archivierten Daten muss ohne das s3:// Schema angegeben werden
Struktur des Audit Archivordners
Die Struktur des Archivordners, in dem DataSunrise Auditdaten speichert, folgt normalerweise einem hierarchischen Format, das nach Datum organisiert ist. Diese Organisation hilft bei der effizienten Verwaltung der Daten und erleichtert das Auffinden spezifischer Auditdatensätze anhand des Datums. Hier ist ein allgemeines Schema, wie die Struktur aussehen könnte:
Generalisiertes Ordnerstruktur-Template
Ausgangsverzeichnis: /opt/datasunrise/ds-audit-archive/ └── Jahr: {JJJJ}/ └── Monat: {MM}/ └── Tag: {TT}/ └── Auditdateien: audit_data_{JJJJ}-{MM}-{TT}.csv.gz
Hinweis: Die Dateien liegen in komprimierter Form und müssen entpackt werden, um die Informationen zu lesen (z.B. können Benutzer das Kommando gunzip verwenden).
Sobald die Auditdaten auf S3 hochgeladen sind, bleibt die Struktur genauso erhalten, wie sie auf dem DataSunrise Server gespeichert war:
Verwendung von AWS Athena zum Lesen von Audit Archive Daten von S3
Sobald die Auditdaten auf S3 hochgeladen wurden, können Sie das Audit-Datenbankschema in AWS Athena Service für weitere Analysen erstellen. Wechseln Sie zu AWS Athena in AWS Management Console, um eine Datenbank und ExternalTable-Objekte einzurichten, um Ihre archivierten Daten zu lesen.
Erstellen von Audit Archiv Tabellen in AWS Athena
Die SQL-Skripte nehmen das Folgende für die LOCATION-Klausel der CREATE EXTERNAL TABLE-Abfragen an:
- Der S3 Bucket-Name ist datasunrise-audit
Die DDL SQL-Datei für AWS Athena Audit Archive Tabellen ist auch von der DataSunrise-Distribution mit dem Standardpfad /opt/datasunrise/scripts/aws/aws-athena-create-audit-archive-tables.sql. erhältlich.
-- Die nächste Abfrage erstellt eine Datenbank in 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false','skip.header.line.count'='1');
-- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
-- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. 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/' -- Pfad zum S3-Ordner TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1'); -- Die nächste Abfrage lädt Partitionen, um die Daten abfragen zu können. MSCK REPAIR TABLE datasunrise_audit.tbl_objects;
Führen Sie die Daten in der AWS Athena Konsole mit standard SQL-Abfragen aus:
--running SELECT against the audit_archive table with the filters by year, month and day SELECT * FROM audit_archive WHERE year = '2024' and month = '05' and day = '16'; --selecting data from multiple tables through JOIN clause 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; –-running simple SELECT querying all table without filters applied select * from audit_archive;
Schlussfolgerung
Eine lange Aufbewahrungszeit für sensible Daten wie Auditierte Ereignisse kann eine echte Herausforderung und eine zusätzliche Belastung für das Budget sein, um große Datensätze innerhalb der Datenbankdateien zu pflegen. DataSunrise Audit Archiving bietet eine effiziente und sichere Lösung, um die älteren Daten lesbar zu halten, die Datenbankebene zu entlasten und unseren Kunden eine widerstandsfähige und kosteneffiziente Lösung auf der Basis von AWS S3 Athena Services zu bieten, um die alten Daten in Ihrer Organisation zugänglich und auditable zu halten.