Blog

AWS Inspector: Benachrichtigung über kritische Schwachstellen über SNS, Lambda und EventBridge

Bild von Daniel Dimitrov
Daniel Dimitrov
DevOps- und Cloud-Ingenieur
05.10.2023
Lesezeit: 6 Minuten.
Zuletzt aktualisiert am: 17.09.2025

Inhaltsübersicht

Beim Umgang mit komplexen Cloud-Infrastrukturen und Diensten in vielen verschiedenen Bereichen sind oft wichtige Sicherheitskontrollen und Audits erforderlich. Glücklicherweise bietet die öffentliche Cloud Dienste für Überwachung, Sicherheit, Schwachstellenprüfung usw. an.

Wenn wir mit AWS arbeiten, haben wir Dienste wie GuardDuty, CloudWatch, CloudTrail, Inspector usw. Wir können mit all diesen Diensten Ausgabedateien generieren, so dass ein Bericht bei Bedarf nicht schwer zu erstellen ist. Aber warum müssen wir uns einem Audit stellen, um die Sicherheitsschwachstellen in unserer Infrastruktur zu untersuchen? 

Wenn man über Schwachstellen spricht, kommt einem AWS Inspector in den Sinn. Dabei handelt es sich um einen Dienst, der Anwendungen automatisch auf Schwachstellen und Abweichungen von bewährten Verfahren prüft und eine detaillierte Liste mit Sicherheitsfeststellungen und priorisierten Empfehlungen bereitstellt. Klingt gut, nicht wahr. Aber es gibt keine Benachrichtigungen, wenn ein kritisches Problem gefunden wird. Das bedeutet, dass die Infrastrukturingenieure den Inspektor regelmäßig überprüfen müssen, um die Infrastruktur zu überwachen. Diese Aufgabe ist nicht besonders schwierig, aber sie kostet Zeit und kann sehr lästig sein, vor allem, wenn es wichtigere und entscheidendere Dinge zu tun gibt. Wenn es also standardmäßig keine vorgefertigten Benachrichtigungen gibt, sollten wir sie mit einer Lambda-Funktion, einem SNS-Thema und einem S3-Bucket erstellen.

S3-Bucket erstellen

Zunächst müssen Sie einen S3-Bucket erstellen, um die Ergebnisse von Inspector zu speichern. Gehen Sie dazu einfach zu Amazon S3 -> Bucket erstellen. Geben Sie ihm einen Namen, in unserem Fall wählen wir aws-inspector-findings-01. Denken Sie daran, dass der Bucket-Name in S3 eindeutig sein sollte.

Bucket List erstellen

Behalten Sie die Einstellung zum Blockieren aller öffentlichen Zugriffe bei, denn Sie wollen ja nicht, dass Ihre Schwachstellen öffentlich sind, oder?

Einstellungen zum Sperren des öffentlichen Zugriffs für diesen Bucket

Nachdem Sie die Einrichtung und Erstellung des Containers abgeschlossen haben, gehen Sie in den Container und dann auf Permissions -> Bucket policy -> Edit. Sie müssen dem AWS Inspector die Erlaubnis erteilen, Ergebnisse im Container zu speichern. Die Richtlinie sollte in etwa wie folgt aussehen:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow inspector to perform Put and Delete actions on s3",
            "Effect": "Allow",
            "Principal": {
                "Service": "inspector2.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::BUCKET_NAME/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "AWS_ACCOUNT_ID"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:inspector2:REGION:WS_ACCOUNT_ID:report/*"
                }
            }
        }
    ]
}

Stellen Sie sicher, dass Sie die Wörter in Großbuchstaben durch Ihre Informationen ersetzen: BUCKET_NAME, AWS_ACCOUNT_ID, REGION.

KMS-Schlüssel generieren

Der nächste Schritt vor der Erstellung der Lambda-Funktion besteht darin, einen KMS-Schlüssel mit einigen Berechtigungen zu erzeugen. Denn wir wollen unsere sensiblen Schwachstelleninformationen nicht unverschlüsselt vom Inspector übertragen und speichern. Um Ihren Schlüssel zu generieren, gehen Sie zu Key Management Service -> Create a key und folgen Sie den Schritten. Nachdem Sie den Schlüssel erstellt haben, müssen Sie die Schlüsselrichtlinie bearbeiten. Unten sehen Sie ein Beispiel dafür, wie sie aussehen sollte:

{
    "Version": "2012-10-17",
    "Id": "ID",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AWS_ACCOUNT_ID:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
"Sid": "Allow inspector to perform kms actions",
            "Effect": "Allow",
            "Principal": {
                "Service": "inspector2.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "AWS_ACCOUNT_ID"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:inspector2:REGION:AWS_ACCOUNT_ID:report/*"
                }
            }
        }
    ]
}

Lambda-Funktion einrichten

Jetzt können Sie mit der Erstellung Ihrer Lambda-Funktion beginnen. Die Funktion soll eine Datei generieren, wenn eine kritische Sicherheitslücke gefunden wird, und sie automatisch und ohne manuelle Schritte im S3-Bucket speichern.

In diesem Beispiel werden wir Python verwenden, aber Sie können die Sprache Ihrer Wahl wählen. Um eine Funktion zu erstellen, gehen Sie zu Lambda -> Funktion erstellen. Geben Sie ihm einen Namen (wir wählen aws-inspector-benachrichtigungen-01), ändern Sie die Laufzeit in Python 3.10 und die Architektur beibehalten x86_64. Dann können Sie auf Funktion erstellen.

Lambda-Funktion einrichten

Hier ist ein Codeschnipsel, wenn Sie unser Beispiel verwenden möchten:

import json boto3

service = boto3.service('inspector2')

def lambda_handler(event, context):
    response = service.create_sbom_export(
        reportFormat='SPDX_2_3',
        resourceFilterCriteria={
            'ec2InstanceTags': [
                {
                    'comparison': 'EQUALS',
                    'key': 'Criticality',
                    'value': event['Criticality']
                },
            ]
        },
        s3Destination={
            'bucketName': 'BUCKET_NAME',
            'kmsKeyArn': 'KMS_KEY_ARN'
        }
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps(response)
    }

In diesem Beispiel verwenden wir die Module json und boto3. Das Json-Modul dient der Serialisierung und Deserialisierung von JSON. Das Boto3-Modul wird importiert, um mit AWS-Services zu interagieren. Die service-Variable initialisiert einen AWS Inspector-Service mit Boto3. Die Service-Variable ermöglicht die Interaktion mit dem AWS Inspector-Service.

Lambda_handler ist die wichtigste Lambda-Handler-Funktion, die aufgerufen wird, wenn die Lambda-Funktion aufgerufen wird und die create_sbom_export-Methode des AWS Inspector-Clients aufruft. Sie exportiert einen Software Bill of Materials (SBOM)-Bericht. Das Format(reportFormat) in unserem Beispiel ist SPDX_2_3. 

Die Filterkriterien basieren auf einem Wert des Schlüssels Criticality, der später in Critical geändert wird, um nur kritische Schwachstellen herauszufiltern.
Der SBOM-Bericht wird in einen S3-Bucket exportiert, der durch BUCKET_NAME angegeben wird, und der für die Verschlüsselung verwendete KMS-Schlüssel wird durch KMS_KEY_ARM angegeben. Sie können die Funktion testen, indem Sie auf Test gehen. Geben Sie ihr einen Namen und vergessen Sie nicht, den Filter auf kritisch zu setzen:

{
 "Criticality": "critical"
}
Test Ereignisliste

Klicken Sie dann einfach auf Test. Wenn alles richtig konfiguriert ist, sollten Sie dieses grüne Feld mit Funktion ausführen: erfolgreich sehen .

Ausführen der Funktion Erfolg

EventBridge Scheduler

Wenn die Lambda-Funktion fertig ist, sollten Sie mit AWS EventBridge einen Scheduler erstellen. Es gibt viele verschiedene Möglichkeiten, eine Lambda-Funktion auszulösen, aber für dieses Beispiel werden wir es auf täglicher Basis tun. Um den Scheduler zu konfigurieren, gehen Sie zu EventBridge -> Scheduler -> Schedules -> Create schedule. Geben Sie ihm einen Namen und eine Beschreibung Ihrer Wahl, Occurrence sollte Recurring schedule sein, so dass er die Lambda-Funktion kontinuierlich auf einer Cron-Basis auslöst. Hier können Sie den Cron so ändern, dass er die Funktion auslöst, wann immer Sie wollen, aber wir bevorzugen es, jeden Tag um 1:00 Uhr zu starten:

EventBridge Scheduler

Wählen Sie dann für das Ziel AWS Lambda Invoke, wählen Sie dann Ihre Lambda-Funktion und schreiben Sie für Payload das json, das wir zum Testen verwenden:

EventBridge Scheduler aws lambda

SNS-Thema für Benachrichtigungen

So weit so gut, wir haben einen Scheduler und eine Funktion, die Befunde an S3 sendet. Jetzt brauchen wir ein SNS-Thema und eine S3-Ereignisbenachrichtigung, damit wir benachrichtigt werden können, wenn ein neuer Fund in unserem Bucket erscheint. Gehen Sie zu SNS -> Themen -> Thema erstellen und folgen Sie dem Prozess. Wir müssen die Richtlinie für das SNS-Thema bearbeiten, unsere sieht wie folgt aus:

{
  "Version": "2012-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish"
      ],
      "Resource": "SNS_TOPIC_ARN",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "ACOUNT_ID"
        }
      }
    },
    {
      "Sid": "AllowS3ToPublishToSNSTopic",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "SNS_TOPIC_ARN"
    }
  ]
}

Dann benötigen Sie ein SNS-Abonnement für Ihre E-Mail-Adresse oder die E-Mail-Adresse, an die die Benachrichtigungen gesendet werden sollen. Sie können der offiziellen AWS-Dokumentation folgen.

Nachdem die E-Mail konfiguriert ist, müssen Sie zurück zum S3-Bucket gehen, das wir unter 1 erstellt haben. Gehen Sie dann zu Eigenschaften und scrollen Sie nach unten zu Ereignisbenachrichtigungen. Jetzt sollten wir eine Benachrichtigung für die Ergebnisse mit Pfad, Präfix und Suffix erstellen, damit das sns-Thema Sie benachrichtigt, wenn ein neues Objekt dort hochgeladen wird.

Allgemeine Konfiguration

Wählen Sie Event Types to Put and Post und scrollen Sie nach unten, um Ihr SNS-Thema auszuwählen.

EventBridge Scheduler

Zum Abschluss

Jetzt haben wir eine Automatisierungsfunktion, mit der wir täglich die Ergebnisse für kritische Schwachstellen erhalten und sie rechtzeitig beheben können. Sie können die Lambda-Funktion jederzeit so ändern, dass Sie jeden Tag vollständige Befunde erhalten. Vielleicht brauchen Sie sie aber auch nicht jeden Tag. Vielleicht brauchen Sie sie einmal in der Woche oder einmal im Monat. Das bleibt Ihnen überlassen. 

Entdecken Sie die Dienstleistungen von ITGix und erfahren Sie mehr über unser Know-how.

Eine Antwort hinterlassen

Newsletter für Tech-Experten

Signal, kein Rauschen –

direkt in Ihren Posteingang.

Schließen Sie sich mehr als 12.000 Ingenieuren und Führungskräften aus der Wirtschaft an, die Praxisberichte zu SRE, DevOps und Cloud-nativer Zuverlässigkeit erhalten.

Tech-Blogs mit tiefgehenden Einblicken und Fallstudien
Neue Technologien, sorgfältig ausgewählt

Ihre geschäftliche E-Mail-Adresse

Wir gehen respektvoll mit Ihrem Posteingang um. Lesen Sie unsere Datenschutzerklärung.

Mehr Beiträge

Bei der Arbeit mit Terraform sollte das Standard-Meta-Argument zum Erstellen von Ressourcen fast immer „for_each“ lauten – insbesondere bei Infrastruktur, die voraussichtlich lange bestehen bleibt und sich weiterentwickelt...
Lesen
Die sichere Verwaltung von Geheimnissen in Kubernetes stellt eine entscheidende Herausforderung für moderne Cloud-native Umgebungen dar. Anmeldedaten für Anwendungen, Zertifikate, private Schlüssel und Passwörter müssen auf sichere und nachverfolgbare Weise verwaltet werden, ...
Lesen
Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.