AWS Elastic MapReduce-Protokolle erfassen
In diesem Dokument wird beschrieben, wie Sie AWS Elastic MapReduce (EMR)-Logs in Google Security Operations aufnehmen. AWS EMR ist eine cloudbasierte Big-Data-Plattform, mit der große Datenmengen schnell verarbeitet werden. Wenn Sie EMR-Logs in Google SecOps einbinden, können Sie Clusteraktivitäten analysieren und potenzielle Sicherheitsbedrohungen erkennen.
Vorbereitung
- Sie benötigen eine Google SecOps-Instanz.
- Sie benötigen erhöhte Zugriffsrechte für AWS.
Amazon S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu dieser Anleitung: Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets für später.
- Erstellen Sie einen Nutzer gemäß der Anleitung IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Bereich Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie als Anwendungsfall Drittanbieterdienst aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungs-Tag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Zugriffsschlüssel und den Secret Access Key zur späteren Verwendung zu speichern.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Berechtigungen hinzufügen aus.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach den Richtlinien AmazonS3FullAccess und CloudWatchLogsFullAccess und wählen Sie sie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
AWS EMR zum Weiterleiten von Protokollen konfigurieren
- Melden Sie sich bei der AWS Management Console an.
- Geben Sie in die Suchleiste EMR ein und wählen Sie in der Liste der Dienste Amazon EMR aus.
- Klicken Sie auf Cluster.
- Suchen Sie den EMR-Cluster, für den Sie die Protokollierung aktivieren möchten, und wählen Sie ihn aus.
- Klicken Sie auf der Seite Clusterdetails auf Bearbeiten.
- Gehen Sie auf dem Bildschirm Cluster bearbeiten zum Bereich Protokollierung.
- Wählen Sie Aktivieren aus.
- Geben Sie den S3-Bucket an, in dem die Protokolle gespeichert werden sollen.
- Geben Sie den S3-URI im Format
s3://your-bucket-name/
an. Dadurch werden alle EMR-Protokolle im Stammverzeichnis des Buckets gespeichert. - Wählen Sie die folgenden Protokolltypen aus:
Step logs
Application logs
YARN logs
System logs
HDFS Logs
(wenn Sie Hadoop verwenden)
- Klicken Sie auf Speichern.
Feed in Google SecOps für die Aufnahme von AWS EMR-Logs konfigurieren
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. AWS EMR-Protokolle.
- Wählen Sie als Quelltyp Amazon S3 aus.
- Wählen Sie AWS EMR als Logtyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- Region: die Region, in der sich der Amazon S3-Bucket befindet.
- S3-URI: der Bucket-URI.
s3://your-log-bucket-name/
- Ersetzen Sie
your-log-bucket-name
durch den tatsächlichen Namen des Buckets.
- Ersetzen Sie
- URI ist ein: Wählen Sie Verzeichnis oder Verzeichnis mit Unterverzeichnissen aus.
Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus.
Zugriffsschlüssel-ID: Der Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
Asset-Namespace: der Asset-Namespace.
Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
app_id |
additional.fields[].key |
Der Wert „APP“ wird über den Parser zugewiesen. |
app_id |
additional.fields[].value.string_value |
Direkt aus dem Feld APP im Rohprotokoll zugeordnet. |
app_name |
additional.fields[].key |
Der Wert „APPNAME“ wird über den Parser zugewiesen. |
app_name |
additional.fields[].value.string_value |
Direkt aus dem Feld APPNAME im Rohprotokoll zugeordnet. |
blockid |
additional.fields[].key |
Der Wert „blockid“ wird über den Parser zugewiesen. |
blockid |
additional.fields[].value.string_value |
Direkt aus dem Feld blockid im Rohprotokoll zugeordnet. |
bytes |
network.received_bytes |
Wird direkt aus dem Feld bytes im Rohprotokoll abgeleitet und in eine positive Ganzzahl umgewandelt. |
cliID |
additional.fields[].key |
Der Wert „cliID“ wird über den Parser zugewiesen. |
cliID |
additional.fields[].value.string_value |
Direkt aus dem Feld cliID im Rohprotokoll zugeordnet. |
cmd |
target.process.command_line |
Direkt aus dem Feld cmd im Rohprotokoll zugeordnet. |
comp_name |
additional.fields[].key |
Der Wert „COMP“ wird über den Parser zugewiesen. |
comp_name |
additional.fields[].value.string_value |
Direkt aus dem Feld COMP im Rohprotokoll zugeordnet. |
configuration_version |
additional.fields[].key |
Der Wert „configuration_version“ wird über den Parser zugewiesen. |
configuration_version |
additional.fields[].value.string_value |
Wird direkt aus dem Feld configuration_version im Rohprotokoll zugeordnet und in einen String umgewandelt. |
containerID |
additional.fields[].key |
Der Wert „containerID“ wird über den Parser zugewiesen. |
containerID |
additional.fields[].value.string_value |
Direkt aus dem Feld CONTAINERID im Rohprotokoll zugeordnet. |
description |
security_result.description |
Direkt aus dem Feld description im Rohprotokoll zugeordnet. |
dfs.FSNamesystem.* |
additional.fields[].key |
Der Schlüssel wird generiert, indem „dfs.FSNamesystem.“ mit dem Schlüssel aus den JSON-Daten verknüpft wird. |
dfs.FSNamesystem.* |
additional.fields[].value.string_value |
Der Wert wird direkt aus dem entsprechenden Wert im JSON-Objekt dfs.FSNamesystem abgeleitet und in einen String konvertiert. |
duration |
additional.fields[].key |
Der Wert „duration“ wird über den Parser zugewiesen. |
duration |
additional.fields[].value.string_value |
Direkt aus dem Feld duration im Rohprotokoll zugeordnet. |
duration |
network.session_duration.seconds |
Wird direkt aus dem Feld duration im Rohprotokoll abgeleitet und in eine Ganzzahl umgewandelt. |
environment |
additional.fields[].key |
Der Wert „environment“ wird über den Parser zugewiesen. |
environment |
additional.fields[].value.string_value |
Direkt aus dem Feld environment im Rohprotokoll zugeordnet. Mithilfe von Grok und Stringmanipulation aus dem Feld ip_port extrahiert. Wird mithilfe von Grok und Stringmanipulation aus dem Feld ip_port extrahiert und in eine Ganzzahl umgewandelt. |
event_type |
metadata.event_type |
Wird anhand der Parserlogik basierend auf dem Vorhandensein von principal - und target -Informationen bestimmt. Kann NETWORK_CONNECTION , USER_RESOURCE_ACCESS , STATUS_UPDATE oder GENERIC_EVENT sein. |
file_path |
target.file.full_path |
Direkt aus dem Feld file_path im Rohprotokoll zugeordnet. |
host |
principal.hostname |
Direkt aus dem Feld host im Rohprotokoll zugeordnet. |
host |
target.hostname |
Direkt aus dem Feld host im Rohprotokoll zugeordnet. |
host_ip |
principal.ip |
Direkt aus dem Feld host_ip im Rohprotokoll zugeordnet. |
host_port |
principal.port |
Wird direkt aus dem Feld host_port im Rohprotokoll abgeleitet und in eine Ganzzahl umgewandelt. |
http_url |
target.url |
Direkt aus dem Feld http_url im Rohprotokoll zugeordnet. |
index |
additional.fields[].key |
Der Wert „index“ wird über den Parser zugewiesen. |
index |
additional.fields[].value.string_value |
Direkt aus dem Feld index im Rohprotokoll zugeordnet. |
kind |
metadata.product_event_type |
Direkt aus dem Feld kind im Rohprotokoll zugeordnet. Der Wert „AWS_EMR“ wird über den Parser zugewiesen. Der Wert „AWS EMR“ wird über den Parser zugewiesen. Der Wert „AMAZON“ wird über den Parser zugewiesen. |
offset |
additional.fields[].key |
Der Wert „offset“ wird über den Parser zugewiesen. |
offset |
additional.fields[].value.string_value |
Direkt aus dem Feld offset im Rohprotokoll zugeordnet. |
op |
metadata.product_event_type |
Direkt aus dem Feld op oder OPERATION im Rohprotokoll zugeordnet. |
proto |
network.application_protocol |
Mit Grok aus dem Feld http_url extrahiert und in Großbuchstaben umgewandelt. |
puppet_version |
additional.fields[].key |
Der Wert „puppet_version“ wird über den Parser zugewiesen. |
puppet_version |
additional.fields[].value.string_value |
Direkt aus dem Feld puppet_version im Rohprotokoll zugeordnet. |
queue_name |
additional.fields[].key |
Der Wert „queue_name“ wird über den Parser zugewiesen. |
queue_name |
additional.fields[].value.string_value |
Direkt aus dem Feld queue_name im Rohprotokoll zugeordnet. |
report_format |
additional.fields[].key |
Der Wert „report_format“ wird über den Parser zugewiesen. |
report_format |
additional.fields[].value.string_value |
Wird direkt aus dem Feld report_format im Rohprotokoll zugeordnet und in einen String umgewandelt. |
resource |
additional.fields[].key |
Der Wert „resource“ wird über den Parser zugewiesen. |
resource |
additional.fields[].value.string_value |
Direkt aus dem Feld resource im Rohprotokoll zugeordnet. |
result |
security_result.action_details |
Direkt aus dem Feld RESULT im Rohprotokoll zugeordnet. |
security_id |
additional.fields[].key |
Der Wert „security_id“ wird über den Parser zugewiesen. |
security_id |
additional.fields[].value.string_value |
Direkt aus dem Feld security_id im Rohprotokoll zugeordnet. |
severity |
security_result.severity |
Aus dem Feld severity im Rohprotokoll zugeordnet. INFO ist INFORMATIONAL zugeordnet, WARN ist MEDIUM zugeordnet. |
srvID |
additional.fields[].key |
Der Wert „srvID“ wird über den Parser zugewiesen. |
srvID |
additional.fields[].value.string_value |
Direkt aus dem Feld srvID im Rohprotokoll zugeordnet. |
status |
additional.fields[].key |
Der Wert „status“ wird über den Parser zugewiesen. |
status |
additional.fields[].value.string_value |
Direkt aus dem Feld status im Rohprotokoll zugeordnet. |
summary |
security_result.summary |
Direkt aus dem Feld summary im Rohprotokoll zugeordnet. |
target_app |
target.application |
Direkt aus dem Feld TARGET im Rohprotokoll zugeordnet. |
target_ip |
target.ip |
Direkt aus dem Feld target_ip oder IP im Rohprotokoll zugeordnet. |
target_port |
target.port |
Wird direkt aus dem Feld target_port im Rohprotokoll abgeleitet und in eine Ganzzahl umgewandelt. |
timestamp |
metadata.event_timestamp |
Wird direkt aus dem Feld timestamp im Rohprotokoll zugeordnet und als ISO 8601-Zeitstempel geparst. |
timestamp |
event.timestamp |
Wird direkt aus dem Feld timestamp im Rohprotokoll zugeordnet und als ISO 8601-Zeitstempel geparst. |
trade_date |
additional.fields[].key |
Der Wert „trade_date“ wird über den Parser zugewiesen. |
trade_date |
additional.fields[].value.string_value |
Direkt aus dem Feld trade_date im Rohprotokoll zugeordnet. |
transaction_uuid |
additional.fields[].key |
Der Wert „transaction_uuid“ wird über den Parser zugewiesen. |
transaction_uuid |
additional.fields[].value.string_value |
Direkt aus dem Feld transaction_uuid im Rohprotokoll zugeordnet. |
type |
additional.fields[].key |
Der Wert „type“ wird über den Parser zugewiesen. |
type |
additional.fields[].value.string_value |
Direkt aus dem Feld type im Rohprotokoll zugeordnet. |
user |
target.user.userid |
Direkt aus dem Feld USER oder ugi im Rohprotokoll zugeordnet. |
Änderungen
2023-12-19
- Fehlerkorrektur: Die unzuverlässigen Ergebnisse für das Grok-Muster wurden behoben.
2023-10-30
- Neu erstellter Parser.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten