Mikropalveluarkkitehtuurin tietoturva : kommunikointi, konfiguraatio ja riippuvuudet
Metsäranta, Jere (2021)
Metsäranta, Jere
2021
Tietotekniikan DI-ohjelma - Master's Programme in Information Technology
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-04-16
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202103242654
https://urn.fi/URN:NBN:fi:tuni-202103242654
Tiivistelmä
Mikropalveluarkkitehtuuri on ohjelmistoarkkitehtuuri, jossa ohjelmisto koostuu useasta pienestä palvelusta, jotka muodostavat ohjelmistokokonaisuuden kommunikoimalla keskenään rajapintojen välityksellä. Mikropalvelut ovat itsenäisiä, joka tarkoittaa esimerkiksi itsenäistä ajoympäristöä, lähdekoodia, riippuvuuksia, konfiguraatiota, kehitystiimiä ja toteutusteknologiaa. Palveluiden itsenäisyys kasvattaa julkaisun ja muun operoinnin hallintatehtävien määrää, tehden arkkitehtuurista organisaatiollisen haasteen. Itsenäiset palvelut tuovat myös uusia tietoturvahaasteita.
Mikropalveluarkkitehtuuri on teknologiariippumaton. Palveluita toteutetaan usein korkean tason moderneilla ohjelmointikielillä, ja niitä operoidaan käyttäen kevyitä virtualisointi- ja hallintaratkaisuja. Palveluiden toteutustekniikan sijasta yhtenäisen kielen muodostavat viestintäteknologia ja arkkitehtuuri. Suosittuihin viestintäratkaisuihin kuuluvat REST-periaatteet, etäproseduurikutsujärjestelmät, viestijonot ja GraphQL-kyselykieli.
Sisäisen viestinnän rooli järjestelmän runkona tekee siitä tärkeän osan tietoturvaa. Ulkoisen ja sisäisen viestinnän toimiessa mahdollisesti samalla teknologialla ja periaatteella, tietosisältöjen ja ympäristöjen hallinnan merkitys korostuu. Mikropalveluiden itsenäinen viestinnän hoitaminen merkitsee myös, että jokaisen palvelun on tärkeää validoida pyyntösanomat, torjua injektiohyökkäyksiä ja hallita versiointia.
Kolmannen osapuolen riippuvuudet ovat tyypillisiä ohjelmointiympäristöissä, joita mikropalveluissa käytetään, ja niissä saatavilla olevat paketinhallintajärjestelmät tekevät riippuvuuksien asentamisesta helppoa. Näiden riippuvuuksien eli pakettien mukaanotto ohjelmistoon tuo uusia tietoturvahaasteita. Näillä avoimen lähdekoodin ilmaisilla paketeilla ei ole virhevastuuta, ylläpitolupauksia tai muitakaan takuita. Paketeilla on usein useampia kerroksia omia riippuvuuksia, ja täten tuntemattoman lähdekoodin määrä on suuri.
Pakettien käyttäminen nopeuttaa kehitystä ja parhaillaan parantaa laatua, mutta on tärkeää evaluoida pakettien laatua, suosiota ja ylläpidon aktiivisuutta. Triviaaleja paketteja, eli paketteja, joiden toteuttaminen itse veisi minuutteja, on syytä välttää. Mikropalveluiden itsenäisyys tuottaa paljon toistuvia riippuvuuksia ja konfiguraatiota.
Konfiguraatiossa riskeinä on inhimilliset virheet, turvattomat oletustoiminnallisuudet ja puutteellinen konfiguraation koventaminen. Oletustoiminnallisuuksissa esimerkiksi salasanat voivat olla heikkoja ja jopa internetissä julkisesti saatavilla olevia. Inhimillisen virheen todennäköisyys kasvaa toiston myötä. Konfiguraatiota on syytä hallita kuten lähdekoodia, jolloin sitä voidaan katselmoida, kommentoida ja versioida. Tällöin ongelmat ovat helposti toistettavia ja virheitä ei päädy niin helposti kriittisiin ympäristöihin asti.
Mikropalveluarkkitehtuuri, ja täten myös sen tietoturva, ovat pitkälti organisaatiollisia haasteita. Hyvän pohjan organisoitumiselle luo DevOps-periaatteet eli kehitystyön ja ohjelmiston operoinnin yhdistäminen ja sen jatkomuoto DevSecOps, jossa myös tietoturva otetaan osaksi kehitystä. Tietoturvan evaluointia on syytä pyrkiä automatisoimaan ja tietoturvavastuu on käytännöllistä jakaa kehitystiimeille muun kehitystyön tapaan. Modernit tekniset ratkaisut kuten kontitusjärjestelmät ja pilvipalvelut helpottavat järjestelmän hallintaa. Tällöin organisaatiokulttuurin ollessa kunnossa, mikropalveluarkkitehtuuriin siirtyminen parhaillaan parantaa tietoturvaa.
Mikropalveluarkkitehtuuri on teknologiariippumaton. Palveluita toteutetaan usein korkean tason moderneilla ohjelmointikielillä, ja niitä operoidaan käyttäen kevyitä virtualisointi- ja hallintaratkaisuja. Palveluiden toteutustekniikan sijasta yhtenäisen kielen muodostavat viestintäteknologia ja arkkitehtuuri. Suosittuihin viestintäratkaisuihin kuuluvat REST-periaatteet, etäproseduurikutsujärjestelmät, viestijonot ja GraphQL-kyselykieli.
Sisäisen viestinnän rooli järjestelmän runkona tekee siitä tärkeän osan tietoturvaa. Ulkoisen ja sisäisen viestinnän toimiessa mahdollisesti samalla teknologialla ja periaatteella, tietosisältöjen ja ympäristöjen hallinnan merkitys korostuu. Mikropalveluiden itsenäinen viestinnän hoitaminen merkitsee myös, että jokaisen palvelun on tärkeää validoida pyyntösanomat, torjua injektiohyökkäyksiä ja hallita versiointia.
Kolmannen osapuolen riippuvuudet ovat tyypillisiä ohjelmointiympäristöissä, joita mikropalveluissa käytetään, ja niissä saatavilla olevat paketinhallintajärjestelmät tekevät riippuvuuksien asentamisesta helppoa. Näiden riippuvuuksien eli pakettien mukaanotto ohjelmistoon tuo uusia tietoturvahaasteita. Näillä avoimen lähdekoodin ilmaisilla paketeilla ei ole virhevastuuta, ylläpitolupauksia tai muitakaan takuita. Paketeilla on usein useampia kerroksia omia riippuvuuksia, ja täten tuntemattoman lähdekoodin määrä on suuri.
Pakettien käyttäminen nopeuttaa kehitystä ja parhaillaan parantaa laatua, mutta on tärkeää evaluoida pakettien laatua, suosiota ja ylläpidon aktiivisuutta. Triviaaleja paketteja, eli paketteja, joiden toteuttaminen itse veisi minuutteja, on syytä välttää. Mikropalveluiden itsenäisyys tuottaa paljon toistuvia riippuvuuksia ja konfiguraatiota.
Konfiguraatiossa riskeinä on inhimilliset virheet, turvattomat oletustoiminnallisuudet ja puutteellinen konfiguraation koventaminen. Oletustoiminnallisuuksissa esimerkiksi salasanat voivat olla heikkoja ja jopa internetissä julkisesti saatavilla olevia. Inhimillisen virheen todennäköisyys kasvaa toiston myötä. Konfiguraatiota on syytä hallita kuten lähdekoodia, jolloin sitä voidaan katselmoida, kommentoida ja versioida. Tällöin ongelmat ovat helposti toistettavia ja virheitä ei päädy niin helposti kriittisiin ympäristöihin asti.
Mikropalveluarkkitehtuuri, ja täten myös sen tietoturva, ovat pitkälti organisaatiollisia haasteita. Hyvän pohjan organisoitumiselle luo DevOps-periaatteet eli kehitystyön ja ohjelmiston operoinnin yhdistäminen ja sen jatkomuoto DevSecOps, jossa myös tietoturva otetaan osaksi kehitystä. Tietoturvan evaluointia on syytä pyrkiä automatisoimaan ja tietoturvavastuu on käytännöllistä jakaa kehitystiimeille muun kehitystyön tapaan. Modernit tekniset ratkaisut kuten kontitusjärjestelmät ja pilvipalvelut helpottavat järjestelmän hallintaa. Tällöin organisaatiokulttuurin ollessa kunnossa, mikropalveluarkkitehtuuriin siirtyminen parhaillaan parantaa tietoturvaa.