Mikrotjenestearkitektur tilbyr betydelig fleksibilitet, skalerbarhet og muligheten til å endre, legge til eller fjerne programvarekomponenter uten å forstyrre andre deler av en applikasjon. Denne tilnærmingen gir også kortere utviklingssykluser, mulighet for mindre team og fleksibilitet i valg av programmeringsspråk. I tillegg kan man skalere eller feilsøke spesifikke funksjoner eller tjenester uten å påvirke resten av systemet.
Vanligvis innebærer mikrotjenester å dele opp store, monolitiske applikasjoner i mindre, selvstendige tjenester som kan distribueres uavhengig. Selv om disse mindre tjenestene øker smidigheten, medfører de også en økning i antall komponenter, noe som kan føre til økt kompleksitet og utfordringer med å sikre systemet.
En typisk mikrotjenestedistribusjon omfatter flere lag, inkludert maskinvare, tjeneste- eller applikasjonslag, kommunikasjonslag, skyinfrastruktur, virtualisering og orkestrering. Hvert av disse lagene har sine egne sikkerhetskrav, kontroller og utfordringer.
Sikkerhetsutfordringer ved bruk av mikrotjenester
Mikrotjenester er ofte distribuert over et stort område, med komplekse tilgangsregler, mye trafikk som må overvåkes og en større angrepsflate. I tillegg kjører de fleste mikrotjenester i skyen, som i seg selv kan ha varierende sikkerhetskonfigurasjoner og -kontroller.
Det store antallet API-er, porter og komponenter som er eksponert, gjør at tradisjonelle brannmurer kanskje ikke gir tilstrekkelig beskyttelse. Dette gjør mikrotjenestedistribusjoner mer sårbare for cybertrusler som «mann-i-midten»-angrep, injeksjonsangrep, cross-site scripting (XSS), DDoS-angrep og andre.
Nettverkssikkerhet er en annen utfordring, spesielt når det gjelder identitets- og tilgangskontroll, som får et nytt nivå av kompleksitet. Andre sårbarheter inkluderer usikker kode og feil i tjenesteoppdagelsessystemene.
Selv om det er mer utfordrende å sikre mikrotjenester sammenlignet med monolitiske applikasjoner, er det fullt mulig å beskytte dem effektivt ved å etablere en solid sikkerhetsstrategi og følge beste praksis. Arkitekturen krever en distribuert tilnærming som dekker alle de forskjellige komponentene.
Typiske områder som bør adresseres inkluderer:
- Beskyttelse av applikasjoner, mikrotjenester og brukere.
- Sikring av identitets- og tilgangsadministrasjon.
- Beskyttelse av data.
- Forbedring av sikkerhet i kommunikasjon mellom tjenester.
- Overvåking av mikrotjenester og sikkerhetssystemer.
Beste praksis for å sikre mikrotjenester
En effektiv strategi innebærer å kombinere beste praksis, verktøy og kontroller for å beskytte hele økosystemet. Den nøyaktige tilnærmingen kan variere avhengig av faktorer som type tjenester, applikasjoner, brukere og miljø.
Når du velger å bruke mikrotjenester, må du sørge for at alle sikkerhetskravene for tjenestene, tilkoblingene og dataene er oppfylt. La oss se på noen effektive sikkerhetspraksiser:
#1. Bygg sikkerhet inn fra starten
Integrer sikkerhet som en del av utviklingssyklusen. Ideelt sett bør sikkerhet være en integrert del av utviklingen og distribusjonen av mikrotjenester fra begynnelsen av. Dette er en mer effektiv og kostnadsbesparende tilnærming enn å vente med å legge til sikkerhet i sluttfasen av programvareutviklingen.
#2. Benytt en dybdeforsvarsmekanisme
Dybdeforsvar (Defense in Depth, DiP) er en teknikk der flere sikkerhetslag brukes på tjenestene og dataene dine. Denne praksisen gjør det vanskeligere for angripere å trenge gjennom flere lag, noe som gir en mer robust sikkerhet for tjenestene og dataene dine.
I motsetning til tradisjonell perimetersikkerhet, er dybdeforsvar basert på en kombinasjon av verktøy som antivirus, brannmur, patch management og anti-spam for å gi flere sikkerhetslag over hele systemet.
Forsvar i dybden flerlags sikkerhet Bilde: Imperva
Med denne tilnærmingen må du identifisere de mest sensitive tjenestene først, og deretter legge de nødvendige sikkerhetslagene rundt dem.
#3. Distribuer sikkerhet på containernivå
Mikrotjenester er ofte avhengige av containerteknologi. Å sikre containere, både internt og eksternt, er en måte å redusere angrepsflaten og risikoen på. Det er viktig å følge prinsippet om minste nødvendige privilegium. Dette innebærer en kombinasjon av strategier:
- Begrens tillatelsene til det absolutte minimum som kreves.
- Unngå å kjøre tjenester med sudo- eller privilegerte kontoer.
- Begrens eller kontroller tilgangen til tilgjengelige ressurser.
- Ikke lagre sensitive opplysninger i containerens filsystem.
- Bruk passende regler for å isolere tilgangen til ressursene.
Det er også viktig å sikre at containerbilder ikke har sårbarheter eller sikkerhetsproblemer. Regelmessig skanning av containerne for sikkerhetsproblemer vil bidra til å identifisere risikoer.
Noen typiske verktøy for skanning av containerbilder inkluderer Clair og Anker.
#4. Implementer multifaktorautentisering
Aktivering av multifaktorautentisering (MFA) forbedrer sikkerheten på frontend. Brukere må oppgi brukernavn og passord, samt en ekstra form for bekreftelse, for eksempel en kode sendt til telefonen eller en spesifisert e-postadresse. Dette gjør det vanskeligere for angripere å få tilgang til mikrotjenestene.
#5. Bruk brukeridentitet og tilgangstokener
Ved bruk av mikrotjenester vil mange applikasjoner og tjenester kreve sikker autorisasjon og tilgangskontroll. Et rammeverk for autorisasjon, som OAuth 2.0 og OpenID, lar deg håndtere tokens på en sikker måte og beskytte mikrotjenestene dine. Dette gir tredjepartsapplikasjoner mulighet til å få tilgang til andre tjenester eller data fra brukere.
I en typisk distribusjon vil hovedapplikasjonen be brukeren om å autorisere tredjepartstjenesten. Når dette er godkjent, genererer applikasjonen et tilgangstoken for sesjonen.
OAuth er en av de mest effektive strategiene for brukeridentitet og tilgangskontroll. Selv om det finnes flere autorisasjonsprotokoller, er det best å bruke OAuth, da det er en mer standardisert, stabil og allment akseptert løsning.
#6. Opprett en API-gateway
Mikrotjenester består ofte av flere komponenter som er distribuert over ulike nettverk og er tilgjengelige fra mange systemer og klienter. Å eksponere disse mikrotjenestene direkte øker sårbarheten. En måte å beskytte dem på, er å opprette et enkelt og sikkert inngangspunkt for all ekstern tilgang.
Dette kan oppnås ved å bruke en API-gateway, som screener alle innkommende forespørsler for sikkerhetsproblemer før de videresendes til de aktuelle mikrotjenestene. API-gatewayen fungerer som et mellomledd mellom klientapplikasjonene og mikrotjenestene. Den begrenser eksponeringen samtidig som den gir funksjoner som autentisering, SSL-terminering, protokollkonvertering, overvåking, forespørselsruting og caching.
Med en API-gateway rutes alle eksterne tjenester til mikrotjenestene, samtidig som sikkerhetsprinsippet om dybdeforsvar opprettholdes.
Microservices API-gatewaybilde Livebook
Typiske API-gatewayer inkluderer NGINX, Kong, Tyk, Ambassadør og AWS API-gateway.
#7. Profiler API-er basert på distribusjonssone
Implementer rollebaserte begrensninger for å sikre at brukerne kun har tilgang til de API-ene og tjenestene de trenger. Siden skadelig programvare ofte eksponerer tjenester for flere enn nødvendig, reduseres risikoen ved å begrense tilgangen til autoriserte brukere. En teknikk for å redusere eksponering er å kategorisere API-ene basert på hvilke brukere som skal ha tilgang:
- Ethernet-API-er: For tjenester eksponert mot omverdenen.
- Corporate Zone API-er: For intern privat trafikk.
- DMZ API-er: For å håndtere trafikk fra internett.
- Hybrid Zone API-er: For distribusjon av datasentre.
#8. Sikre kommunikasjon mellom tjenester
Sørg for autentisering og autorisasjon når to mikrotjenester kommuniserer. Det er tre hovedteknikker for å sikre kommunikasjon:
- Stol på nettverket.
- JSON Web Token (JWT).
- Mutual Transport Layer Security (mTLS).
Sikring av kommunikasjon mellom tjenestene med JWT Image Livebook
mTLS er den mest populære metoden. Hver mikrotjeneste må ha et offentlig/privat nøkkelpar. Klientmikrotjenesten bruker dette nøkkelparet for å autentisere seg selv mot den mottakende mikrotjenesten gjennom mTLS. Under autentiseringen genererer hver mikrotjeneste et sertifikat. Etterpå bruker hver mikrotjeneste den andres sertifikat for å autentisere seg selv. TLS sørger for integritet og konfidensialitet, men mTLS lar hver av mikrotjenestene identifisere den andre.
#9. Begrens kundetrafikk
Begrensning av ekstern trafikk forhindrer tjenestenektangrep (DoS), og forhindrer at enkelte klienter bruker unødvendig mye av applikasjonens båndbredde. Benytt regler for å overvåke og kontrollere hastigheten på trafikken basert på IP, tid osv. Sett opp tjenestene til å redusere hastigheten dersom flere mislykkede forsøk på innlogging oppdages.
Et system som svarer tregt, vil demotivere angriperne. Du kan begrense hastigheten med API-gatewayen eller i koden. De fleste SaaS-miljøer har innebygde funksjoner for å begrense API-hastighet for å minimere misbruk.
#10. Bruk orkestreringsverktøy
Orkestreringsverktøy lar deg automatisere konfigurasjon og andre administrative oppgaver for mikrotjenester, samt øke sikkerheten. Disse verktøyene gjør det mulig å administrere beholdere, begrense metadatatilgang, skille arbeidsbelastninger og samle inn logger.
Noen verktøy har også funksjoner for å lagre og dele sensitiv informasjon som sertifikater, krypteringsnøkler og passord.
De to mest brukte metodene for mikroserviceorkestrering er:
- Koding av orkestrering som en mikrotjeneste.
- Bruk av API-porter for å gi et orkestreringslag.
Orkestrering via API-gatewayen anbefales ikke på grunn av utfordringer med skalering av tjenester.
Microservice orkestreringslag – Bilde Globallogic
Eksempler på orkestreringsverktøy er Kubernetes, Istio og Azure Kubernetes Service (AKS).
#11. Overvåk alle systemer og tjenester
Mikrotjenester er avhengige av distribuerte systemer, så det er viktig å ha en pålitelig overvåkingsstrategi. Kontinuerlig overvåking gjør at du kan oppdage og håndtere sikkerhetsrisikoer i tide. Det finnes mange løsninger for overvåking, inkludert Prometheus, Statsd, InfluxDB og Logstash.
Overvåking inne i mikrotjenester-arkitekturen
Bruk de riktige verktøyene for å overvåke interne systemer og tjenester. Noen beste fremgangsmåter inkluderer:
- Aktiver logging på applikasjonsnivå. Bruk verktøy som Splunk, Graphana og ELK-stabelen.
- Overvåk bruksmetrikker.
- Bruk trender i CPU, minne, responstider og feil for å oppdage uvanlig aktivitet.
- Gå gjennom loggene for å identifisere inkonsekvenser eller uvanlig aktivitet.
#12. Automatiser sikkerhetsaktiviteter
Automatiser sikkerhetsprosesser som oppdateringer, sårbarhetsskanning og overvåking. Sjekk oppdateringene for å sikre at de er trygge. Sikkerhetsprogramvaren bør utføre tester etter oppdateringer for å se om det har oppstått sårbarheter.
#13. Beskytt data til enhver tid
Beskytt data under overføring og lagring. Bruk HTTPS for all kommunikasjon og kryptering for sensitive data. Unngå å lagre passord, nøkler eller annen sensitiv informasjon i klartekst.
Krypter sensitive data så tidlig som mulig og dekrypter dem så sent som mulig for å redusere eksponeringen.
Konklusjon
Mikrotjenester tilbyr fleksibilitet og distribusjonsmuligheter. Organisasjoner må tilpasse sikkerhetspolicyer og strategier til en mer skybasert og distribuert tilnærming. Målet er å redusere angrepsflaten og beskytte mikrotjenestemiljøet, API-er, applikasjoner og data.