Logs von AWS Lambda-Funktionen erfassen

Unterstützt in:

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:

  1. Rufen Sie in der AWS Console CloudWatch > Logs > Log groups auf.
  2. Suchen Sie nach /aws/lambda/.
  3. Prüfen Sie, ob für jede Lambda-Funktion, deren Logs Sie erfassen möchten, eine Loggruppe vorhanden ist.

AWS S3-Bucket konfigurieren

  1. Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
  2. 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

  1. Rufen Sie in der AWS Console IAM > Policies > Create policy auf.
  2. Wählen Sie den Tab JSON aus.
  3. Fügen Sie die folgende Richtlinie ein und ersetzen Sie lambda-logs-to-secops durch 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:*"
            }
        ]
    }
    
  4. Klicken Sie auf Weiter.

  5. Geben Sie im Feld Richtlinienname den Namen LambdaLogsFirehoseS3Policy ein.

  6. Klicken Sie auf Richtlinie erstellen.

IAM-Rolle erstellen

  1. Klicken Sie auf IAM > Rollen > Rolle erstellen.
  2. Wählen Sie Benutzerdefinierte Vertrauensrichtlinie aus.
  3. Fügen Sie die folgende Vertrauensrichtlinie ein:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Klicken Sie auf Weiter.

  5. Suchen Sie nach LambdaLogsFirehoseS3Policy und wählen Sie die Richtlinie aus.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Feld Rollenname LambdaLogsFirehoseToS3Role ein.

  8. Klicken Sie auf Rolle erstellen.

Amazon Data Firehose-Stream erstellen

  1. Öffnen Sie die Kinesis-Konsole unter https://console.aws.amazon.com/kinesis.
  2. Wählen Sie im Navigationsbereich Amazon Data Firehose aus.
  3. Klicken Sie auf Firehose-Stream erstellen.
  4. 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.
  5. Geben Sie im Feld Name des Firehose-Streams lambda-logs-to-secops ein.
  6. Klicken Sie unter Datensätze transformieren im Abschnitt Quelldatensätze aus Amazon CloudWatch Logs dekomprimieren auf:

    1. Wählen Sie Dekomprimierung aktivieren aus.
    2. Wählen Sie Nachrichtenextraktion aktivieren nicht aus.
  7. Unter Zieleinstellungen:

    • S3-Bucket: Wählen Sie den S3-Bucket lambda-logs-to-secops aus.
    • S3-Bucket-Präfix (optional): Geben Sie lambda-logs/ ein.
    • S3-Bucket-Fehlerausgabepräfix (optional): Geben Sie firehose-errors/ ein.
  8. Unter Pufferhinweise:

    • Puffergröße: 5 MiB (Standard).
    • Pufferintervall: 300 Sekunden (Standard).
  9. 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 LambdaLogsFirehoseToS3Role aus.
  10. Klicken Sie auf Firehose-Stream erstellen.

  11. 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

  1. Rufen Sie IAM > Richtlinien > Richtlinie erstellen auf.
  2. Wählen Sie den Tab JSON aus.
  3. 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"
            }
        ]
    }
    
  4. Klicken Sie auf Weiter.

  5. Geben Sie im Feld Richtlinienname den Namen LambdaLogsCWLtoFirehosePolicy ein.

  6. Klicken Sie auf Richtlinie erstellen.

IAM-Rolle erstellen

  1. Klicken Sie auf IAM > Rollen > Rolle erstellen.
  2. Wählen Sie Benutzerdefinierte Vertrauensrichtlinie aus.
  3. 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"
            }
        ]
    }
    
  4. Klicken Sie auf Weiter.

  5. Suchen Sie nach LambdaLogsCWLtoFirehosePolicy und wählen Sie die Richtlinie aus.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Feld Rollenname LambdaLogsCWLtoFirehoseRole ein.

  8. Klicken Sie auf Rolle erstellen.

CloudWatch Logs-Abo-Filter erstellen

  1. Rufen Sie in der AWS Console CloudWatch > Logs > Log groups auf.
  2. Wählen Sie die Loggruppe /aws/lambda/<function-name> aus.
  3. Wählen Sie den Tab Abo-Filter aus.
  4. Klicken Sie auf Erstellen> Amazon Data Firehose-Abo-Filter erstellen.
  5. Geben Sie die folgenden Konfigurationsdetails an:
    • Ziel: Wählen Sie den Firehose-Stream lambda-logs-to-secops aus.
    • Berechtigung erteilen: Wählen Sie die Rolle LambdaLogsCWLtoFirehoseRole aus.
    • 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.
  6. 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.

  1. Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
  2. Wählen Sie den erstellten Nutzer aus.
  3. Wählen Sie den Tab Sicherheitsanmeldedaten aus.
  4. Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
  5. Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
  6. Klicken Sie auf Weiter.
    • Optional: Fügen Sie ein Beschreibungstag hinzu.
  7. Klicken Sie auf Zugriffsschlüssel erstellen.
  8. 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.
  9. Klicken Sie auf Fertig.
  10. Wählen Sie den Tab Berechtigungen aus.
  11. Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
  12. Wählen Sie Berechtigungen hinzufügen aus.
  13. Wählen Sie Richtlinien direkt anhängen aus.
  14. Suchen Sie nach der Richtlinie AmazonS3FullAccess.
  15. Wählen Sie die Richtlinie aus.
  16. Klicken Sie auf Weiter.
  17. Klicken Sie auf Berechtigungen hinzufügen.

Feed in Google SecOps konfigurieren, um AWS Lambda-Funktionsprotokolle aufzunehmen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie einen eindeutigen Namen für den Feedname ein.
  5. Wählen Sie Amazon S3 V2 als Quelltyp aus.
  6. Wählen Sie AWS Lambda-Funktion als Logtyp aus.
  7. Klicken Sie auf Weiter und dann auf Senden.
  8. 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
  9. 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