Blogi

Miten API turvataan?

Kirjoittanut Ari Lappalainen | Security Specialist | 25.11.2019 22:00

APIt voivat nopeuttaa ja jouhevoittaa asiointia vaikkapa hammaslääkäripalveluita varatessa. Samalla kuitenkin saatetaan käsitellä henkilötietoja, jotka tulee suojata. Lue blogistamme, miten API turvataan.

Edellisessä kirjoituksessamme annoimme käytännön esimerkin API-rajapintojen (Application Programming Interface, ohjelmointirajapinta) riskeistä ja uhkista Hammaslääkärin ajanvaraus -esimerkin kautta. Esimerkki on oikeasta elämästä, jossa sähköisesti tehty muuttoilmoitus jäi ”byrokratian rattaisiin” viikoiksi, eikä hammaslääkäriajan varaaminen uudessa kunnassa onnistunut tästä syystä - vaikka hammaskipu olikin kova! APIn käyttö olisi nopeuttanut muuttoilmoituksen tietojen välitystä rekisteristä uuteen kuntaan, ja mahdollistanut hammaslääkärin ajanvarauksen nopeasti.

Seuraavassa kirjoituksessa käytiin läpi APIen tietoturvariskejä. Tässä kirjoituksessa esitellään, miten API-rajapintoja voi turvata. Käytämme edelleen samaa Hammaslääkärin ajanvaraus- esimerkkiä. 

Katsotaan aluksi Hammaslääkärin ajanvarausprosessia potilaan ja järjestelmien näkökulmasta.

Saadakseen ajan, potilas menee hammaslääkärin sivustolle, ja kirjautuu ajanvarauspalveluun. Kirjauduttuaan palveluun potilas näkee hammaslääkäritietonsa, jotka on noudettu SoTe-toimijoiden yhteisestä tietokannasta ja rajattu niin, että potilas näkee vain omat tietonsa.

Potilas siirtyy ajanvaraussivulle katsomaan vapaita aikoja, ja varaamaan itselleen sopivimman vapaan ajan. Kun sopiva aika löytyy, hän varmistaa sen ja kirjautuu ulos palvelusta. Tätä havainnollistetaan alla olevassa kuvassa.

 

Potilaan huomaamatta taustalla tapahtuu erilaisia varmentavia ja turvaavia prosesseja, jotka ovat oleellisia asioinnin turvaamiseksi. Teknisesti APIn turvaaminen tehdään erillisillä komponenteilla, jotka ovat IAM, API-hallinta ja API Gateway. Näitä havainnollistetaan seuraavassa kuvassa:

 

Kun potilas kirjautuu tietokoneeltaan palveluun, kirjautuminen tehdään itse asiassa IAM (Identity and Access Management, Identiteetin- ja pääsynhallinta) -palvelun välityksellä. IAM suorittaa vahvan tunnistamisen, jonka kautta potilas kirjautuu turvallisesti palveluun verkkopankkitunnisteilla tai mobiilivarmenteella.

Sekä potilaalla että palvelua tarjoavalla Hammaslääkärillä tulee olla omat käyttäjäroolinsa IAM-palvelussa ja he saavat sitä kautta roolinsa mukaiset toiminnot ja valtuudet niihin sekä ajanvarauspalvelussa että palvelua tarjoavassa API-rajapinnassa. Potilas saa oikeudet ajanvarauksiin tietyllä alueella tai tietyille palveluntarjoajille, ja palveluntarjoaja pääsee näyttämään omat varaustietonsa – suodatettuna niin, että potilas näkee vain ne palvelut ja ajat, joihin potilaalla on oikeus itse varata aikoja. IAM on keskeinen osa APIen turvallisuutta, ja IAM roolien määrittely vaatii huolellisuutta.

Potilas näkee sisäänkirjautumisen jälkeen palvelusivun, ja taustalla API-hallinta -komponentti tarkistaa IAM-palvelun antaman käyttövaltuuden sekä hallinnoi sen mukaisin valtuuksin palvelun sisäisiä prosesseja ja pääsyä niihin, samalla kun potilas tarkastelee tietojaan ja varaa aikaa. Palvelu koostuu usein mikropalveluista, jotka tekevät kukin omaa rajattua tehtäväänsä, ja kommunikoivat asiointiprosessille omien APIensa kautta. API-hallinta hallinnoi mikropalveluita ja määrittelee, että käytettävistä mikropalvelu-komponenteista on käytössä uusimmat ja oikeat versiot. Kullakin mikropalvelun API-rajapinnalla voi olla omia säännöstöjään, jotka määrittävät APIn toimintaa kuten reititystä, sanomamuunnoksia ja toiminnasta kerättävää analytiikkaa ja seurantaa. API-hallinta turvaa siis ne mikropalvelut, joiden kommunikoinnin tuloksena potilas näkee ajanvarausprosessin.

API Gateway (API-portti, ”yhdyskäytävä”) on palvelun tekninen kerros, jossa tapahtuu API-rajapintojen ajoaikainen suoritus. Gateway toteuttaa tekniset kovennukset ja estot (esim. kolmansien osapuolien sovellusten käytön estäminen) sekä APIen välisten, kuin myös APIen ja komponenttien välisen viestinnän eheyden turvaamiseksi. Se seuraa käyttöä, salaa viestintää ja mahdollistaa uhkien tunnistamisen ja torjumisen.

Tunnistautumisen turvaksi API-hallintaan voidaan lisätä OpenID connect- mallin mukainen autentikointi, joka lisää menettelyyn vahvan tunnistautumisen käyttämällä vahvennettuja allekirjoitus- ja salausmenetelmiä.

Tietoturvan kannalta on olennaista, että kaikki osat monitoroivat toimintaa, ja tuottavat lokitietoa, joka mahdollistaa uhkien havaitsemisen ja tiedonkeruun niistä. Lokien hallintaan kannattaakin satsata, ja niillä tulisi olla oma ympäristönsä omine käyttövaltuushallintoineen ja tallennesääntöineen. Lokivaranto on hyvä myös kryptata, jotta murtautuja ei pääse piilottamaan murtautumista peukaloimalla lokitietoa.

Paluu teknojargonista hammaslääkärin tuoliin

Esimerkin mukaisessa – varsin teknisesti esitetyssä – hammaslääkärin ajanvarauspalvelussa liikkuu paljon henkilö- ja terveystietoa, joita on tärkeää turvata. Potilastietojärjestelmissä on äärimmäisen tärkeää, että palvelusta on tehty mahdollisimman turvallinen, mutta samalla myös helppokäyttöinen.

Tiedon turvaamisessa olennaista on käyttää vahvaa tunnistautumista ja huolella suunniteltua käyttövaltuushallintaa. Sekä tiedon itsensä, että sen siirron tulee olla suojattua. Lokitus, eli käytönseuranta takaa sen, että tiedon eheys voidaan varmistaa, ja väärinkäyttöyritykset tunnistaa.

Kun kaikki palvelun taustalla olevat osat ”rokkaavat”, voi potilas varata hammaslääkäriajan huoletta ja turvallisin mielin, ilman että hänen tietonsa ovat vaarassa, ja pelkäämättä, että pahantahtoinen hyökkääjä on muuttanut Hammaslääkäriasemalle näkyvän ajanvaraustiedon tyystin vääräksi.