Как мониторить состояние AWS инфраструктуры и вовремя получать важные алерты через Corezoid Process Engine?
Денис Баталов, архитектор AWS, @dbatalov
Друзья, рад представить вам гостевой пост от коллег из ПриватБанка (Украина) – 13-ого по величине банка в Восточной Европе. Из более чем 25 миллионов клиентов банка, 10 миллионов регулярно пользуются онлайн платформой Приват24, и более 5,5 миллионов пользуются его мобильной версией.
Недавно ПриватБанк заменил многие из своих систем обработки бизнес-логики на гибкий облачный бэкенд названный Corezoid и созданный отделом R&D банка. В Corezoid всё построено на основе API, а сам он работает на AWS. ПриватБанк также запустил Sender – мобильный мессенджер для бизнеса, который позволяет ПриватБанку общаться со своими клиентами, а также клиентам – общаться с другими компаниями предоставляющими услуги. Sender спроектирован с учётом мобильного образа жизни, а его функционал реализован на основе Corezoid. О преимуществах использования Corezoid для банковских нужд вы можете прочитать
Павел Шахман, руководитель команды DevOps, Corezoid
Для полного контроля за всеми изменениями в вашей AWS инфраструктуре есть замечательный веб-сервис CloudTrail.
С помощью CloudTrail можно получить историю вызовов API AWS, сделанных в вашем аккаунте, включая вызовы API, сделанные из Консоли управления AWS или с помощью пакетов AWS SDK, инструментов командной строки и сервисов AWS более высокого уровня (таких как AWS CloudFormation). История вызовов API AWS в CloudTrail делает возможным проведение анализа безопасности, отслеживание изменения ресурсов и аудит соответствия, т.к. включает в себя идентификацию источника, совершившего вызов API, время вызова API, IP-адрес источника, совершившего вызов API, параметры запроса, а также элементы ответа, возвращенные сервисом AWS.
С полным списком поддерживаемых в CloudTrail сервисов можно ознакомиться в документации.
В этой статье мы расскажем, как легко и быстро настроить уведомления о важных событиях в работе AWS инфраструктуры.
Для получения событий из CloudTrail есть два основных пути:
- доставка лог файлов в определенную корзину (Amazon S3)
- доставка событий в указанную лог-группу (CloudWatch Logs)
В первом случае рекомендуется настроить уведомление в SNS-топик о появлении нового файла, а во втором случае уже можно задействовать фильтры в CloudWatch Logs.
При попадании событий в лог-группу на них можно применить различные пользовательские фильтры и связать их с CloudWatch Alarms, создав Alarm на каждый из них, для получения уведомлений, например всё в тот же SNS-топик.
Настроить начальный набор фильтров достаточно легко – для этого можно использовать любезно предоставленный компанией AWS шаблон ☺.
Если загрузить его в AWS CloudFormation Designer, то можно хоть как-то визуализировать создаваемые проверки, их взаимосвязи и в дальнейшем модифицировать этот шаблон, применяя обновления стека после каждой модификации.
При срабатывании какого-либо фильтра, например на изменение Security Group, вы получите через SNS-топик сообщение:
Кроме этого можно получить доступ ко всем событиям CloudTrail используя AWS Console и, оперируя заданным набором фильтров, можно просматривать события через веб-интерфейс.
Но заглядывать каждый раз в табличку и вручную что-то искать не очень удобно. Дальше мы расскажем как можно облегчить себе задачу по поддержке существующего набора фильтров, быстрому добавлению новой логики и визуализации. Как настроить отправление уведомлений в любой удобный канал коммуникации, где ответственному сотруднику удобно читать такие сообщения: мессенджер, е-майл или, к примеру, Slack.
В нашем случае для получения уведомлений мы используем мобильный мессенджер Sender (Sender.mobi).
Сервис CloudTrail сохраняет информацию о событии в течение 15 минут после вызова API и отправляет файлы логов в корзину примерно через каждые пять минут. Таким образом нужно учитывать, что задержка между временем события и уведомлением может быть до 20 мин. Если файлы с архивами не появляются в корзине – проверьте ее политику, возможно при редактировании допущена ошибка и CloudTrail не может сохранить файл.
Напишем небольшую функцию Lambda, которая будет срабатывать при появлении нового архива с событиями в указанной выше S3 корзине.
Для написания функций Lambda в AWS можно использовать Python, Node.js, Java. Нашу функцию мы написали на Python.
Она связана триггером с S3 корзиной и срабатывает по событию типа ObjectCreatedByPut: достает файл, распаковывает и отправляет массив событий (events) через API в наш Corezoid Process Engine. Эта функция срабатывает на каждый PUT файла в корзину: достает файл, распаковывает и отправляет массив событий (events) через API в наш Corezoid Process Engine.
Corezoid Process Engine – это наша собственная технология, доступная по адресу Corezoid.com, а также в Amazon Marketplace.
Corezoid может получать данные из любого источника через API, обрабатывать их согласно заданной логике и возвращать ответ в любую внешнюю систему, также через API.
Вот список логик, которые доступны в Corezoid:
Название | Описание |
Используется для запуска/закрытия эскалации по количеству задач в узле. Например, пусть необходимо реагировать на разное количество задач в очереди, которые требуют обработки. Если количество объектов в очереди превышает:
При снижении количества объектов в очереди мы сможем уведомить менеджера/руководителя о уменьшении количества необработанных задач |
|
Если время нахождение задачи в узле превышает предельное время, то задача переводится в целевой узел | |
Go | Задача безусловно переводится в целевой узел. Является последней командой в программе обработки |
Condition | Условие является конъюнкцией сравнений значений параметров задачи с константами. Если условие выполнено, то задача переводится в целевой узел |
API Call |
Синхронный вызов метода внешнего API в форматах JSON, XML, SOAP. Задача зависает в узле, пока метод API выполняется |
Waiting for callback |
Синхронизация с внешним процессом. Задача зависает в узле, пока не придет ответ от внешнего процесса |
Code | Интерпретируется фрагмент кода на указанном языке (Java Script или Erlang). Доступ к параметрам задачи – через переменную data |
Задача, возможно, частично копируется в начальный узел другого процесса | |
Modify task |
Задача, возможно, частично модифицируется, если находится в узле Waiting for callback или Set state |
Call process |
Задача, возможно, частично копируется в начальный узел другого процесса, тем самым вызывается обработка этой задачи другим процессом. Когда обработка закончена, вызванный процесс должен вернуть обработанную задачу командой Reply to process |
Reply to process |
Задача возвращается вызвавшему процессу. Идентификатор процесса хранится в самой задаче |
Sum | Суммируются значения некоторых параметров задачи |
Set parameter |
Присваивается значение параметру задачи |
Queue | Текущая задача переводится в локальное хранилище. При этом хранилище может работать в одном из двух режимов: в режиме очереди (FIFO = First In First Out) или в режиме стека (LIFO = Last In First Out). Задача находится в хранилище, пока не поступит сигнал Get task from queue |
Get task from queue |
Из очереди в указанном процессе и в указанном узле извлекается задача для обработки |
Delay | Обработка задачи приостанавливается на указанное время |
Используя эти логические блоки мы настроим отправку уведомлений для Non-API событий:
- попытки входа в AWS аккаунт;
- создание\удаление spot-инстансов.
Логика в Corezoid
Построим небольшой проект, состоящий из процесса-маршрутизатора и процессов для обработки 2-х основных типов событий CloudTrail: API вызовов и Non-API events.
Первым делом, создаем папку, три новых процесса в Corezoid и настраиваем соответствующие узлы.
Для безопасной передачи данных в Corezoid создадим API-пользователя и сохраним его login, secret key и process id процесса-маршрутизатора – эти данные понадобятся для настройки нашей функции Lambda.
API пользователю мы разрешим отправлять заявки в настройках папки с процессами:
Процесс – маршрутизатор имеет вид:
- В начале обработки в зависимости от аккаунта (логика Condition) мы заменяем числовой идентификатор на любой удобный алиас (например, логика Set Parameter -> AccountAlias == “Corezoid Demo” и т.д.).
- В узле “Route by Event Type” мы в зависимости от типа события отправляем его на обработку в процесс Api Events или Non-Api Events.
Процесс, реализующий обработку Non-Api событий, в веб-интерфейсе Corezoid выглядит примерно так:
В узле Сlassifier после определения типа событие направляется в нужную ветку обработки, где проставляются все необходимые флаги и в конечном итоге событие уходит в указанный канал отправки.
Ниже вы можете видеть пример реального события после обработки в Corezoid:
{ "eventVersion": "1.04", "eventID": "bbf878c3-7138-4207-929d-5b4b1450fea8", "eventTime": "2016-10-02T17:51:36Z", "additionalEventData": { "MobileVersion": "No", "LoginTo": "https://console.aws.amazon.com/console/home?state=hashArgs%23&isauthcode=true", "MFAUsed": "No" }, "recipientAccountId": "\"Corezoid Dev\"", "requestParameters": null, "eventType": "AwsConsoleSignIn", "errorMessage": "Failed authentication", "responseElements": { "ConsoleLogin": "Failure" }, "awsRegion": "us-east-1", "eventName": "ConsoleLogin", "userIdentity": { "accountId": "111111111111", "principalId": "AIDAJX3TJPA3E2GX6IZYC", "type": "IAMUser", "accessKeyId": "", "userName": "JohnDoe" }, "eventSource": "signin.amazonaws.com", "userAgent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0", "sourceIPAddress": "159.224.244.142", "__conveyor_copy_task_result__": "ok", "MyEventDetails": "Failed to login in account \"Corezoid Dev\" from ip 159.224.244.142", "MfaUsage": "False", "MessageChannel": "sender", "Message": "User: JohnDoe\\nAccount: 111111111111\\nMFA: False\\nType: IAMUser\\n\\nFailed to login in account \"Corezoid Dev\" from ip 159.224.244.142" }
И уведомления в мессенджере Sender:
Итак, наш процесс в Corezoid получает от функции Lambda поток событий и согласно заданной логике отправляет алерты во внешний фронт-енд. В нашем случае, в качестве фронт-енда мы использовали мобильный мессенджер Sender (Sender.mobi), но Corezoid может отправлять через API алерты в любые внешние системы: Slack, E-mail, Sms.
Обработка событий CloudTrail с помощью Corezoid поможет Вам быстро и эффективно построить процессы для облегчения соответствия требованиям безопасности и раннего обнаружения архитектурных проблем и ошибок конфигураций ПО.
Вы можете уже сейчас зарегистрироваться на www.corezoid.com и оценить удобство нашего подхода в обработке событий CloudTrail.
Все материалы из статьи и краткое руководство по их применению доступны в нашем репозитории.
相關推薦
Как мониторить состояние AWS инфраструктуры и вовремя получать важные алерты через Corezoid Process Engine?
Денис Баталов, архитектор AWS, @dbatalov Друзья, рад представить вам гостевой пост от коллег из ПриватБанка (Украина) – 13-ого по величин
Using AWS IoT Device Management in a Retail Scenario to Process Order Requests
In this blog post, we will simulate a common business scenario to show you how to use the group policy feature in AWS IoT Device Management. Speci
Инфраструктура как код и выделение ресурсов AWS
AWS CloudFormation предоставляет универсальный язык для описания и выделения всех ресурсов инфраструктуры в облачной среде. CloudFormati
Реализация защищенной корпоративной системы резервного копирования и восстановления в AWS
Андрей Зайчиков, Архитектор AWS Всем привет! Сегодня мы поговорим о том, как реализовать защищенную корпоративную систему резервно
Что такое кэширование и как оно работает
Интернет вещей (IoT) – это концепция сбора и передачи информации с удаленных устройств и сенсоров на физических объектах в Интернет или в прил
Обучение и сертификация AWS
Amazon Web Services приглашает на работу. Amazon Web Services (AWS) – динамично растущее подразделение в составе Amazon.com. В настоящее в
Планирование, развертывание и оптимизация облачных решений с AWS Support
Amazon Web Services приглашает на работу. Amazon Web Services (AWS) – динамично растущее подразделение в составе Amazon.com. В настоящее в
AWS Systems Manager: получайте операционную аналитику и принимайте меры
AWS Systems Manager помогает поддерживать безопасность и соответствие требованиям, проверяя, соответствуют ли инстансы существующим политикам и
Вопросы и ответы по AWS Config
Вопрос: Каков принцип начисления платы за использование AWS Config и правил AWS Config Rules? При использовании AWS Config стоимос
Вопросы и ответы по AWS Cloud9
Вопрос: Что такое AWS Cloud9? AWS Cloud9 – это облачная интегрированная среда разработки (IDE), которая позволяет создавать, запускать и
Вопросы и ответы по AWS Lambda
Вопрос: В каких случаях стоит использовать AWS Lambda вместо Amazon EC2? Amazon Web Services предлагает большое количество вычисл
Вопросы и ответы по AWS Artifact
Администратору аккаунта AWS автоматически предоставляется разрешение загружать, принимать и расторгать соглашения для данного аккаунта. Если вы я
Вопросы и ответы по AWS Migration Hub
Вопрос: Как использовать AWS Migration Hub в процессе миграции приложений? После создания одной или нескольких групп приложений, с
Пакеты SDK и инструменты AWS
Amazon Web Services приглашает на работу. Amazon Web Services (AWS) – динамично растущее подразделение в составе Amazon.com. В настоящее в
Как создать сетевую файловую систему: Amazon Web Services (AWS)
Amazon Web Services приглашает на работу. Amazon Web Services (AWS) – динамично растущее подразделение в составе Amazon.com. В настоящее в
Вопросы и ответы по AWS CodeDeploy
version: 0.0 os: linux files: # You can specify one or more mappings in the files section. - source: / destination: /var/www/html/Wor
Вопросы и ответы по AWS Application Discovery Service
Вопрос. Как работает сервис AWS Application Discovery Service? AWS Application Discovery Service поддерживает режим работы с испол
Вопросы и ответы по AWS Batch
Amazon Web Services приглашает на работу. Amazon Web Services (AWS) – динамично растущее подразделение в составе Amazon.com. В настоящее в
Вопросы и ответы по AWS CodeStar
Вопрос. Как начать работу с сервисом AWS CodeStar? Начать работу с AWS CodeStar можно за считаные минуты
Вопросы и ответы по AWS CloudFormation
Вопрос: Из каких элементов состоит шаблон AWS CloudFormation? Шаблоны AWS CloudFormation представляют собой текстовые файлы в фо