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:
- Abra o console do Amazon SNS.
- No painel de navegação, selecione Tópicos.
- Clique em Criar tópico.
- Na seção Detalhes, em Tipo, selecione Padrão.
- Em Nome, insira o nome do seu tópico.
- Clique em Criar tópico.
- No tópico criado, selecione Criar assinatura.
- 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.
- Em Protocolo, clique em E-mail.
- Em Endpoint, insira o endereço de e-mail no qual você deseja receber notificações do SNS.
- 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.
- (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:
- Abra o console do Lambda.
- No painel de navegação, clique em Funções.
- Selecione Criar função.
- Clique em Criar do zero.
- Em Nome da função, insira um nome para sua função.
- Clique em Runtime e, em seguida, em Python 3.14.
- Em Arquitetura, selecione x86_64.
- Expanda Alterar o perfil de execução padrão.
- Em Perfil de execução, selecione Criar um novo perfil a partir dos modelos de política da AWS.
- Em Nome do perfil, insira um nome para o perfil.
- Em Modelo de política, clique em Política de publicação do Amazon SNS.
- Selecione Criar função.
- 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:
- Abra o console do EventBridge.
- No painel de navegação, clique em Regras e, em seguida, Criar regra.
- Insira um Nome para sua regra e clique em Próximo.
- Em Método de criação, selecione Usar formulário padrão.
- Em Origem do evento, selecione Serviços da AWS.
- Em Serviço da AWS, selecione Security Hub.
- 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.
- Em Tipos de destino, clique em Serviço da AWS.
- Em Selecione um destino, clique em Função do Lambda.
- Em Função, selecione a função que você criou anteriormente e, em seguida, clique em Próximo.
- Na página Configurar tags, clique em Avançar.
- 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?