1. 程式人生 > >Как мониторить состояние AWS инфраструктуры и вовремя получать важные алерты через Corezoid Process Engine?

Как мониторить состояние AWS инфраструктуры и вовремя получать важные алерты через Corezoid Process Engine?

Денис Баталов, архитектор AWS, @dbatalov
Author: Denis V. Batalov

Друзья, рад представить вам гостевой пост от коллег из ПриватБанка (Украина) – 13-ого по величине банка в Восточной Европе. Из более чем 25 миллионов клиентов банка, 10 миллионов регулярно пользуются онлайн платформой Приват24, и более 5,5 миллионов пользуются его мобильной версией.

Недавно ПриватБанк заменил многие из своих систем обработки бизнес-логики на гибкий облачный бэкенд названный Corezoid и созданный отделом R&D банка. В Corezoid всё построено на основе API, а сам он работает на AWS. ПриватБанк также запустил Sender – мобильный мессенджер для бизнеса, который позволяет ПриватБанку общаться со своими клиентами, а также клиентам – общаться с другими компаниями предоставляющими услуги. Sender спроектирован с учётом мобильного образа жизни, а его функционал реализован на основе Corezoid. О преимуществах использования Corezoid для банковских нужд вы можете прочитать

здесь, а в нашем посте речь пойдёт об интересном примере использования Corezoid для мониторинга состояния инфраструктуры AWS. Далее текст коллеги из ПриватБанка.

Павел Шахман, руководитель команды DevOps, Corezoid
Author: Pavel Shakhman

Для полного контроля за всеми изменениями в вашей 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, то можно хоть как-то визуализировать создаваемые проверки, их взаимосвязи и в дальнейшем модифицировать этот шаблон, применяя обновления стека после каждой модификации.

CloudFormation Designer

При срабатывании какого-либо фильтра, например на изменение Security Group, вы получите через SNS-топик сообщение:

SNS mail

Кроме этого можно получить доступ ко всем событиям CloudTrail используя AWS Console и, оперируя заданным набором фильтров, можно просматривать события через веб-интерфейс.

CloudTrail 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:

Название Описание
Используется для запуска/закрытия эскалации по количеству задач в узле. Например, пусть необходимо реагировать на разное количество задач в очереди, которые требуют обработки. Если количество объектов в очереди превышает:
  • 50 – уведомляем менеджера;
  • 100 – уведомляем руководителя менеджера.

При снижении количества объектов в очереди мы сможем уведомить менеджера/руководителя о уменьшении количества необработанных задач

Если время нахождение задачи в узле превышает предельное время, то задача переводится в целевой узел
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 Process List

Для безопасной передачи данных в Corezoid создадим API-пользователя и сохраним его login, secret key и process id процесса-маршрутизатора – эти данные понадобятся для настройки нашей функции Lambda.
API пользователю мы разрешим отправлять заявки в настройках папки с процессами:

Corezoid Grant Access

Процесс – маршрутизатор имеет вид:

Event Router

  • В начале обработки в зависимости от аккаунта (логика Condition) мы заменяем числовой идентификатор на любой удобный алиас (например, логика Set Parameter -> AccountAlias == “Corezoid Demo” и т.д.).
  • В узле “Route by Event Type” мы в зависимости от типа события отправляем его на обработку в процесс Api Events или Non-Api Events.

Процесс, реализующий обработку Non-Api событий, в веб-интерфейсе Corezoid выглядит примерно так:

Corezoid Non-API check

В узле С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:

Sender Alerts

Итак, наш процесс в 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 представляют собой текстовые файлы в фо