Comment configurer des notifications par e-mail personnalisées à l'aide de CloudWatch Events avec une rubrique Amazon SNS ?

Date de la dernière mise à jour : 22/06/2021

Je souhaite configurer une notification par e-mail personnalisée à l'aide d'Amazon CloudWatch Events et d'une rubrique Amazon Simple Notification Service (Amazon SNS).

Brève description

La solution suivante montre comment configurer une règle CloudWatch Events avec une rubrique SNS comme cible. Selon la règle, Amazon SNS envoie une notification à l'adresse ou aux adresses e-mail abonnées à la rubrique lorsque votre évènement se produit. Le message est difficile à lire en raison de sa mise en forme. Toutefois, vous pouvez utiliser une fonction AWS Lambda pour créer un message d'alerte personnalisé avec une mise en forme améliorée.

Important : La solution suivante utilise les évènements AWS Security Hub et une fonction Lambda pour la personnalisation. Pour plus d'informations sur les coûts associés, consultez Tarification AWS Security Hub et Tarification AWS Lambda.

Solution

Créer une rubrique SNS

1.    Ouvrez la console Amazon SNS.

2.    Sur le volet de navigation, choisissez Rubriques.

3.    Choisissez Create topic (Créer une rubrique).

4.    Dans la section Détails, sélectionnez Standard pour Type.

5.    Pour Nom, saisissez le nom de votre rubrique.

6.    Choisissez Créer une rubrique.

Créer un abonnement

1.    Dans la rubrique créée, sélectionnez Créer un abonnement.

2.    Pour ARN de rubrique, sélectionnez l'Amazon Resource Name (ARN) de la rubrique que vous avez créée précédemment.

Remarque : Il est possible que l'ARN de rubrique soit déjà renseigné avec l'ARN de la rubrique que vous avez créée précédemment.

3.    Pour Protocole, saisissez E-mail

4.    Pour Point de terminaison, saisissez l'adresse e-mail à laquelle vous souhaitez recevoir les notifications SNS.

5.    Sélectionnez Créer un abonnement.

Important : Vous devez confirmer l'abonnement dans l'e-mail de confirmation envoyé à l'abonné pour que l'abonnement passe du statut PendingConfirmation à Confirmed

Remarque : (Facultatif) Vous pouvez également créer un abonnement authentifié qui empêche l'action de désabonnement sur votre rubrique.

Configurer la règle CloudWatch Events

1.    Ouvrez la console CloudWatch.

2.    Dans le panneau de navigation, dans la section Évènements, choisissez Règles.

3.    Choisissez Create rule (Créer une règle).

4.    Pour Nom du service, choisissez Security Hub.

5.    Pour Type d'évènement, choisissez Tous les évènements.

Remarque : Pour configurer des alertes pour des évènements plus spécifiques, reportez-vous à la section Types d'intégration de Security Hub avec EventBridge.

6.    Dans la section Cibles, choisissez Ajouter une cible.

7.    Dans le menu cible, choisissez la rubrique SNS.

8.    Pour Rubrique, sélectionnez la rubrique que vous avez créée précédemment.

9.    Sélectionnez Configure details.

10.    Pour Nom, saisissez un nom pour votre règle.

11.    Choisissez Créer une règle.

Tester la règle

1.    Ouvrez AWS Security Hub.

2.    Dans le panneau de navigation, sélectionnez Résultats.

3.    Dans la liste des résultats, cochez la case correspondant au résultat pour lequel vous souhaitez recevoir une alerte.

4.    Choisissez Actions, puis Envoyer par e-mail.

5.    Consultez votre boîte de réception e-mail pour savoir si vous avez reçu un message de notification AWS de la part de no-reply@sns.amazonaws.com. Par exemple :

{“version”: “0”,“id”: “91ce02aa-7c08-bacc-cc71-10837f6ef124”,“detail-type”: “Security Hub Findings - Custom Action”,“source”: “aws.securityhub”,“account”: “111122223333”,“time”: “2021-06-17T11:44:13Z”,“region”: “us-east-1”,“resources”: [“arn:aws:securityhub:us-east-1:111122223333:action/custom/SendToEmail”],“detail”: {“actionName”: “Send to email”,“actionDescription”: “This Custom Action sends selected findings to email addresses defined in an SNS Topic Subscription.”,“findings”: [{“ProductArn”: “arn:aws:securityhub:us-east-1::product/aws/securityhub”,“Types”: [“Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark”],“Description”: “The \”root\” account has unrestricted access to all resources in the AWS account. It is highly recommended that the use of this account be avoided.”,“Compliance”: {“Status”: “FAILED”,“StatusReasons”: [{“Description”: “Multi region CloudTrail with the required configuration does not exist in the account”,“ReasonCode”:“CLOUDTRAIL_MULTI_REGION_NOT_PRESENT”}]},“ProductName”: “Security Hub”,“FirstObservedAt”:“2020-10-22T10:18:10.991Z”,“CreatedAt”: “2020-10-22T10:18:10.991Z”,“LastObservedAt”: “2021-06-17T10:36:41.175Z”,“CompanyName”: “AWS”,“FindingProviderFields”: {“Types”: [“Software and Configuration Checks/Industry and Regulatory Standards/CIS AWS Foundations Benchmark”],“Severity”: {“Normalized”: 30,“Label”: “LOW”,“Product”: 30,“Original”: “LOW”}},“ProductFields”: {“StandardsGuideArn”: “arn: aws: securityhub: : : ruleset/cis-aws-foundations-benchmark/v/1.2.0”,“StandardsGuideSubscriptionArn”: “arn: aws: securityhub: us-east-1: 111122223333: subscription/cis-aws-foundations-benchmark/v/1.2.0”,“RuleId”: “1.1”,“RecommendationUrl”: “SampleURL”,“aws/securityhub/CompanyName”: “AWS”,“aws/securityhub/annotation”:“MultiregionCloudTrailwiththerequiredconfigurationdoesnotexistintheaccount”,“Resources: 0/Id”: “arn: aws: iam: : 111122223333: root”,“aws/securityhub/FindingId”: “arn: aws: securityhub: us-east-1: : product/aws/securityhub/arn: aws: securityhub: us-east-1:111122223333: subscription/cis-aws-foundations-benchmark/v/1.2.0/1.1/finding/4eccb91a-c940-4e1d-90de-7c046369b89f”},“Remediation”: {“Recommendation”:{“Text”:“FordirectionsonhowtofixthisissuepleaseconsulttheAWSSecurityHubCISdocumentation.”,“Url”:“SampleURL”}},“SchemaVersion”:“2018-10-08”,“GeneratorId”: “arn: aws: securityhub: : : ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.1”,“RecordState”: “ACTIVE”,“Title”: “1.1Avoidtheuseofthe\”root\”account”,“Workflow”: {“Status”: “NEW”},“Severity”: {“Normalized”: 30,“Label”: “LOW”,“Product”: 30,“Original”: “LOW”},“UpdatedAt”: “2021-06-17T10: 36: 39.712Z”,“WorkflowState”: “NEW”,“AwsAccountId”: “111122223333”,“Region”:“us-east-1”,“Id”: “arn: aws: securityhub: us-east-1:111122223333: subscription/cis-aws-foundations-benchmark/v/1.2.0/1.1/finding/4eccb91a-c940-4e1d-90de-7c046369b89f”,“Resources”: [{ “Partition”: “aws”,”Type”: “AwsAccount”,”Region”: “us-east-1”,”Id”: “AWS: : : : Account: 111122223333”}]}]}}
--
Si vous souhaitez ne plus recevoir de notifications de cette rubrique, cliquez sur le lien ci-dessous ou visitez-le pour vous désinscrire :
Se désinscrire


Veuillez ne pas répondre directement à cet e-mail. Si vous avez des questions ou des commentaires concernant cet e-mail, veuillez nous contacter à l'adresse https://aws.amazon.com/support.

Personnalisation de l'alerte à l'aide d'une fonction Lambda

Créez une fonction Lambda qui extrait les informations souhaitées du contenu JSON et publiez-les sur Amazon SNS.

1.    Ouvrez la console Lambda.

2.    Dans le panneau de navigation, sélectionnez Fonctions.

3.    Choisissez Create function (Créer une fonction).

4.    Choisissez Créer à partir de zéro.

5.    Pour Nom de la fonction, saisissez un nom pour votre fonction.

6.    Choisissez Exécution, puis Python 3.7.

7.    Développez Modifier le rôle d'exécution par défaut.

8.    Pour Rôle d'exécution, sélectionnez Créer un nouveau rôle à partir de modèles de politique AWS.

9.    Pour Nom du rôle, entrez votre rôle.

10.   Pour Modèle de stratégie, choisissez la politique de publication Amazon SNS.

11.    Sélectionnez Créer une fonction.

12.    Une fois la fonction créée, collez le code suivant dans la section Code source :

import json
import boto3
sns = boto3.client('sns')
def lambda_handler(event, context):
    finding = event["detail"]["findings"][0] 
    findingTime = finding["FirstObservedAt"]
    findingType = finding["Types"][0]
    complianceStatus = finding["Compliance"]["Status"]    
    region = event["region"]
    accountId = finding["AwsAccountId"]    
    findingDescription = finding["Description"]
    severity = finding["Severity"]["Label"]    
    remediation = finding["Remediation"]["Recommendation"]["Text"]
    remediationUrl = finding["Remediation"]["Recommendation"]["Url"]
   
 message = "AWS SecurityHub alert in %s for account: %s\n\nFinding regarding: [%s] %s\n Severity: %s\nDescription: %s\nFirst observed at: %s\n%s: %s" % (region, accountId, complianceStatus, findingType, 
severity, findingDescription, findingTime, remediation, remediationUrl)
    response = sns.publish(
            TopicArn = "arn:aws:sns:REGION:ACCOUNT_ID:SendFindingsTopic",
            Message = message
            )
    return {
      'statusCode': 200,
      'body': json.dumps('Success!')
}

Remarque : Le code précédent personnalise et reformate le message d'alerte. Remplacez TopicArn ("arn:aws:sns:REGION:ACCOUNT_ID:SendFindingsTopic") par l'ARN de votre rubrique.

13.    Pour enregistrer le code de fonction, choisissez Déployer.

Ajoutez EventBridge comme déclencheur pour votre fonction Lambda

1.    Dans la section Présentation des fonctions, choisissez Ajouter un déclencheur.

2.    Pour Configuration du déclencheur, sélectionnez EventBridge (CloudWatch Events).

3.    Pour Règle, sélectionnez Règles existantes.

4.    Pour Règles existantes, sélectionnez la règle CloudWatch Events que vous avez créée précédemment.

5.    Sélectionnez Ajouter.

Modifier la règle CloudWatch Events

1.    Ouvrez la console CloudWatch.

2.    Dans le panneau de navigation, dans la section Évènements, choisissez Règles.

3.    Dans la liste des règles, sélectionnez la règle CloudWatch Events que vous avez créée précédemment.

4.    Choisissez Actions, puis Modifier.

5.    Dans la section Cibles, supprimez la cible SNS de votre rubrique.

6.    Choisissez Configurer les informations.

7.    Choisissez Mettre à jour la règle.

Lorsque vous testez la règle, vous recevez une notification similaire à la suivante :

Alerte AWS SecurityHub dans us-east-1 pour le compte : 111122223333
Constatation concernant : [ÉCHEC] Vérifications logicielles et de configuration/Normes industrielles et règlementaires/Benchmark CIS AWS Foundations
Gravité : FAIBLE
Description : Le compte « racine » dispose d'un accès illimité à toutes les ressources du compte AWS. Il est fortement recommandé d'éviter l'utilisation de ce compte.
Observé pour la première fois à : 2020-10-22T10:18:10.991Z
Pour savoir comment résoudre ce problème, consultez la documentation CIS AWS Security Hub : SampleURL
--
Si vous souhaitez ne plus recevoir de notifications de cette rubrique, cliquez sur le lien ci-dessous ou visitez-le pour vous désinscrire :
Se désinscrire


Veuillez ne pas répondre directement à cet e-mail. Si vous avez des questions ou des commentaires concernant cet e-mail, veuillez nous contacter à l'adresse https://aws.amazon.com/support.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?