Salta al contenuto

Come posso configurare notifiche e-mail personalizzate per gli esiti di Security Hub utilizzando EventBridge con un topic Amazon SNS?

5 minuti di lettura
0

Desidero configurare notifiche e-mail personalizzate per AWS Security Hub utilizzando Amazon EventBridge con un topic Amazon Simple Notification Service (Amazon SNS).

Breve descrizione

La seguente risoluzione mostra come configurare Amazon EventBridge con Amazon SNS per ricevere notifiche relative a Security Hub. In base alla regola di EventBridge, Amazon SNS invia una notifica all'indirizzo e-mail che ha sottoscritto il topic quando si verifica l'evento. Una funzione AWS Lambda crea un avviso personalizzato con una formattazione migliorata.

Risoluzione

Crea un topic SNS e una sottoscrizione

Completa i seguenti passaggi:

  1. Apri la console Amazon SNS.
  2. Nel pannello di navigazione, scegli Argomenti.
  3. Scegli Crea argomento.
  4. Nella sezione Dettagli, per Tipo, scegli Standard.
  5. In Nome, inserisci il nome del topic.
  6. Scegli Crea argomento.
  7. Dal topic creato, scegli Crea sottoscrizione.
  8. Per ARN argomento, seleziona il nome della risorsa Amazon (ARN) del topic che hai creato se non è stato compilato automaticamente.
  9. Per Protocollo, seleziona E-mail.
  10. In Endpoint, inserisci l'indirizzo e-mail su cui desideri ricevere le notifiche di SNS.
  11. Scegli Crea sottoscrizione.
    Importante: devi confermare la sottoscrizione nell'e-mail di conferma inviata al sottoscrittore affinché la sottoscrizione passi dallo stato In attesa di conferma allo stato Confermata.
  12. (Facoltativo) Puoi anche creare una sottoscrizione autenticata che impedisce di eseguire l'azione di annullamento della sottoscrizione sul topic.

Crea una funzione Lambda

Completa i seguenti passaggi:

  1. Apri la console Lambda.
  2. Nel pannello di navigazione, scegli Funzioni.
  3. Scegli Crea funzione.
  4. Scegli Crea da zero.
  5. In Nome funzione, inserisci un nome per la funzione.
  6. Scegli Runtime, quindi seleziona Python 3.14.
  7. Per Architettura, seleziona x86_64.
  8. Espandi Modifica del ruolo di esecuzione predefinito.
  9. Per Ruolo di esecuzione, seleziona Crea un nuovo ruolo dalla policy AWS templates.
  10. In Nome ruolo, inserisci un nome per il ruolo.
  11. Per Modello di policy, scegli Policy di pubblicazione di Amazon SNS.
  12. Scegli Crea funzione.
  13. Inserisci il seguente codice nella sezione Origine del codice:
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!')
}

Nota: sostituisci arn:aws:sns:eu-west-1:111122233333:your-arn con l'ARN del tuo topic. Scegli Distribuisci.

Crea e configura la regola di EventBridge

Completa i seguenti passaggi:

  1. Apri la console EventBridge.
  2. Nel pannello di navigazione, scegli Regole, quindi seleziona Crea regola.
  3. Inserisci un Nome per la regola, quindi scegli Avanti.
  4. Per Metodo di creazione, scegli Utilizza modulo del modello.
  5. Per Origine dell'evento, seleziona Servizi AWS.
  6. Per Servizio AWS, seleziona Security Hub.
  7. Per Tipo di evento, seleziona Tutti gli eventi, quindi scegli Avanti.
    Nota: puoi anche configurare avvisi per eventi specifici anziché per tutti gli eventi.
  8. Per Tipi di destinazione, scegli Servizio AWS.
  9. Per Seleziona una destinazione, scegli Funzione Lambda.
  10. Per Funzione, scegli la funzione che hai creato in precedenza, quindi seleziona Avanti.
  11. Nella pagina Configura i tag, scegli Avanti.
  12. Scegli Crea regola.

Ricevi una notifica personalizzata

Quando si verificano gli eventi configurati, ricevi un'e-mail di notifica personalizzata da no-reply@sns.amazonaws.com.

Gli eventi di Security Hub predefiniti vengono riformulati in un formato personalizzato più leggibile.

Esempio di messaggio di esito di Security Hub Insight

Predefinito:

{"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}]}}

Personalizzato:

Alert: Security Hub Insight Results in us-east-1 for account: 123456789012

Action description: Send Findings to Slack

Nota: puoi modificare il messaggio per ogni tipo di esito di sicurezza in funzione del caso d'uso.

Informazioni correlate

Come posso configurare regole EventBridge per consentire a GuardDuty di inviare notifiche SNS personalizzate per specifici tipi di esito del servizio?

Tutorial: usa i trasformatori di input per trasformare gli eventi in EventBridge

Perché la mia regola di EventBridge non ha invocato la mia funzione Lambda?