Passer au contenu

Comment utiliser EventBridge avec une rubrique Amazon SNS afin de configurer des notifications par e-mail personnalisées pour les résultats de Security Hub ?

Lecture de 5 minute(s)
0

Je souhaite utiliser Amazon EventBridge avec une rubrique Amazon Simple Notification Service (Amazon SNS) afin de configurer des notifications par e-mail personnalisées pour AWS Security Hub.

Brève description

La résolution suivante explique comment configurer Amazon EventBridge avec Amazon SNS pour recevoir des notifications Security Hub. Selon la règle EventBridge, Amazon SNS envoie une notification à l'adresse e-mail abonnée à la rubrique lorsque votre événement se produit. Une fonction AWS Lambda crée un message d'alerte personnalisé avec un formatage amélioré.

Résolution

Créer une rubrique SNS et un abonnement

Procédez comme suit :

  1. Ouvrez la console Amazon SNS.
  2. Dans le volet de navigation, sélectionnez Rubriques.
  3. Sélectionnez Créer une rubrique.
  4. Dans la section Détails, pour Type, choisissez Standard.
  5. Pour Nom, saisissez le nom de votre rubrique.
  6. Sélectionnez Créer une rubrique.
  7. Dans la rubrique créée, choisissez Créer un abonnement.
  8. Pour ARN de la rubrique, sélectionnez l’Amazon Resource Name (ARN) de la rubrique que vous avez créée s'il n'est pas automatiquement renseigné.
  9. Pour Protocole, sélectionnez E-mail.
  10. Pour Point de terminaison, saisissez l’adresse e-mail à laquelle vous souhaitez recevoir des notifications.
  11. Sélectionnez Créer un abonnement.
    Important : vous devez confirmer l'abonnement dans l'e-mail de confirmation envoyé à l'abonné pour que celui-ci passe de l’état En attente de confirmation à l’état Confirmé.
  12. (Facultatif) Vous pouvez également créer un abonnement authentifié qui empêche toute action de désabonnement sur votre rubrique.

Créer une fonction Lambda

Procédez comme suit :

  1. Ouvrez la console Lambda.
  2. Dans le volet de navigation, sélectionnez Fonctions.
  3. Sélectionnez Créer une fonction.
  4. Sélectionnez Créer à partir de zéro.
  5. Dans Nom de la fonction, saisissez le nom de votre fonction.
  6. Sélectionnez Exécution, puis Python 3.14.
  7. Pour Architecture, sélectionnez x86_64.
  8. Développez la section Modifier le rôle d’exécution par défaut.
  9. Pour Rôle d'exécution, sélectionnez Créer un nouveau rôle à partir des modèles de politiques AWS.
  10. Pour Nom du rôle, saisissez le nom du rôle.
  11. Pour Modèle de politique, sélectionnez Politique de publication Amazon SNS.
  12. Sélectionnez Créer une fonction.
  13. Saisissez le code suivant dans la section Code source :
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!')
}

Remarque : remplacez arn:aws:sns:eu-west-1:111122233333:your-arn par l'ARN de votre rubrique. Sélectionnez Déployer.

Créer et configurer la règle EventBridge

Procédez comme suit :

  1. Ouvrez la console EventBridge.
  2. Dans le volet de navigation, choisissez Règles, puis Créer une règle.
  3. Saisissez un nom pour votre règle, puis sélectionnez Suivant.
  4. Pour Méthode de création, sélectionnez Utiliser le formulaire de modèle.
  5. Pour Source de l'événement, sélectionnez Services AWS.
  6. Pour Service AWS, sélectionnez Security Hub.
  7. Pour Type d'événement, sélectionnez Tous les événements, puis Suivant.
    Remarque : vous pouvez également configurer des alertes pour des événements spécifiques plutôt que pour tous les événements.
  8. Pour Types de cibles, sélectionnez Service AWS.
  9. Pour Sélectionner une cible, sélectionnez Fonction Lambda.
  10. Pour Fonction, choisissez la fonction que vous avez créée précédemment, puis sélectionnez Suivant.
  11. Sur la page Configurer les identifications, choisissez Suivant.
  12. Sélectionnez Créer une règle.

Recevoir une notification personnalisée

Lorsque les événements configurés se produisent, vous recevez un e-mail de notification personnalisé de no-reply@sns.amazonaws.com.

Les événements Security Hub par défaut sont reformatés dans un format personnalisé plus lisible.

Exemple de message de résultat de Security Hub Insight

Par défaut :

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

Customized:

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

Action description: Send Findings to Slack

Remarque : vous pouvez modifier le message pour chaque type de résultat de sécurité en fonction de votre cas d'utilisation.

Informations connexes

Comment configurer les règles EventBridge afin que GuardDuty envoie des notifications SNS personnalisées pour des types de résultats de service spécifiques ?

Didacticiel : Utiliser le transformateur d’entrée pour personnaliser les notifications EventBridge transmises à la cible de l’événement

Pourquoi ma règle EventBridge n'a-t-elle pas invoqué ma fonction Lambda ?