13 найкращих практик захисту мікросервісів

Архітектура мікросервісів забезпечує гнучкість, масштабованість і можливість змінювати, додавати або видаляти програмні компоненти, не впливаючи на інші частини програми.

На додаток до коротших циклів розробки програмного забезпечення, невеликих команд і гнучких варіантів мови програмування, це дозволяє вам масштабувати або усувати неполадки в певних функціях або службах, не втручаючись в роботу інших компонентів.

Як правило, мікросервіси дозволяють розбивати великі моногамні програми на окремі сервіси, які можна розгортати незалежно. Однак ці менші незалежні служби збільшують кількість компонентів, отже складність і труднощі в їх забезпеченні.

Зображення монолітної архітектури проти мікросервісів Червоний капелюх

Зазвичай типове розгортання мікросервісів матиме апаратне забезпечення, сервіс або програму, зв’язок, хмару, віртуалізацію та оркестровку. Кожен із них має певні вимоги до безпеки, елементи керування та проблеми.

Проблеми безпеки, пов’язані з мікросервісами

Мікросервіси – це зазвичай широко розподілені системи зі складними правилами доступу, більшим трафіком для моніторингу та більшою поверхнею для атаки. Крім того, більшість хмарних мікросервісів працюють у хмарних середовищах, які також мають різні конфігурації безпеки та елементи керування.

Через велику кількість відкритих API, портів і компонентів традиційні брандмауери можуть не забезпечити належний захист. Ці проблеми роблять розгортання мікросервісів більш уразливими до різних кіберзагроз, таких як людина посередині, ін’єкційні атаки, міжсайтові сценарії, DDoS та інші.

Безпека мережі — ще одна проблема з мікросервісами. Зокрема, ідентифікація та контроль доступу виходять на новий рівень складності. Інші вразливості включають незахищений код і недоліки в системах виявлення служб.

Хоча захистити мікросервіси складніше, ніж монолітні додатки, ви можете ефективно захистити їх, створивши хорошу стратегію та дотримуючись найкращих практик.

В ідеалі архітектура вимагає розподіленого підходу, який повинен охоплювати всі різні компоненти.

Серед типових сфер, до яких слід звернути увагу

  • Захист програм, мікросервісів і користувачів
  • Захист ідентифікації та управління доступом
  • Захист даних
  • Підвищення безпеки зв’язку між послугами
  • Моніторинг мікросервісів і систем безпеки

Найкращі практики захисту мікросервісів

Однією з найкращих стратегій є використання комбінації найкращих практик, інструментів і елементів керування для захисту всієї екосистеми. Фактичний підхід може відрізнятися залежно від типу послуг, програм, користувачів, середовища та інших факторів.

Якщо ви вирішите використовувати мікросервіси, вам потрібно переконатися, що ви відповідаєте всім вимогам безпеки для сервісів, з’єднань і даних.

Давайте тепер розглянемо деякі ефективні методи безпеки мікросервісів.

#1. Створюйте безпеку з самого початку 👮

Зробіть безпеку частиною циклу розробки. В ідеалі інтегруйте безпеку в розробку та розгортання мікросервісів із самого початку. Вирішення питання безпеки таким чином є простим, ефективним і дешевшим підходом, ніж чекати його додавання, коли розробка програмного забезпечення наближається до завершення.

#2. Використовуйте механізм захисту в глибині

Глибокий захист (DiP) — це техніка, за якої ви застосовуєте кілька рівнів безпеки до своїх послуг і даних. Така практика ускладнює зловмисникам проникнення через кілька рівнів, отже, забезпечуючи надійний захист ваших послуг і даних.

На відміну від рішень безпеки периметра, таких як брандмауери, концепція поглибленого захисту відрізняється. Він покладається на поєднання таких інструментів, як антивірус, брандмауер, керування виправленнями, програмне забезпечення для захисту від спаму та інші, щоб забезпечити кілька рівнів безпеки, розподілених по всій системі.

  Як відтворити слайд-шоу зображень на Chromecast

Багаторівнева безпека поглибленого захисту Зображення: Імперва

При такому підході ви повинні спочатку визначити конфіденційні служби, після чого застосувати відповідні рівні безпеки навколо них.

#3. Розгорніть безпеку на рівні контейнера 📦

Найчастіше мікросервіси покладаються на контейнерну технологію. Таким чином, захист контейнерів, як всередині, так і зовні, є одним із способів зменшити поверхню атаки та ризики. В ідеалі прагнення до принципу безпеки найменших привілеїв є хорошою практикою та вимагає поєднання стратегій, включаючи, але не обмежуючись ними;

  • Обмеження дозволу до необхідного мінімуму
  • Уникайте запуску служб і будь-чого іншого за допомогою sudo або привілейованих облікових записів.
  • Обмежуйте або контролюйте доступ і споживання доступних ресурсів. Наприклад, обмеження доступу до ресурсів операційної системи за допомогою контейнерів допомагає запобігти крадіжці або компрометації даних.
  • Не зберігайте секрети на контейнерному диску.
  • Використовуйте відповідні правила для ізоляції доступу до ресурсів.

Також важливо переконатися, що зображення контейнерів не мають уразливостей або проблем із безпекою. Регулярне сканування контейнерів на безпеку та вразливість допоможе виявити ризики.

Типові засоби сканування зображень включають Клер, Якірі більше.

#4. Розгорніть багатофакторну автентифікацію 🔒

Увімкнення багатофакторної автентифікації підвищує безпеку інтерфейсу.

Користувачі, які отримують доступ, повинні будуть надати дані свого імені користувача та пароля на додаток до іншої форми перевірки, наприклад коду, надісланого на їхні телефони або вказану адресу електронної пошти. Ця техніка ускладнює доступ до мікросервісів для зловмисників, які можуть використовувати вкрадені або зламані облікові дані, оскільки вони не матимуть можливості забезпечити другу автентифікацію.

#5. Використовуйте маркери ідентифікації користувача та доступу

Під час розгортання мікросервісів велика кількість додатків і служб потребуватимуть безпечної авторизації та контролю доступу. Платформа авторизації, така як OAuth 2.0 і OpenID, дозволяє безпечно обробляти токени, а отже, захищати ваші мікросервіси. Отже, це дозволяє програмам сторонніх розробників отримувати доступ до інших служб або даних користувачів.

У типовому розгортанні головна програма запропонує користувачеві авторизувати сторонню службу. Прийнявши це, програма генерує маркер доступу для сеансу.

Зокрема, OAuth є однією з найефективніших стратегій ідентифікації користувача та контролю доступу. Хоча існує кілька інших протоколів авторизації, і ви також можете створити свій власний, найкраще використовувати протокол OAuth оскільки є більш стандартним, стабільним і широко прийнятим.

#6. Створіть шлюз API

Як правило, мікросервіси складаються з кількох компонентів, розподілених по різних мережах і доступних із широкого кола систем і клієнтів. Викриття мікросервісів збільшує вразливість і ризики безпеці. Один із способів їх захисту — створити єдину безпечну точку входу, яка допоможе вам централізувати весь доступ із зовнішніх систем і клієнтів.

Щоб досягти цього, розгорніть шлюз API для перевірки всіх вхідних запитів на наявність проблем із безпекою перед тим, як направляти їх до відповідних мікросервісів. Шлюз API знаходиться між клієнтськими програмами та мікросервісами. Потім він обмежує доступ до мікросервісів, надаючи додаткові функції керування запитами, такі як автентифікація, завершення SSL, трансляція протоколів, моніторинг, маршрутизація запитів, кешування тощо.

  Як грати в Майнкрафт з друзями

Завдяки цьому підходу шлюз API направляє всі зовнішні служби до мікросервісів, одночасно підтримуючи принцип безпеки поглибленого захисту.

Зображення шлюзу API мікросервісів Livebook

Типові шлюзи API включають NGINX, Конг, Тик, посол, Шлюз API AWSі більше.

Щоб дізнатися більше про безпеку API, перегляньте наш посібник про те, чому та як захистити кінцеву точку API.

#7. API профілю на основі зони розгортання

Впроваджуйте обмеження на основі ролей, гарантуючи, що користувачі мають доступ лише до тих API і послуг, які їм потрібні. Оскільки більшість зловмисного програмного забезпечення часто надає послугу більшій кількості людей, обмеження доступу лише авторизованим користувачам зменшує ризики. Одним з методів зменшення впливу є позначення API на основі користувачів, які повинні мати до них доступ. Загалом, API можуть бути;

  • Ethernet API – для служб, відкритих для зовнішнього світу поза центром обробки даних.
  • API корпоративної зони – вони призначені для внутрішнього приватного трафіку
  • DMZ API – для обробки трафіку, що надходить з Інтернету
  • Hybrid Zone API – для розгортання центрів обробки даних

#8. Захистіть зв’язок між послугами

Ефективні методи включають автентифікацію та авторизацію запитів, коли два мікросервіси обмінюються даними.

Загалом існує три основні методи, які можна використовувати для захисту зв’язку між службами. Це Trust the network, JSON Web Token (JWT) і Mutual Transport Layer Security (mTLS або Mutual TLS).

Захист зв’язку між службами за допомогою JWT Image Livebook

З трьох найпопулярнішим є mTLS. У цьому підході кожен мікросервіс повинен мати пару відкритий/приватний ключ. Потім мікросервіс клієнта використовує пару ключів для автентифікації себе в мікросервісі-одержувачі через mTLS.

Під час автентифікації кожен мікросервіс генерує сертифікат. Після цього кожна мікрослужба використовуватиме сертифікат іншої для автентифікації.

Хоча TLS забезпечує цілісність і конфіденційність даних, що передаються, він також дозволяє клієнту ідентифікувати мікросервіс. Клієнтська мікрослужба зазвичай знає іншу мікрослужбу. Однак, оскільки TLS є одностороннім, мікросервіс-одержувач не може перевірити мікросервіс клієнта, і зловмисники можуть скористатися цією вадою. З іншого боку, mTLS надає засоби, за допомогою яких кожна з мікрослужб може ідентифікувати іншу.

#9. Ліміт 🚏 клієнтського трафіку

Обмеження зовнішнього трафіку запобігає таким проблемам, як атаки на відмову в обслуговуванні (DoS), а також випадки, коли деякі клієнти використовують більшу частину пропускної здатності програми. Один підхід полягає в застосуванні різних правил, які можуть відстежувати та контролювати швидкість трафіку, надісланого або отриманого від клієнта, на основі IP-адреси, часу тощо.

Налаштуйте свої служби на сповільнення, якщо вони виявлять кілька невдалих спроб входу до ваших API або будь-яку іншу підозрілу активність.

Повільна система знеохотить зловмисників і, ймовірно, відмовиться від спроб отримати доступ до служб. Ви можете оцінити обмеження за допомогою шлюзу API, через код або будь-яким іншим способом. Зазвичай більшість середовищ SaaS мають обмеження швидкості API, щоб мінімізувати зловживання з боку користувачів, а також атаки.

  Яка різниця між чохлами для телефонів, протекторами, обкладинками та чохлами?

#10. Використовуйте менеджери оркестровки

Менеджери оркестрації дозволяють вам автоматизувати конфігурацію, координацію та інші завдання керування мікросервісами на додаток до підвищення безпеки. Зазвичай інструменти дають змогу керувати кількома контейнерами, обмежувати доступ до метаданих, розділяти робочі навантаження, збирати журнали тощо.

Деякі інструменти оркестровки мають додаткові функції, які дозволяють розробникам зберігати та обмінюватися конфіденційною інформацією, як-от сертифікати SSL, ключі шифрування, паролі та маркери ідентифікації.

Два широко використовувані методи ефективної оркестровки мікросервісів:

  • Кодування оркестровки як мікросервісу
  • Використання шлюзів API для забезпечення рівня оркестровки

Оркестровка через шлюз API не рекомендована через проблеми, коли необхідно масштабувати служби.

Рівень оркестровки мікросервісу – зображення Globallogic

Типові засоби управління оркестровкою включають Kubernetes, Istio, Служба Azure Kubernetes (AKS)і т.д.

Щоб дізнатися більше, ознайомтеся з оркестровкою контейнерів для DeOps.

#11. Контролюйте всі свої системи та служби

Оскільки мікросервіси покладаються на розподілені системи, вам потрібна надійна та ефективна стратегія моніторингу для всіх окремих компонентів.

Розгортання безперервного моніторингу дозволяє вчасно виявляти та усувати ризики безпеки. Для цього існує широкий спектр рішень моніторингу мікросервісів, в т.ч Прометей, Statsd, InfluxDB, Logstashі т.д.

Моніторинг всередині архітектури мікросервісів

Використовуйте відповідні інструменти для моніторингу внутрішніх систем і служб. Деякі передові практики включають:

  • Увімкнути журналювання на прикладному рівні. Ти можеш Сплунк, Графана, стек ELKта інші інструменти, які збирають журнали на рівнях програми, контейнера, мережі та інфраструктури.
  • Відстежуйте показники використання
  • Використовуйте тенденції в таких показниках, як ЦП, пам’ять, час відповіді, помилки, сповіщення та інші, щоб виявити незвичайні дії, що вказують на наявну або потенційну атаку.
  • Перевірте журнали в таких областях, як вхідні запити клієнтів, записи бази даних, контейнери та інші, щоб виявити невідповідності або незвичні дії.

#12. Автоматизувати охоронну діяльність

Автоматизуйте процеси безпеки, такі як розгортання оновлень, сканування вразливостей, моніторинг, застосування політик та інші дії. Крім того, перевірте оновлення, щоб переконатися, що вони безпечні та не створюють нових вразливостей.

Після оновлень програмне забезпечення безпеки має в ідеалі виконувати тести на всіх контейнерах і мікросервісах, щоб перевірити, чи могли бути якісь уразливості або проблеми з безпекою, які виникли раніше.

#13. Захищайте 🛡️ дані завжди

Захист даних під час передавання та зберігання. В ідеалі примусово використовуйте HTTPS для всіх комунікацій, щоб захистити дані під час передавання, і шифрування для всіх конфіденційних даних у стані спокою. Уникайте передачі та зберігання простих текстових паролів, ключів, облікових даних і конфіденційних даних, які знаходяться поза кодом.

Найкраща стратегія — використовувати стандартні технології для шифрування всіх конфіденційних даних якомога раніше. Крім того, розшифруйте дані якомога пізніше, щоб зменшити ризик.

Висновок

Мікросервіси покладаються на розподілені компоненти, щоб забезпечити такі переваги, як більша гнучкість і варіанти розгортання. Однак, використовуючи мікросервіси, організації повинні налаштувати внутрішню політику безпеки та стратегії до більш хмарного та розподіленого підходу.

В ідеалі намагайтеся зменшити площу атаки, захистити середовище мікросервісів, API, програми та дані.