Архитектура микросервиса нуди изузетну прилагодљивост, скалабилност и могућност модификације, додавања или уклањања софтверских делова без негативног утицаја на остале сегменте апликације. Она омогућава краће циклусе развоја, стварање мањих тимова и флексибилне изборе програмских језика. Можете скалирати или решавати проблеме са одређеним функцијама или сервисима без интерференције са другим компонентама.
Микросервиси су ефикасни у разлагању великих, монолитних апликација на мање, независне сервисе који се могу одвојено имплементирати. Међутим, ова независност и повећан број компоненти доприносе сложености и потешкоћама у њиховој безбедности.
Слика: Архитектура монолитних апликација у поређењу са микросервисима (преузето са Црвени шешир)
Типична имплементација микросервиса обухвата слојеве хардвера, сервиса или апликација, комуникационе канале, cloud окружења, виртуелизацију и оркестрацију. Сваки од ових слојева носи специфичне безбедносне захтеве, контроле и изазове.
Безбедносни изазови микросервиса
Микросервиси су обично део широко дистрибуираних система са компликованим правилима приступа, интензивним саобраћајем који захтева праћење и повећаним површинама за потенцијалне нападе. Већина микросервиса се имплементира у cloud окружењима, што додатно компликује ствар због различитих безбедносних конфигурација и контрола.
Због бројних изложених API-ја, портова и компоненти, традиционални заштитни зидови често нису довољни за пружање адекватне заштите. Ова комплексност чини микросервисе рањивим на различите сајбер претње као што су напади „човек у средини“, SQL ињекције, cross-site scripting (XSS), DDoS напади и друге.
Безбедност мреже је још један значајан изазов. Идентитет и контрола приступа постају изузетно сложени. Друге рањивости укључују небезбедан код и слабости у системима за откривање сервиса.
Иако је обезбеђивање микросервиса комплексније од обезбеђивања монолитних апликација, ефикасна заштита је могућа уз добру стратегију и придржавање најбољих пракси.
Идеално решење подразумева дистрибуирани приступ који обухвата све различите компоненте система.
Кључне области на које треба обратити пажњу:
- Заштита апликација, микросервиса и корисника
- Обезбеђивање идентитета и управљање приступом
- Заштита података
- Побољшање сигурности комуникације између сервиса
- Континуирано праћење микросервиса и безбедносних система
Најбоље праксе за обезбеђивање микросервиса
Најефикаснија стратегија подразумева комбинацију најбољих пракси, алата и контрола за заштиту целог екосистема. Специфичан приступ може се разликовати у зависности од врсте сервиса, апликација, корисника, окружења и других фактора.
Ако се одлучите за коришћење микросервиса, морате осигурати да су испуњени сви безбедносни захтеви за сервисе, везе и податке.
Сада ћемо размотрити неке од најефикаснијих безбедносних пракси.
#1. Уградите безбедност од самог почетка
Безбедност треба бити саставни део развојног циклуса. Идеално је интегрисати безбедносне мере у развој и имплементацију микросервиса од самог почетка. Овај приступ је лакши, ефикаснији и економичнији од накнадне интеграције безбедности на крају развојног процеса.
#2. Примените механизам „одбрана у дубини“
Одбрана у дубини је техника где се примењује више безбедносних слојева на ваше сервисе и податке. Ова пракса отежава нападачима да пробију више слојева, пружајући на тај начин јачу сигурност за ваше сервисе и податке.
За разлику од безбедносних решења која се фокусирају на периметар, као што су заштитни зидови, концепт одбране у дубини је другачији. Он се ослања на комбинацију различитих алата као што су антивирус, заштитни зид, управљање закрпама, анти-спам софтвер и други, како би обезбедио вишеструке безбедносне слојеве распоређене у систему.
Слика: Вишеслојна безбедност у дубини одбране (преузето са Имперва)
Са овим приступом, прво је потребно идентификовати осетљиве сервисе, а затим применити одговарајуће безбедносне слојеве око њих.
#3. Обезбедите контејнере
У већини случајева, микросервис се ослања на технологију контејнера. Обезбеђивање контејнера, како унутра тако и споља, је ефикасан начин за смањење површине напада и ризика. Принцип безбедности са најмање привилегија треба бити циљ, што захтева комбинацију следећих стратегија:
- Ограничавање дозвола на апсолутни минимум.
- Избегавање покретања сервиса са судо или привилегованим налозима.
- Ограничење приступа и потрошње доступних ресурса. Ограничавање приступа ресурсима оперативног система кроз контејнере помаже у спречавању крађе или компромитовања података.
- Избегавање чувања тајни на диску контејнера.
- Коришћење одговарајућих правила за изолацију приступа ресурсима.
Такође је важно осигурати да слике контејнера не садрже рањивости или безбедносне проблеме. Редовно скенирање безбедности и рањивости контејнера помаже у идентификовању потенцијалних ризика.
Типични алати за скенирање слика контејнера укључују Clair, Anchore и друге.
#4. Примените вишефакторску аутентификацију
Омогућавање вишефакторске аутентификације побољшава безбедност фронт-енд-а. Корисници који приступају системима морају да наведу своје корисничко име и лозинку, као и други облик верификације, као што је код послат на њихов телефон или адресу е-поште. Ова техника отежава приступ нападачима, који можда користе украдене или компромитоване акредитиве.
#5. Користите токене идентитета и приступа
У имплементацији микросервиса, велики број апликација и сервиса захтева сигурну ауторизацију и контролу приступа. Оквири за ауторизацију, као што су OAuth 2.0 и OpenID, омогућавају безбедно руковање токенима, што помаже у заштити микросервиса. Такође, омогућава апликацијама трећих страна приступ другим сервисима или корисничким подацима.
У типичној примени, главна апликација ће затражити од корисника да овласти сервис треће стране. Након прихватања, апликација генерише приступни токен за сесију.
OAuth је једна од најефикаснијих стратегија за кориснички идентитет и контролу приступа. Иако постоји неколико других протокола за ауторизацију, а можете и креирати сопствени, препоручљиво је користити OAuth због његове стандардизованости, стабилности и широке прихваћености.
#6. Креирајте API gateway
Микросервиси се обично састоје од неколико компоненти распоређених преко различитих мрежа, којима се приступа преко различитих система и клијената. Излагање микросервиса повећава рањивости и безбедносне ризике. Један од начина да их заштитите је креирање јединствене и сигурне улазне тачке која централизује сав приступ спољних система и клијената.
Имплементирајте API gateway за проверу свих долазних захтева ради безбедносних проблема пре него што их проследите до одговарајућих микросервиса. API gateway се налази између клијентских апликација и микросервиса. Он ограничава излагање микросервиса, а истовремено пружа додатне функције за управљање захтевима, као што су аутентификација, SSL терминација, превод протокола, надзор, рутирање захтева, кеширање и друге.
Са овим приступом, API gateway усмерава све екстерне сервисе ка микросервисима, подржавајући принцип одбране у дубини.
Слика: Архитектура API gateway у микросервисима (преузето са Livebook)
Типични API gateway-и укључују NGINX, Kong, Tyk, Ambassador, AWS API Gateway и друге.
#7. Профилишите API-је на основу зоне примене
Имплементирајте ограничења заснована на улогама, осигуравајући да корисници имају приступ само оним API-јима и сервисима који су им потребни. Пошто већина злонамерног софтвера излаже сервисе већем броју корисника, ограничавање приступа само овлашћеним корисницима смањује ризике. Једна од техника је обележавање API-ја на основу корисника који би требало да имају приступ. API-ји могу бити:
- Ethernet API-ји – за сервисе изложене спољном свету ван дата центра.
- API-ји за корпоративне зоне – за интерни приватни саобраћај.
- DMZ API-ји – за управљање саобраћајем са интернета.
- API-ји хибридне зоне – за имплементацију дата центара.
#8. Обезбедите комуникацију између сервиса
Ефикасне праксе укључују аутентификацију и ауторизацију захтева приликом комуникације два микросервиса. Постоје три главне технике које можете користити за обезбеђивање комуникације међу сервисима: мрежно поверење, JSON web токени (JWT) и узајамна безбедност транспортног слоја (mTLS или Mutual TLS).
Слика: Обезбеђивање комуникације између служби са JWT токенима (преузето са Livebook)
Од ове три, mTLS је најпопуларнији. У овом приступу, сваки микросервис мора да поседује пар јавних/приватних кључева. Клијентски микросервис користи пар кључева за аутентификацију микросервису који прима преко mTLS-а.
Током аутентификације, сваки микросервис генерише сертификат. Након тога, сваки микросервис користи сертификат другог за аутентификацију.
Док TLS обезбеђује интегритет и поверљивост података у транзиту, он такође омогућава клијенту да идентификује микросервис. Клијентски микросервис обично познаје други микросервис. Међутим, пошто је TLS једносмеран, микросервис који прима не може да верификује клијентски микросервис, што нападачи могу искористити. mTLS пружа механизам у којем сваки микросервис може да идентификује други.
#9. Ограничите брзину клијентског саобраћаја
Ограничавање спољног саобраћаја спречава проблеме као што су DDoS напади, као и случајеве у којима поједини клијенти троше већину пропусног опсега апликације. Један приступ је примена различитих правила која могу пратити и контролисати брзину саобраћаја коју клијент шаље или прима на основу IP адресе, времена итд.
Конфигуришите своје сервисе да успоре ако открију неколико неуспешних покушаја пријаве на ваше API-је или друге сумњиве активности.
Успорен систем обесхрабрује нападаче и смањује њихове шансе да приступе сервисима. Можете да примените ограничење брзине користећи API gateway, код или друге технике. Већина SaaS окружења већ има ограничење брзине API-ја како би се смањила злоупотреба од стране корисника и заштитила од напада.
#10. Користите менаџере оркестрације
Менаџери оркестрације омогућавају аутоматизацију конфигурације, координацију и друге задатке управљања микросервисима, као и побољшање безбедности. Обично ови алати омогућавају управљање више контејнера, ограничавање приступа метаподацима, одвајање радних оптерећења, прикупљање евиденција и друге функције.
Неки алати за оркестрацију имају додатне функције које програмерима омогућавају да чувају и деле осетљиве информације, као што су SSL сертификати, кључеви за шифровање, лозинке и токени идентитета.
Две најчешће коришћене методе за ефикасну оркестрацију микросервиса су:
- Кодирање оркестрације као микросервиса.
- Коришћење API gateway-а за обезбеђивање слоја оркестрације.
Оркестрација преко API gateway-а се не препоручује због изазова приликом скалирања сервиса.
Слика: Слој оркестрације микросервиса (преузето са Globallogic)
Типични алати за управљање оркестрацијом укључују Kubernetes, Istio, Azure Kubernetes Service (AKS) итд.
#11. Пратите све своје системе и сервисе
Пошто се микросервиси ослањају на дистрибуиране системе, потребно је имати поуздану и ефикасну стратегију за праћење свих компоненти. Континуирано праћење омогућава благовремено откривање и решавање безбедносних ризика. Постоји широк спектар решења за праћење микросервиса, укључујући Prometheus, Statsd, InfluxDB, Logstash итд.
Надгледање унутар архитектуре микросервиса
Користите одговарајуће алате за праћење интерних система и сервиса. Неке од најбољих пракси укључују:
- Омогућавање евидентирања на слоју апликације. Користите Splunk, Grafana, ELK stack или друге алате за прикупљање евиденција на нивоу апликације, контејнера, мреже и инфраструктуре.
- Пратите метрику искоришћења ресурса.
- Користите трендове у метрикама као што су CPU, меморија, време одзива, грешке и обавештења за откривање необичних активности које указују на постојећи или потенцијални напад.
- Прегледајте евиденције у областима као што су долазни захтеви клијената, записи базе података, контејнери и друге за идентификацију недоследности или необичних активности.
#12. Аутоматизујте безбедносне активности
Аутоматизујте безбедносне процесе као што су примена ажурирања, скенирање рањивости, надгледање, примена смерница и друге активности. Проверите ажурирања како бисте били сигурни да су безбедна и да не уносе нове рањивости.
Након ажурирања, безбедносни софтвер би требало да изврши тестове на свим контејнерима и микросервисима како би се проверило да ли су се појавиле неке рањивости или безбедносни проблеми.
#13. Заштитите податке у сваком тренутку
Заштитите податке током транзита и складиштења. Користите HTTPS за сву комуникацију, шифровање за све осетљиве податке који се складиште. Избегавајте чување лозинки, кључева, акредитива и осетљивих података у обичном тексту изван кода.
Најбоља стратегија је коришћење стандардних технологија за шифровање свих осетљивих података што је пре могуће. Такође, дешифрујте податке што је касније могуће како бисте смањили изложеност.
Закључак
Микросервиси се ослањају на дистрибуиране компоненте ради пружања предности као што су већа флексибилност и могућност примене. Међутим, организације које користе микросервисе морају да прилагоде своје интерне безбедносне политике и стратегије приступу који је више усмерен на cloud и дистрибуиран.
Циљ је смањење површине напада и заштита микросервисног окружења, API-ја, апликација и података.