Usando a função Lambda com CloudTrail

AWS CloudTrailé um serviço disponível na Amazon, que ajuda a registrar todas as atividades realizadas dentro do console da AWS. Ele registra todas as chamadas de API e armazena o histórico, que pode ser usado posteriormente para fins de depuração. Observe que não podemos acionar Lambda a partir do CloudTrail. Em vez disso, o CloudTrail armazena todo o histórico na forma de logs no bucket S3 e podemos acionar o AWS Lambda do S3. Uma vez que todos os logs devem ser processados, o AWS Lambda será acionado sempre que algum log for adicionado ao bucket S3.

Requisitos

Antes de começar a trabalhar com AWS CloudTrail, S3 e AWS Lambda, você precisa realizar o seguinte -

  • Crie um balde S3 para armazenar logs do CloudTrail
  • Criar serviço SNS
  • Crie uma trilha no CloudTrail e atribua o bucket S3 e o serviço SNS
  • Crie um papel IAM com permissão.
  • Criar função lambda do aws
  • Configuração AWS Lambda

Exemplo

Vamos considerar um exemplo que mostra o funcionamento do AWS CloudTrail, S3 e AWS Lambda. Aqui, criaremos um bucket no S3 que armazenará todos os logs de qualquer interação feita no console AWS. Vamos criar um tópico SNS e publicá-lo. Para esta ação, os logs serão inseridos como um arquivo no S3. O AWS lambda será acionado, o que enviará mensagens usando o serviço Amazon SES.

O diagrama de blocos para explicar este processo é mostrado abaixo -

Crie um intervalo S3 para armazenar registros do CloudTrail

Vá para o console AWS e clique em serviço S3. CliqueCreate bucket e insira o nome do intervalo que deseja armazenar logs de cloudtrail conforme mostrado -

Observe que aqui criamos um balde S3 cloudtraillogsaws para armazenar os logs.

Criar serviço SNS

Vá para o console da AWS e clique em Simple notification Service. Selecione os tópicos do lado esquerdo e clique no botão Criar novo tópico.

Criamos um tópico chamado displaytrailpara publicar um tópico. Seus detalhes serão armazenados no S3bucket criado acima.

Crie uma trilha no Cloudtrail e atribua o bucket S3 e o serviço SNS

Vá para o console da AWS e clique em CloudTrail serviço de ferramentas de gerenciamento, conforme mostrado -

Clique Trails do lado esquerdo como mostrado abaixo -

Clique Create Trailbotão. Introduzir oTrail name, Apply trail to all regions e escolher Yes. Então assim os logs serão aplicados para toda a região.

Para Read/Write events, escolha All. Adicione oS3 bucket e SNS topicdetalhes como mostrado abaixo. Você pode criar um novo aqui ou adicionar um existente.

Observe que existem opções disponíveis para encrypt log files, enable log file validation, send sns notification for every log file deliveryetc. Eu usei os valores padrão aqui. Você pode permitir a criptografia de arquivo e ele solicitará a chave de criptografia. Clique no botão Criar trilha assim que os detalhes forem adicionados.

Criar função IAM com permissão

Vá para o console da AWS e selecione IAM. Crie uma função com permissão para S3, Lambda, CloudTrail e SES para envio de e-mail. A função criada é conforme mostrado abaixo -

Criar função AWS Lambda

Vá para o serviço AWS e clique em Lambdaserviço. Adicione o nome da função, selecione o tempo de execução comonodejse selecione a função criada para a função lambda. A seguir está a função lambda criada.

Configuração AWS Lambda

Em seguida, precisamos adicionar S3 como o gatilho para o AWS lambda criado.

Adicione os detalhes do intervalo S3 para adicionar o gatilho e adicione o seguinte código AWS Lambda -

const aws =  require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
   console.log(s3message);
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data:s3message
            }
         },
         Subject: {
            Data: "cloudtrail logs"
         }
      },
      Source: "[email protected]"
   };
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Observe que estamos pegando o bucket S3 e os detalhes do log do evento e enviando e-mail usando o serviço SES, conforme mostrado acima.

Sempre que qualquer atividade ocorre no console da AWS, os logs serão enviados para o bucket do S3 e, ao mesmo tempo, o lambda do AWS será acionado e o e-mail será enviado para o id de e-mail mencionado no código.

Observe que você pode processar os logs de acordo com suas necessidades no AWS Lambda.