Ir para o conteúdo

Como faço para usar o EventBridge com um tópico do Amazon SNS para configurar notificações de e-mail personalizadas para descobertas do Security Hub?

5 minuto de leitura
0

Quero usar o Amazon EventBridge com um tópico do Amazon Simple Notification Service (Amazon SNS) para configurar notificações de e-mail personalizadas para o AWS Security Hub.

Breve descrição

A resolução a seguir mostra como configurar o Amazon EventBridge com o Amazon SNS para receber notificações do Security Hub. Com base na regra do EventBridge, o Amazon SNS envia uma notificação para o endereço de e-mail inscrito no tópico quando seu evento ocorre. Uma função do AWS Lambda cria uma mensagem de alerta personalizada com formatação aprimorada.

Resolução

Crie um tópico e uma assinatura do SNS

Conclua as etapas a seguir:

  1. Abra o console do Amazon SNS.
  2. No painel de navegação, selecione Tópicos.
  3. Clique em Criar tópico.
  4. Na seção Detalhes, em Tipo, selecione Padrão.
  5. Em Nome, insira o nome do seu tópico.
  6. Clique em Criar tópico.
  7. No tópico criado, selecione Criar assinatura.
  8. Em ARN do tópico, selecione o nome do recurso da Amazon (ARN) do tópico que você criou, se não for preenchido automaticamente.
  9. Em Protocolo, clique em E-mail.
  10. Em Endpoint, insira o endereço de e-mail no qual você deseja receber notificações do SNS.
  11. Selecione Criar assinatura.
    Importante: você deve confirmar a assinatura no e-mail de confirmação enviado ao assinante para que a assinatura mude do status PendingConfirmation para Confirmed.
  12. (Opcional) Também é possível criar uma assinatura autenticada que impeça a ação de cancelamento de assinatura em seu tópico.

Criar uma função do Lambda

Conclua as etapas a seguir:

  1. Abra o console do Lambda.
  2. No painel de navegação, clique em Funções.
  3. Selecione Criar função.
  4. Clique em Criar do zero.
  5. Em Nome da função, insira um nome para sua função.
  6. Clique em Runtime e, em seguida, em Python 3.14.
  7. Em Arquitetura, selecione x86_64.
  8. Expanda Alterar o perfil de execução padrão.
  9. Em Perfil de execução, selecione Criar um novo perfil a partir dos modelos de política da AWS.
  10. Em Nome do perfil, insira um nome para o perfil.
  11. Em Modelo de política, clique em Política de publicação do Amazon SNS.
  12. Selecione Criar função.
  13. Insira o código a seguir na seção Origem do código:
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!')
}

Observação: substitua arn:aws:sns:eu-west-1:111122233333:your-arn pelo ARN de seus tópicos. Clique em Implantar.

Crie e configure a regra do EventBridge

Conclua as etapas a seguir:

  1. Abra o console do EventBridge.
  2. No painel de navegação, clique em Regras e, em seguida, Criar regra.
  3. Insira um Nome para sua regra e clique em Próximo.
  4. Em Método de criação, selecione Usar formulário padrão.
  5. Em Origem do evento, selecione Serviços da AWS.
  6. Em Serviço da AWS, selecione Security Hub.
  7. Em Tipo de evento, selecione Todos os eventos e, em seguida, clique em Próximo.
    Observação: também é possível configurar alertas para eventos específicos em vez de para todos os eventos.
  8. Em Tipos de destino, clique em Serviço da AWS.
  9. Em Selecione um destino, clique em Função do Lambda.
  10. Em Função, selecione a função que você criou anteriormente e, em seguida, clique em Próximo.
  11. Na página Configurar tags, clique em Avançar.
  12. Selecione Criar regra.

Receba uma notificação personalizada

Quando os eventos configurados ocorrem, você recebe um e-mail de notificação personalizado de no-reply@sns.amazonaws.com.

Os eventos padrão do Security Hub são reformatados em um formato personalizado que é mais legível.

Exemplo de mensagem de resultado do Security Hub Insight

Padrão:

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

Personalizado:

Alerta: Resultados do Security Hub Insight em us-east-1 para conta: 123456789012

Descrição da ação: Enviar descobertas para o Slack

Observação: é possível editar a mensagem para cada tipo de descoberta de segurança para seu caso de uso.

Informações relacionadas

Como configuro as regras do EventBridge para o GuardDuty enviar notificações personalizadas do SNS para tipos específicos de descoberta de serviços?

Tutorial: usar transformadores de entrada para transformar eventos no EventBridge

Por que minha função do Lambda não foi acionada pela minha regra do EventBridge?