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 -
![](https://assets.edu.lat/aws_lambda/images/block_diagram_cloudtrail.jpg)
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 -
![](https://assets.edu.lat/aws_lambda/images/create_bucket.jpg)
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.
![](https://assets.edu.lat/aws_lambda/images/simple_notification.jpg)
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 -
![](https://assets.edu.lat/aws_lambda/images/create_trails.jpg)
Clique Trails do lado esquerdo como mostrado abaixo -
![](https://assets.edu.lat/aws_lambda/images/trail_dashboard.jpg)
![](https://assets.edu.lat/aws_lambda/images/trails.jpg)
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.
![](https://assets.edu.lat/aws_lambda/images/trail_name.jpg)
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.
![](https://assets.edu.lat/aws_lambda/images/read_events.jpg)
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.
![](https://assets.edu.lat/aws_lambda/images/encrypt_log.jpg)
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 -
![](https://assets.edu.lat/aws_lambda/images/trail_lambda.jpg)
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.
![](https://assets.edu.lat/aws_lambda/images/lambda_trail.jpg)
Configuração AWS Lambda
Em seguida, precisamos adicionar S3 como o gatilho para o AWS lambda criado.
![](https://assets.edu.lat/aws_lambda/images/lambda_configuration.jpg)
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.
![](https://assets.edu.lat/aws_lambda/images/cloudtrail_logs.jpg)
Observe que você pode processar os logs de acordo com suas necessidades no AWS Lambda.