Direkt zum Inhalt

Wie verwende ich EventBridge mit einem Amazon-SNS-Thema, um benutzerdefinierte E-Mail-Benachrichtigungen für Security-Hub-Erkenntnisse einzurichten?

Lesedauer: 5 Minute
0

Ich möchte Amazon EventBridge mit einem Amazon Simple Notification Service (Amazon SNS)-Thema verwenden, um benutzerdefinierte E-Mail-Benachrichtigungen für AWS Security Hub einzurichten.

Kurzbeschreibung

Die folgende Lösung zeigt dir, wie du Amazon EventBridge mit Amazon SNS für den Empfang von Security-Hub-Benachrichtigungen konfigurierst. Basierend auf der EventBridge-Regel sendet Amazon SNS eine Benachrichtigung an die E-Mail-Adresse, die das Thema abonniert hat, wenn das Ereignis eintritt. Eine AWS-Lambda-Funktion erstellt eine benutzerdefinierte Warnmeldung mit verbesserter Formatierung.

Lösung

Ein SNS-Thema und ein Abonnement erstellen

Gehe wie folgt vor:

  1. Öffne die Amazon-SNS-Konsole.
  2. Wähle im Navigationsbereich Themen aus.
  3. Wähle Thema erstellen aus.
  4. Wähle im Abschnitt Details für Typ die Option Standard.
  5. Gib für Name den Namen deines Themas ein.
  6. Wähle Thema erstellen aus.
  7. Wähle im erstellten Thema die Option Abonnement erstellen aus.
  8. Wähle für Themen-ARN den Amazon-Ressourcennamen (ARN) des Themas aus, das du erstellt hast, falls er nicht automatisch ausgefüllt wird.
  9. Wähle für Protokoll die Option E-Mail.
  10. Gib für Endpunkt die E-Mail-Adresse ein, an die du die SNS-Benachrichtigungen erhalten möchtest.
  11. Wähle Abonnement erstellen aus.
    Wichtig: Du musst das Abonnement in der Bestätigungs-E-Mail bestätigen, die an den Abonnenten gesendet wird, damit das Abonnement vom Status PendingConfirmation zu Confirmed wechselt.
  12. (Optional) Du kannst auch ein authentifiziertes Abonnement erstellen, das die Abmeldeaktion für dein Thema verhindert.

Eine Lambda-Funktion erstellen

Gehe wie folgt vor:

  1. Öffne die Lambda-Konsole.
  2. Wähle im Navigationsbereich Funktionen.
  3. Wähle Funktion erstellen.
  4. Wähle Ohne Vorgabe erstellen aus.
  5. Gib für Funktionsname den Namen der Funktion ein.
  6. Wähle Laufzeit und dann Python 3.14.
  7. Wähle für Architektur x86_64 aus.
  8. Erweitere Standard-Ausführungsrolle ändern.
  9. Wähle für Ausführungsrolle die Option Erstellen Sie eine neue Rolle anhand der AWS-Richtlinienvorlagen.
  10. Gib für Name der Rolle einen Namen für die Rolle ein.
  11. Wähle für Policy template (Richtlinienvorlage) Amazon SNS-Veröffentlichungsrichtlinie aus.
  12. Wähle Funktion erstellen.
  13. Gib den folgenden Code in den Abschnitt Quellcode ein:
import json
import boto3

sns = boto3.client('sns')

def lambda_handler(event, context):

    #Extract details from JSON event
    detailType= event["detail-type"]
    region = event["region"]
    accountId = event["account"]

    #Security Hub Insight Results
    if (detailType == "Security Hub Insight Results"):

        action = event["detail"]["actionDescription"]

        message = "Alert: %s in %s for account: %s\n Action description: %s" % (detailType, region,accountId,action)

    elif  ("Security Hub Findings" in detailType):

        finding = event["detail"]["findings"][0]
        findingTime = finding["FirstObservedAt"]
        findingType = finding["Types"][0]
        findingDescription = finding["Description"]
        remediation = finding["Remediation"]["Recommendation"]["Text"]

        #Security Hub Findings - Custom finding
        if(detailType == "Security Hub Findings - Custom"):
            complianceStatus = finding["Compliance"]["Status"]
            severity = finding["Severity"]["Label"]
            remediationUrl = finding["Remediation"]["Recommendation"]["Url"]

            message = "Alert: %s in %s for account: %s\n\nFinding regarding: [%s] %s\n Severity: %s\nDescription: %s\nFirst observed at: %s\n%s: %s" % (detailType, region, accountId, complianceStatus, findingType,
            severity, findingDescription, findingTime, remediation, remediationUrl)

        #Security Hub Findings - Imported finding
        else:
            message = "Alert: %s in %s for account: %s\n\nFinding regarding: %s\nFirst observed at: %s\nRemediation recommendation: %s" % (detailType, region, accountId, findingDescription,findingTime, remediation)

    #AWS API Call via CloudTrail finding
    elif (detailType == "AWS API Call via CloudTrail"):

        time = event["detail"]["eventTime"]
        eventName = event["detail"]["eventName"]
        requestParameters = event["detail"]["requestParameters"]

        message = "Alert: %s in %s for account: %s at time: %s\n\n Event: %s \n Request parameters: %s" % (detailType, region, accountId, time, eventName, requestParameters)


    #If the event doesn't match any of the above, return the event    
    else:
        message = str(event)

    response = sns.publish(
            TopicArn = "arn:aws:sns:eu-west-1:111122233333:your-arn",
            Message = message
            )

    return {
      'statusCode': 200,
      'body': json.dumps('Success!')
}

Hinweis: Ersetze arn:aws:sns:eu-west-1:111122233333:your-arn durch deinen Themen-ARN. Wähle Bereitstellen.

Die EventBridge-Regel erstellen und konfigurieren

Gehe wie folgt vor:

  1. Öffne die EventBridge-Konsole.
  2. Wähle im Navigationsbereich Regeln und dann Regel erstellen aus.
  3. Gib einen Namen für deine Regel ein und wähle dann Weiter.
  4. Wähle für Methode der Erstellung die Option Musterformat verwenden.
  5. Wähle für Ereignisquelle die Option AWS-Services aus.
  6. Wähle für AWS-Service Security Hub aus.
  7. Wähle für Ereignistyp Alle Ereignisse und dann Weiter aus.
    Hinweis: Du kannst Benachrichtigungen auch nur für bestimmte Ereignisse anstatt für alle Ereignisse konfigurieren.
  8. Wähle für Zieltypen AWS-Service aus.
  9. Wähle für Ein Ziel auswählen die Lambda-Funktion aus.
  10. Wähle für Funktion die Funktion aus, die du zuvor erstellt hast, und dann Weiter.
  11. Wähle auf der Seite Tags konfigurieren die Option Weiter aus.
  12. Wähle Regel erstellen aus.

Eine benutzerdefinierte Benachrichtigung erhalten

Wenn die konfigurierten Ereignisse eintreten, erhältst du eine benutzerdefinierte Benachrichtigungs-E-Mail von no-reply@sns.amazonaws.com.

Die standardmäßigen Security-Hub-Ereignisse werden in ein benutzerdefiniertes Format umformatiert, das lesbarer ist.

Beispiel für eine Security-Hub-Insight-Ergebnismeldung

Standard:

{"version": "0", "id": "ac844908-d14e-05b1-4b7b-836d85110e26", "detail-type": "Security Hub Insight Results", "source": "aws.securityhub", "account": "123456789012", "time": "2019-04-11T21:31:57Z", "region": "us-east-1", "resources": ["arn:aws:securityhub:us-east-1:123456789012:action/custom/slackMessaging"], "detail": {"actionName": "SendToSlack", "actionDescription": "Send Findings to Slack", "insightName": "5. AWS users with the most suspicious activity", "insightArn": "arn:aws:securityhub:::insight/securityhub/default/9", "resultType": "ResourceAwsIamAccessKeyUserName", "insightResults": [{"Admin": 7}, {"DenySlr_UI_User": 1}]}}

Benutzerdefiniert:

Warnung: Security-Hub-Insight-Ergebnisse in us-east-1 für Konto: 123456789012

Beschreibung der Aktion: Erkenntnisse an Slack senden

Hinweis: Du kannst die Nachricht für jeden Sicherheitserkenntnistyp für deinen Anwendungsfall bearbeiten.

Ähnliche Informationen

Wie konfiguriere ich EventBridge-Regeln für GuardDuty, um benutzerdefinierte SNS-Benachrichtigungen für bestimmte Arten von Serviceerkenntnissen zu senden?

Tutorial: Verwendung des Eingabe-Transformers, um Weiterleitungen von EventBridge an das Ereignisziel anzupassen

Warum hat meine EventBridge-Regel meine Lambda-Funktion nicht aufgerufen?