Использование лямбда-функции с CloudTrail
AWS CloudTrailСервис, доступный в Amazon, помогает регистрировать все действия, выполняемые в консоли AWS. Он регистрирует все вызовы API и сохраняет историю, которую можно использовать позже для целей отладки. Обратите внимание, что мы не можем активировать Lambda из CloudTrail. Вместо этого CloudTrail хранит всю историю в виде журналов в корзине S3, и мы можем запускать AWS Lambda из S3. После того, как какие-либо журналы будут обработаны, AWS Lambda будет запускаться всякий раз, когда какие-либо журналы добавляются в корзину S3.
Реквизиты
Прежде чем начать работу с AWS CloudTrail, S3 и AWS Lambda, вам необходимо выполнить следующее:
- Создайте корзину S3 для хранения журналов CloudTrail
- Создать сервис SNS
- Создайте трейл в CloudTrail и назначьте корзину S3 и сервис SNS
- Создать роль IAM с разрешением.
- Создать лямбда-функцию aws
- Конфигурация AWS Lambda
пример
Рассмотрим пример, демонстрирующий работу AWS CloudTrail, S3 и AWS Lambda. Здесь мы создадим корзину в S3, в которой будут храниться все журналы для любого взаимодействия, выполненного в консоли AWS. Давайте создадим тему в соцсетях и опубликуем ее. Для этого действия журналы будут введены в виде файла в S3. Сработает AWS lambda, который отправит почту с помощью сервиса Amazon SES.
Блок-схема для объяснения этого процесса показана ниже -

Создание корзины S3 для хранения журналов CloudTrail
Перейдите в консоль AWS и щелкните Сервис S3. НажмитеCreate bucket и введите имя сегмента, в котором вы хотите хранить журналы Cloudtrail, как показано -

Обратите внимание, что здесь мы создали корзину S3 cloudtraillogsaws для хранения журналов.
Создать сервис SNS
Перейдите в консоль AWS и нажмите Simple notification Service. Выберите темы слева и нажмите кнопку Создать новую тему.

Мы создали тему под названием displaytrailопубликовать тему. Его детали будут сохранены в созданном выше S3bucket.
Создайте трейл в Cloudtrail и назначьте ведро S3 и сервис SNS
Перейдите в консоль AWS и нажмите CloudTrail сервис из инструментов управления, как показано -

Нажмите Trails с левой стороны, как показано ниже -


Нажмите Create Trailкнопка. ВведитеTrail name, Apply trail to all regions и выберите Yes. Тогда логи будут применяться для всего региона.

За Read/Write events, выбирать All. ДобавитьS3 bucket а также SNS topicдетали, как показано ниже. Вы можете создать здесь новый или добавить уже существующий.

Обратите внимание, что есть параметры, доступные для encrypt log files, enable log file validation, send sns notification for every log file deliveryи т.д. Здесь я использовал значения по умолчанию. Вы можете разрешить шифрование файла, и он запросит ключ шифрования. После добавления деталей нажмите кнопку «Создать след».

Создать роль IAM с разрешением
Перейдите в консоль AWS и выберите IAM. Создайте роль с разрешением для S3, Lambda, CloudTrail и SES для отправки электронной почты. Созданная роль показана ниже -

Создать функцию AWS Lambda
Перейдите в сервис AWS и нажмите Lambdaоказание услуг. Добавьте имя функции, выберите время выполнения какnodejsи выберите роль, созданную для лямбда-функции. Ниже приводится созданная лямбда-функция.

Конфигурация AWS Lambda
Затем нам нужно добавить S3 в качестве триггера для созданного лямбда-выражения AWS.

Добавьте детали корзины S3, чтобы добавить триггер, и добавьте следующий код 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");
}
});
};
Обратите внимание, что мы берем ведро S3 и данные журнала из события и отправляем почту с помощью службы SES, как показано выше.
Всякий раз, когда в консоли AWS происходит какое-либо действие, журналы отправляются в корзину S3, и в то же время срабатывает лямбда-функция AWS, и письмо будет отправлено на адрес электронной почты, указанный в коде.

Обратите внимание, что вы можете обрабатывать журналы в соответствии с вашими потребностями в AWS Lambda.