Мікросервісна архітектура: Гнучкість та Безпека
Мікросервіси створюють архітектуру, яка гарантує адаптивність, можливість розширення та легкість у внесенні змін, додаванні або видаленні частин програмного забезпечення. При цьому, ці зміни не впливають на інші елементи системи.
Завдяки скороченню циклів розробки, невеликим командам та свободі вибору мови програмування, мікросервіси дозволяють розширювати або виправляти проблеми в окремих функціях, не зачіпаючи інші складові.
Загалом, мікросервісний підхід передбачає поділ великих, монолітних програм на незалежні сервіси, що можуть розгортатися окремо. Проте, хоча ці окремі блоки простіші, їх велика кількість збільшує загальну складність і виклики в управлінні.
Порівняння монолітної архітектури з мікросервісною. Джерело: Red Hat
Типове розгортання мікросервісів включає апаратне забезпечення, сервіс або програму, взаємодію між ними, хмарні ресурси, віртуалізацію та оркестрацію. Кожен з цих елементів має свої вимоги до безпеки, контролю та вирішення можливих проблем.
Загрози безпеці у світі мікросервісів
Мікросервісні системи, як правило, є широко розподіленими, мають складні правила доступу, великий обсяг трафіку для відстеження та, як наслідок, більшу кількість точок для атак. Більшість хмарних мікросервісів працюють у хмарних середовищах, що також створюють специфічні вимоги до безпеки.
Велика кількість відкритих API, портів і компонентів робить традиційні брандмауери недостатніми для ефективного захисту. Ці фактори роблять мікросервісні системи більш уразливими до різноманітних кібератак, таких як “людина посередині”, ін’єкційні атаки, міжсайтові скрипти, DDoS та інші.
Безпека мережі – ще одна важлива проблема. Зокрема, процеси ідентифікації та контролю доступу стають набагато складнішими. Інші вразливості включають незахищений програмний код та недоліки у системах виявлення сервісів.
Хоча забезпечення безпеки мікросервісів складніше, ніж монолітних застосунків, ефективний захист можливий за умови розробки надійної стратегії та дотримання найкращих практик.
В ідеалі, потрібен комплексний підхід, що охоплює всі компоненти системи.
Серед основних областей, на які слід звернути увагу, є:
- Захист програм, мікросервісів та кінцевих користувачів.
- Захист ідентифікації та управління доступом.
- Захист даних.
- Посилення безпеки взаємодії між сервісами.
- Моніторинг мікросервісів та систем безпеки.
Рекомендації для захисту мікросервісів
Одним з найкращих підходів є використання комбінації передових методик, інструментів та засобів контролю для захисту всієї екосистеми. Конкретні кроки можуть змінюватись в залежності від типу послуг, програм, користувачів, середовища та інших факторів.
Вирішивши використовувати мікросервіси, необхідно переконатися у відповідності всім вимогам безпеки для сервісів, з’єднань та даних.
Розглянемо кілька ефективних методів забезпечення безпеки мікросервісів.
#1. Вбудовуйте безпеку на етапі розробки 👮
Зробіть безпеку невід’ємною частиною процесу розробки. Інтегруйте її в розробку та розгортання мікросервісів з самого початку. Такий підхід є простішим, ефективнішим і економічно вигіднішим, ніж спроби забезпечити безпеку на завершальних етапах розробки.
#2. Застосовуйте багаторівневий захист
Багаторівневий захист – це методика, де до послуг та даних застосовується декілька рівнів безпеки. Це ускладнює зловмисникам проникнення через різні шари захисту, забезпечуючи тим самим надійний захист ваших даних.
На відміну від рішень на основі захисту периметра, таких як брандмауери, концепція багаторівневого захисту спирається на комбінацію інструментів: антивірус, брандмауер, управління оновленнями, засоби захисту від спаму та інші, що створюють кілька рівнів безпеки, розподілених по всій системі.
Багаторівнева безпека. Джерело: Imperva
При такому підході, спочатку визначаються критично важливі сервіси, а потім навколо них розгортаються відповідні рівні безпеки.
#3. Забезпечте захист на рівні контейнерів 📦
Часто мікросервіси використовують контейнерні технології. Тому захист контейнерів як ззовні, так і зсередини є важливим для зменшення поверхні атаки та пов’язаних ризиків. Застосування принципу мінімальних привілеїв – є гарною практикою і вимагає використання таких стратегій:
- Обмеження доступу до необхідного мінімуму.
- Заборона запуску сервісів з правами sudo або привілейованих облікових записів.
- Обмеження або контроль доступу до доступних ресурсів. Наприклад, обмеження доступу контейнерів до ресурсів операційної системи допомагає запобігти викраденню або компрометації даних.
- Уникання зберігання секретів на дисках контейнерів.
- Використання відповідних правил для ізоляції доступу до ресурсів.
Важливо переконатися, що образи контейнерів не містять вразливостей або проблем з безпекою. Регулярне сканування контейнерів на безпеку допоможе виявити потенційні загрози.
Типові засоби сканування образів: Clair, Anchore та інші.
#4. Застосовуйте багатофакторну аутентифікацію 🔒
Увімкнення багатофакторної автентифікації підвищує безпеку доступу до системи.
Користувачам буде потрібно надавати не лише ім’я та пароль, а й додаткову інформацію, наприклад, код, надісланий на телефон або email. Такий підхід значно ускладнює несанкціонований доступ до мікросервісів, навіть якщо облікові дані користувача було викрадено.
#5. Використовуйте токени для ідентифікації користувача та доступу
При розгортанні мікросервісів, велика кількість застосунків та сервісів потребуватимуть безпечної авторизації та контролю доступу. Платформи авторизації, такі як OAuth 2.0 та OpenID, дозволяють безпечно обробляти токени і, як результат, захищати мікросервіси. Це дозволяє стороннім додаткам отримувати доступ до інших сервісів або даних користувачів.
У типовій ситуації, основний додаток запитує користувача про дозвіл на доступ до стороннього сервісу. У разі згоди, додаток генерує токен доступу для сеансу.
OAuth є однією з найефективніших стратегій ідентифікації користувача та контролю доступу. Хоча існує декілька інших протоколів авторизації, краще використовувати саме OAuth, оскільки він є більш стандартизованим, надійним і широко використовуваним.
#6. Створіть API-шлюз
Зазвичай, мікросервіси складаються з багатьох компонентів, розподілених у різних мережах. Викриття мікросервісів збільшує вразливість та ризики безпеці. Щоб цього уникнути, створіть єдину безпечну точку входу, яка допоможе вам централізувати весь доступ з зовнішніх систем.
Для цього розгорніть API-шлюз для перевірки всіх вхідних запитів перед їх направленням до відповідних мікросервісів. API-шлюз розміщується між клієнтськими застосунками та мікросервісами, він обмежує доступ до мікросервісів, а також виконує функції управління запитами: аутентифікація, SSL-шифрування, маршрутизація запитів, кешування тощо.
Завдяки такому підходу, API-шлюз направляє всі зовнішні запити до мікросервісів, одночасно підтримуючи принцип багаторівневого захисту.
Зображення API-шлюзу для мікросервісів. Джерело: Livebook
Типові API-шлюзи: NGINX, Kong, Tyk, Ambassador, AWS API Gateway та інші.
Більше про безпеку API можна дізнатися у нашому посібнику: Як і чому захищати API.
#7. Профілюйте API залежно від зони розгортання
Впроваджуйте обмеження на основі ролей, гарантуючи, що користувачі мають доступ лише до необхідних API та сервісів. Оскільки зловмисне програмне забезпечення часто намагається надати послуги великій кількості користувачів, обмеження доступу тільки для авторизованих осіб зменшує ризики. Один з методів – маркування API на основі користувачів, які повинні мати до них доступ. API можна розділити на:
- Ethernet API – для сервісів, доступних ззовні центру обробки даних.
- API корпоративної зони – для внутрішнього трафіку.
- DMZ API – для обробки трафіку з інтернету.
- Hybrid Zone API – для розгортання центрів обробки даних.
#8. Захистіть з’єднання між сервісами
Ефективні методи включають аутентифікацію та авторизацію запитів, коли два мікросервіси обмінюються даними.
Існує три основні методи захисту з’єднання між сервісами: довіра до мережі, JSON Web Token (JWT) та Mutual Transport Layer Security (mTLS).
Захист з’єднання між сервісами за допомогою JWT. Джерело: Livebook
З трьох, найпопулярнішим є mTLS. У цьому підході, кожен мікросервіс має пару відкритий/приватний ключ. Мікросервіс-клієнт використовує пару ключів для автентифікації в мікросервісі-одержувачі через mTLS.
Під час аутентифікації, кожен мікросервіс генерує сертифікат. Після цього, кожна мікрослужба використовуватиме сертифікат іншої для автентифікації.
Хоча TLS забезпечує цілісність та конфіденційність даних, він також дозволяє клієнту ідентифікувати мікросервіс. Клієнтська мікрослужба зазвичай знає іншу мікрослужбу. Однак, оскільки TLS є одностороннім, мікросервіс-одержувач не може перевірити мікросервіс-клієнта, чим можуть скористатися зловмисники. mTLS, в свою чергу, надає засоби для ідентифікації обох мікросервісів.
#9. Обмеження клієнтського трафіку 🚏
Обмеження зовнішнього трафіку запобігає таким проблемам, як атаки типу “відмова в обслуговуванні” (DoS), а також ситуаціям, коли деякі клієнти використовують більшу частину пропускної здатності. Для цього застосовуються правила, що відстежують та контролюють швидкість трафіку на основі IP-адреси, часу та інших параметрів.
Налаштуйте сервіси на сповільнення у випадку виявлення багаторазових невдалих спроб входу або інших підозрілих дій.
Сповільнення системи ускладнить зловмисникам доступ до сервісів. Ви можете налаштувати обмеження через API-шлюз, програмний код або іншим способом. Зазвичай, більшість SaaS-середовищ мають обмеження швидкості API для мінімізації зловживань та атак.
#10. Використовуйте менеджери оркестрації
Менеджери оркестрації автоматизують конфігурацію, координацію та інші завдання управління мікросервісами, а також підвищують їх безпеку. Інструменти оркестрації дозволяють керувати кількома контейнерами, обмежувати доступ до метаданих, розділяти робочі навантаження, збирати журнали та інше.
Деякі інструменти оркестрації мають додаткові функції, які дозволяють зберігати та обмінюватися конфіденційною інформацією, як-от сертифікати SSL, ключі шифрування, паролі та токени ідентифікації.
Два широко використовувані методи ефективної оркестрації мікросервісів:
- Кодування оркестрації як мікросервісу.
- Використання API-шлюзів для забезпечення рівня оркестрації.
Оркестрація через API-шлюз не рекомендується через проблеми масштабування сервісів.
Рівень оркестрації мікросервісу. Джерело: Globallogic
Типові засоби управління оркестрацією: Kubernetes, Istio, Azure Kubernetes Service (AKS) та інші.
Детальніше про оркестрацію контейнерів можна прочитати тут.
#11. Моніторте всі системи та сервіси
Оскільки мікросервіси працюють у розподілених системах, необхідна надійна та ефективна стратегія моніторингу для кожного компонента.
Постійний моніторинг дозволяє своєчасно виявляти та усувати ризики безпеки. Для цього існує широкий спектр рішень: Prometheus, Statsd, InfluxDB, Logstash та інші.
Моніторинг внутрішньої частини архітектури мікросервісів
Використовуйте відповідні інструменти для моніторингу внутрішніх систем та сервісів. Передові методики включають:
- Включення журналювання на прикладному рівні. Можна використовувати Splunk, Grafana, ELK stack та інші інструменти для збору журналів на рівнях програми, контейнера, мережі та інфраструктури.
- Відстежуйте показники використання.
- Використовуйте тенденції в таких показниках, як використання ЦП, пам’яті, час відгуку, помилки, сповіщення, для виявлення нетипових дій, що можуть свідчити про атаку.
- Перевіряйте журнали в таких областях, як вхідні запити клієнтів, записи бази даних, контейнери та інші, для виявлення невідповідностей або незвичних дій.
#12. Автоматизуйте заходи безпеки
Автоматизуйте процеси безпеки, як-от розгортання оновлень, сканування вразливостей, моніторинг, застосування політиків та інші дії. Перевіряйте оновлення на безпеку перед їх розгортанням.
Після оновлення, програмне забезпечення безпеки має проводити тести на всіх контейнерах та мікросервісах, для виявлення можливих нових вразливостей.
#13. Завжди захищайте 🛡️ дані
Захищайте дані під час передавання та зберігання. Використовуйте HTTPS для всіх з’єднань, щоб захистити дані під час передачі, та шифрування для всіх конфіденційних даних у стані спокою. Уникайте передачі та зберігання паролів, ключів, облікових даних у відкритому вигляді.
Найкраща стратегія – шифрувати всі конфіденційні дані якнайшвидше, і дешифрувати їх якомога пізніше, для зменшення ризику.
Підсумки
Мікросервіси покладаються на розподілені компоненти, що забезпечує такі переваги як гнучкість та легкість розгортання. Проте, при їх використанні, організаціям необхідно адаптувати внутрішні політики безпеки до хмарного та розподіленого підходу.
Намагайтеся зменшити площу для атак, захистити середовище мікросервісів, API, застосунки та дані.