Logs von AWS Lambda-Funktionen erfassen
In diesem Dokument wird beschrieben, wie Sie AWS Lambda-Funktionslogs mit Amazon S3 in Google Security Operations aufnehmen.
AWS Lambda ist ein serverloser Computing-Dienst, der Ihren Code als Reaktion auf Ereignisse ausführt und die zugrunde liegenden Rechenressourcen automatisch verwaltet. Lambda sendet automatisch alle Funktionslogs (Plattformlogs, Erweiterungslogs und Anwendungsausgabe) an Amazon CloudWatch Logs und erstellt eine Loggruppe pro Funktion. Bei dieser Integration wird Amazon Data Firehose verwendet, um Lambda-Logereignisse aus CloudWatch Logs in einen S3-Bucket zu streamen, der dann von Google SecOps über einen Amazon S3 V2-Feed aufgenommen wird.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Privilegierter Zugriff auf die AWS Management Console mit Berechtigungen zum Verwalten von:
- AWS Lambda (Funktionen, Logging-Konfiguration)
- Amazon CloudWatch Logs (Loggruppen, Abonnementfilter)
- Amazon Data Firehose (Bereitstellungsstreams)
- Amazon S3 (Buckets)
- AWS IAM (Rollen, Richtlinien, Nutzer)
CloudWatch Logs-Loggruppe für Ihre Lambda-Funktion prüfen
AWS Lambda erstellt automatisch eine CloudWatch Logs-Loggruppe für jede Funktion, wenn sie zum ersten Mal aufgerufen wird. Die Standardbenennungskonvention für Loggruppen lautet:
/aws/lambda/<function-name>
So nehmen Sie eine Bestätigung vor:
- Rufen Sie in der AWS Console CloudWatch > Logs > Log groups auf.
- Suchen Sie nach
/aws/lambda/. Prüfen Sie, ob für jede Lambda-Funktion, deren Logs Sie erfassen möchten, eine Loggruppe vorhanden ist.
AWS S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B.
lambda-logs-to-secops).
IAM-Rolle für Amazon Data Firehose konfigurieren
Amazon Data Firehose benötigt eine IAM-Rolle, um Protokolle in Ihren S3-Bucket zu schreiben.
IAM-Richtlinie erstellen
- Rufen Sie in der AWS Console IAM > Policies > Create policy auf.
- Wählen Sie den Tab JSON aus.
Fügen Sie die folgende Richtlinie ein und ersetzen Sie
lambda-logs-to-secopsdurch den Namen Ihres Buckets:{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Delivery", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::lambda-logs-to-secops", "arn:aws:s3:::lambda-logs-to-secops/*" ] }, { "Sid": "CloudWatchLogging", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/lambda-logs-to-secops:log-stream:*" } ] }Klicken Sie auf Weiter.
Geben Sie im Feld Richtlinienname den Namen
LambdaLogsFirehoseS3Policyein.Klicken Sie auf Richtlinie erstellen.
IAM-Rolle erstellen
- Klicken Sie auf IAM > Rollen > Rolle erstellen.
- Wählen Sie Benutzerdefinierte Vertrauensrichtlinie aus.
Fügen Sie die folgende Vertrauensrichtlinie ein:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }Klicken Sie auf Weiter.
Suchen Sie nach LambdaLogsFirehoseS3Policy und wählen Sie die Richtlinie aus.
Klicken Sie auf Weiter.
Geben Sie im Feld Rollenname
LambdaLogsFirehoseToS3Roleein.Klicken Sie auf Rolle erstellen.
Amazon Data Firehose-Stream erstellen
- Öffnen Sie die Kinesis-Konsole unter https://console.aws.amazon.com/kinesis.
- Wählen Sie im Navigationsbereich Amazon Data Firehose aus.
- Klicken Sie auf Firehose-Stream erstellen.
- Geben Sie unter Quelle und Ziel auswählen die folgende Konfiguration an:
- Quelle: Wählen Sie Direct PUT aus.
- Ziel: Wählen Sie Amazon S3 aus.
- Geben Sie im Feld Name des Firehose-Streams
lambda-logs-to-secopsein. Klicken Sie unter Datensätze transformieren im Abschnitt Quelldatensätze aus Amazon CloudWatch Logs dekomprimieren auf:
- Wählen Sie Dekomprimierung aktivieren aus.
- Wählen Sie Nachrichtenextraktion aktivieren nicht aus.
Unter Zieleinstellungen:
- S3-Bucket: Wählen Sie den S3-Bucket
lambda-logs-to-secopsaus. - S3-Bucket-Präfix (optional): Geben Sie
lambda-logs/ein. - S3-Bucket-Fehlerausgabepräfix (optional): Geben Sie
firehose-errors/ein.
- S3-Bucket: Wählen Sie den S3-Bucket
Unter Pufferhinweise:
- Puffergröße:
5MiB (Standard). - Pufferintervall:
300Sekunden (Standard).
- Puffergröße:
Unter Erweiterte Einstellungen:
- Serverseitige Verschlüsselung: Optional. Aktivieren Sie diese Option, wenn eine Verschlüsselung erforderlich ist.
- Fehlerprotokollierung: Wählen Sie Aktiviert aus (empfohlen).
- Berechtigungen: Wählen Sie Vorhandene IAM-Rolle auswählen und dann
LambdaLogsFirehoseToS3Roleaus.
Klicken Sie auf Firehose-Stream erstellen.
Warten Sie, bis der Status des Streams Aktiv anzeigt.
IAM-Rolle für CloudWatch Logs konfigurieren
Für CloudWatch Logs ist eine IAM-Rolle erforderlich, um Logdaten an den Firehose-Stream zu senden.
IAM-Richtlinie erstellen
- Rufen Sie IAM > Richtlinien > Richtlinie erstellen auf.
- Wählen Sie den Tab JSON aus.
Fügen Sie die folgende Richtlinie ein und ersetzen Sie
<region>und<account-id>durch Ihre AWS-Region und Konto-ID:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/lambda-logs-to-secops" } ] }Klicken Sie auf Weiter.
Geben Sie im Feld Richtlinienname den Namen
LambdaLogsCWLtoFirehosePolicyein.Klicken Sie auf Richtlinie erstellen.
IAM-Rolle erstellen
- Klicken Sie auf IAM > Rollen > Rolle erstellen.
- Wählen Sie Benutzerdefinierte Vertrauensrichtlinie aus.
Fügen Sie die folgende Vertrauensrichtlinie ein (ersetzen Sie
<region>durch Ihre AWS-Region):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }Klicken Sie auf Weiter.
Suchen Sie nach LambdaLogsCWLtoFirehosePolicy und wählen Sie die Richtlinie aus.
Klicken Sie auf Weiter.
Geben Sie im Feld Rollenname
LambdaLogsCWLtoFirehoseRoleein.Klicken Sie auf Rolle erstellen.
CloudWatch Logs-Abo-Filter erstellen
- Rufen Sie in der AWS Console CloudWatch > Logs > Log groups auf.
- Wählen Sie die Loggruppe
/aws/lambda/<function-name>aus. - Wählen Sie den Tab Abo-Filter aus.
- Klicken Sie auf Erstellen> Amazon Data Firehose-Abo-Filter erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Ziel: Wählen Sie den Firehose-Stream
lambda-logs-to-secopsaus. - Berechtigung erteilen: Wählen Sie die Rolle
LambdaLogsCWLtoFirehoseRoleaus. - Name des Abo-Filters: Geben Sie einen aussagekräftigen Namen ein, z. B.
lambda-logs-to-secops-filter. - Logformat: Wählen Sie Other (Andere) aus.
- Muster für Abonnementfilter: Lassen Sie das Feld leer, um alle Logereignisse der Lambda-Funktion zu senden.
- Ziel: Wählen Sie den Firehose-Stream
Klicken Sie auf Streaming starten.
IAM-Nutzer für Google SecOps konfigurieren
Google SecOps benötigt einen IAM-Nutzer mit Zugriff auf den S3-Bucket, um die bereitgestellten Logs aufzunehmen.
- Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die zukünftige 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 der Richtlinie AmazonS3FullAccess.
- Wählen Sie die Richtlinie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
Feed in Google SecOps konfigurieren, um AWS Lambda-Funktionsprotokolle aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie einen eindeutigen Namen für den Feedname ein.
- Wählen Sie Amazon S3 V2 als Quelltyp aus.
- Wählen Sie AWS Lambda-Funktion als Logtyp aus.
- Klicken Sie auf Weiter und dann auf Senden.
- Geben Sie Werte für die folgenden Felder an:
- S3-URI:
s3://lambda-logs-to-secops/lambda-logs/ - Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus.
- Höchstalter für Dateien: Dateien einschließen, die in den letzten Tagen geändert wurden (Standard ist 180 Tage)
- Zugriffsschlüssel-ID: 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
- Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll
- S3-URI:
- Klicken Sie auf Weiter und dann auf Senden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
Activity_id_label |
additional.fields |
Zusammengeführt |
Arrays_label |
additional.fields |
Zusammengeführt |
Name_label |
additional.fields |
Zusammengeführt |
Type_1_label |
additional.fields |
Zusammengeführt |
Type_id_label |
additional.fields |
Zusammengeführt |
Type_label |
additional.fields |
Zusammengeführt |
Uid_label |
additional.fields |
Zusammengeführt |
Uid_label_1 |
additional.fields |
Zusammengeführt |
Value_label |
additional.fields |
Zusammengeführt |
__type_label |
additional.fields |
Zusammengeführt |
attempts_label |
additional.fields |
Zusammengeführt |
class_name_label |
additional.fields |
Zusammengeführt |
contentType_label |
additional.fields |
Zusammengeführt |
env_label |
additional.fields |
Zusammengeführt |
extendedRequestId_label |
additional.fields |
Zusammengeführt |
feature_name_label |
additional.fields |
Zusammengeführt |
line_number_label |
additional.fields |
Zusammengeführt |
logType_label |
additional.fields |
Zusammengeführt |
product_name_label |
additional.fields |
Zusammengeführt |
requestid_label |
additional.fields |
Zusammengeführt |
sourceAccount_label |
additional.fields |
Zusammengeführt |
stack_label |
additional.fields |
Zusammengeführt |
totalRetryDelay_label |
additional.fields |
Zusammengeführt |
vendor_name_label |
additional.fields |
Zusammengeführt |
version_label |
additional.fields |
Zusammengeführt |
has_principal |
extensions.auth.type |
Zugeordnet: true → AUTHTYPE_UNSPECIFIED |
description |
metadata.description |
Direkt zugeordnet |
file_desc |
metadata.description |
Direkt zugeordnet |
Time |
metadata.event_timestamp |
Geparst als UNIX |
time |
metadata.event_timestamp |
Geparst als yyyy-MM-ddTHH:mm:ss.SSSZ |
has_principal |
metadata.event_type |
Zugeordnet: true → USER_LOGIN, true → NETWORK_HTTP, true → NETWORK_CONNECTION, „true“... |
has_principal_user |
metadata.event_type |
Zugeordnet: true → USER_RESOURCE_ACCESS |
Api.Operation |
metadata.product_event_type |
Direkt zugeordnet |
name |
metadata.product_event_type |
Direkt zugeordnet |
Api.Request.Uid |
metadata.product_log_id |
Direkt zugeordnet |
id |
metadata.product_log_id |
Direkt zugeordnet |
meta_data.requestId |
metadata.product_log_id |
Direkt zugeordnet |
Metadata.Version |
metadata.product_version |
Direkt zugeordnet |
version |
metadata.product_version |
Direkt zugeordnet |
meta_data.httpStatusCode |
network.http.response_code |
Direkt zugeordnet |
Http_request.User_agent |
network.http.user_agent |
Direkt zugeordnet |
Actor.Invoked_by |
principal.administrative_domain |
Direkt zugeordnet |
Src_endpoint.Domain |
principal.asset.hostname |
Direkt zugeordnet |
Src_endpoint.Domain |
principal.hostname |
Direkt zugeordnet |
Cloud.Region |
principal.resource.attribute.cloud.availability_zone |
Direkt zugeordnet |
Actor.User.Name |
principal.user.userid |
Direkt zugeordnet |
Status |
security_result.action_details |
Direkt zugeordnet |
Category_name |
security_result.category_details |
Zusammengeführt |
error |
security_result.description |
Direkt zugeordnet |
errorMessage |
security_result.description |
Direkt zugeordnet |
Metadata_uid_label |
security_result.detection_fields |
Zusammengeführt |
category_uid_label |
security_result.detection_fields |
Zusammengeführt |
class_uid_label |
security_result.detection_fields |
Zusammengeführt |
errorType_label |
security_result.detection_fields |
Zusammengeführt |
event_code_label |
security_result.detection_fields |
Zusammengeführt |
fault_label |
security_result.detection_fields |
Zusammengeführt |
functionName_label |
security_result.detection_fields |
Zusammengeführt |
severity_id_label |
security_result.detection_fields |
Zusammengeführt |
sourceArn_label |
security_result.detection_fields |
Zusammengeführt |
type_name_label |
security_result.detection_fields |
Zusammengeführt |
type_uid_label |
security_result.detection_fields |
Zusammengeführt |
user_type_label |
security_result.detection_fields |
Zusammengeführt |
Severity |
security_result.severity |
Zugeordnet: Informational → INFORMATIONAL |
severity |
security_result.severity |
Zugeordnet: INFO → INFORMATIONAL |
msg |
security_result.summary |
Direkt zugeordnet |
Api.Service.Name |
target.application |
Direkt zugeordnet |
service |
target.application |
Direkt zugeordnet |
size |
target.file.size |
Direkt zugeordnet |
filename |
target.process.file.full_path |
Direkt zugeordnet |
Activity_name |
target.resource.name |
Direkt zugeordnet |
targetVar |
target.resource.name |
Direkt zugeordnet |
| – | extensions.auth.type |
Konstante: AUTHTYPE_UNSPECIFIED |
| – | metadata.event_type |
Konstante: USER_UNCATEGORIZED |
| – | metadata.product_name |
Konstante: AWS_Lambda_Function |
| – | metadata.vendor_name |
Konstante: AWS_Lambda_Function |
| – | principal.resource.attribute.cloud.environment |
Konstante: AMAZON_WEB_SERVICES |
| – | security_result.severity |
Konstante: INFORMATIONAL |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten