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.
Блок-схема для объяснения этого процесса показана ниже:
Создать S3 Bucket для хранения логов CloudTrail
Перейдите в консоль AWS и щелкните сервис S3. Нажмите Create bucket и введите имя bucket, в котором вы хотите хранить журналы cloudtrail, как показано на рисунке —
Заметьте, что здесь мы создали облачные трассовые пилы S3 для хранения логов.
Создать сервис SNS
Перейдите в консоль AWS и нажмите « Сервис простых уведомлений» . Выберите темы слева и нажмите кнопку «Создать новую тему».
Мы создали тему под названием displaytrail, чтобы опубликовать тему. Его детали будут храниться в S3bucket, который создан выше.
Создайте Trail в Cloudtrail и назначьте S3 Bucket и службу SNS.
Перейдите в консоль AWS и выберите сервис CloudTrail из инструментов управления, как показано на рисунке —
Нажмите Trails с левой стороны, как показано ниже —
Нажмите кнопку Создать след . Введите название следа, примените след ко всем регионам и выберите « Да» . Тогда логи будут применяться для всего региона.
Для событий «Чтение / запись» выберите « Все» . Добавьте подробности темы 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, а почта отправляется на идентификатор электронной почты, указанный в коде.
Обратите внимание, что вы можете обрабатывать журналы в соответствии с вашими потребностями в AWS Lambda.