Учебники

Использование лямбда-функции с 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. Давайте создадим тему SNS и опубликуем ее. Для этого действия журналы будут занесены в файл S3. Будет запущена AWS lambda, которая отправит почту с помощью сервиса Amazon SES.

Блок-схема для объяснения этого процесса показана ниже:

Блок-схема Cloudtrail

Создать S3 Bucket для хранения логов CloudTrail

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

Создать ведро

Заметьте, что здесь мы создали облачные трассовые пилы S3 для хранения логов.

Создать сервис SNS

Перейдите в консоль AWS и нажмите « Сервис простых уведомлений» . Выберите темы слева и нажмите кнопку «Создать новую тему».

Простое уведомление

Мы создали тему под названием displaytrail, чтобы опубликовать тему. Его детали будут храниться в S3bucket, который создан выше.

Создайте Trail в Cloudtrail и назначьте S3 Bucket и службу SNS.

Перейдите в консоль AWS и выберите сервис CloudTrail из инструментов управления, как показано на рисунке —

Создать трассы

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

Trail Dashboard

Трассы

Нажмите кнопку Создать след . Введите название следа, примените след ко всем регионам и выберите « Да» . Тогда логи будут применяться для всего региона.

Название тропы

Для событий «Чтение / запись» выберите « Все» . Добавьте подробности темы S3 Bucket и SNS, как показано ниже. Вы можете создать новый здесь или добавить существующий.

Читать события

Обратите внимание, что есть опции, доступные для шифрования файлов журнала, включения проверки файла журнала, отправки уведомления sns для каждой доставки файла журнала и т. Д. Я использовал здесь значения по умолчанию. Вы можете разрешить шифрование файла, и он запросит ключ шифрования. Нажмите на кнопку «Создать след», когда детали будут добавлены.

Зашифровать журнал

Создать роль IAM с разрешением

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

Тропа Лямбда

Создать лямбда-функцию AWS

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

Лямбда-Трейл

Конфигурация AWS Lambda

Далее нам нужно добавить S3 в качестве триггера для созданной лямбды AWS.

Лямбда-конфигурация

Добавьте данные корзины S3, чтобы добавить триггер, и добавьте следующий лямбда-код AWS —

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, а почта отправляется на идентификатор электронной почты, указанный в коде.

Журналы Cloudtrail

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