Tekijän näkökulmasta flow’ssa on kaksi keskeistä tietoturvaan liittyvää elementtiä.
- Käytettävät yhteydet (connections)
- API-kutsuissa käytettävät salaisuudet/avaimet
Huolimattomasti toteutettuna riskinä on, että tunnuksellasi/avaimellasi tehdään jotain tietämättäsi. Pahimmillaan jossain muussa kontekstissa kuin jakamassasi flow’ssa.
Mikäli teet flow’n vain omaan käyttöösi, ovat riskit pienet. Mutta jos flow’ta käyttää (saatika muokkaa) myös muut, ovat riskit olemassa.
Mutta ei tämä niin vaikeaa ole. Katsotaan.
Yhteydet (Connection)
Yhteyksien käyttö on turvallista, kunhan vain hieman keskittyy siihen mitä on tekemässä. Alla haetaan SharePointin Get items -toiminnolla listan kaikki rivit. Tämä tehdään minun tunnuksillani luodulla yhteydellä.

Olen luonut itse yhteyden, eikä antamaani salasanaan pääse kukaan käsiksi.
Flow’n (ja sen yhteyksien) jakaminen
Mitä tapahtuu kun jaan flow’n kollegalle?

Kollega saa käyttöönsä yhteyteni jaetun flow’n sisällä. Hän voi muokata flow’ta esimerkiksi siten, että se hakee käyttäjätunnuksellani rivejä joltain toiselta SharePoint-listalta. Listalta, johon hänellä ei ole pääsyä.
Hän ei kuitenkaan voi luoda uutta flow’ta ja käyttää yhteyttäni siinä.
Ole siis tarkkana millä tunnuksilla luot yhteyksiä, mikäli annat flow’hun muokkausoikeuksia muille.
Kenen yhteydellä (=tunnuksella) flow’n toiminnot oikeasti suoritetaan?
Toinen miinaa piilee siinä, kenen yhteydellä flow’n toiminto loppujen lopuksi suoritetaan.
- Ajastetun flow’n toiminnot suoritetaan aina yhteydellä, joka toimintoon on alunperin määritelty
- Power Appsista / flow’n painikkeella käynnistetyn flow’n toiminnot suoritetaan aina käynnistäjän yhteyksillä (eli hänen omilla tunnuksillaan)
Mutta millä tunnuksilla suoritetaan flow, joka käynnistetään SharePoint-listan riviltä?
Tämä selviää avaamalla flow’n Run only users -määritykset.

Täällä määritellään yhteyskohtaisesti, käytetäänkö flow’n luojan määrittelemää yhteyttä, vaiko flow’n käynnistäneen käyttäjän omaa yhteyttä. Oletuksena käytetään flow’ssa määriteltyjä yhteyksiä.

Vaihdetaan flow käyttämään käyttäjän omia yhteyksiä (provided by run-only user).

Joissain tilanteissa on järkevää sallia käyttäjän suorittaa toimintoja muulla kuin omalla yhteydellään. Mutta ei todellakaan aina.
Flow’ssa, joka käynnistyy Dataversen riviä muokkaamalla, voi määritellä toimintokohtaisesti suoritetaanko sitä määritellyllä yhteydellä, vaiko käynnistäjän omalla yhteydellä (Use invoker’s connection).

Sama peli jatkuu esimerkiksi toisesta flow’sta kutsuttavien flow’den (child flow) kanssa.
Pidä siis aina mielessä, kenen yhteyksillä flow’n toimintoja tullaan lopulta ajamaan.
Salaisuudet (Secrets)
Yhteyksien kanssa ollaan kohtuullisen turvallisella maaperällä. Muuttuuko tilanne kun teemme HTTP-toiminolla REST API -kutsuja?
Viime viikon jutussa haimme flow’lla Power BI:n REST API:lla työntekijöiden tuntisaldoja. Tarvimme tunnisteen (token), joka haetaan HTTP-toiminnolla. Käyttämämme Service Principalin salaisuus (Secret) näkyy kuitenkin selkokielisenä toiminnossa.
Ei hyvä.

Suojatut arvot (Secure Inputs ja Secure Outputs)
Suoritushistoriasta nämä arkaluonteiset tiedot saa piilotettua avaamalla toiminnon asetukset (Settings)

ja asettamalla Secure Inputs -ominaisuuden päälle (aseta tarvittaessa päälle myös Secure Outputs).

Toimintoon ilmestyy lukon kuva.

Eikä flow’n suoritushistoriasta pääse kaivamaan salaisuutta itselleen.

Mutta tämä ei tietenkään riitä. Salaisuus on edelleen kaikkien flow’n muokkaajien nähtävissä ja kopioitavissa omaan käyttöön.
Key Vault
Ratkaistaan ongelma luomalla Azureen Key Vault ja tallentamalla käytettävä avain sinne. Key Vault on juurikin erilaisten salaisuuksien turvalliseen säilyttämiseen tarkoitettu palvelu.

Luonti on suoraviivaista.

Luonnin jälkeen lisätään flow’ssa tarvittava salaisuus. Valitaan Secrets.

Ja Add secret. Tallennetaan PowerBIService nimisen Service Principalin salaisuus.

Key Vaultin käyttö flow’ssa
Nyt käytetty salaisuus on turvassa. Miten siihen pääsee käsiksi flow’ssa? No tietenkin Key Vaultin Get Secret -yhdistimellä.

Valitaan käytettävä Key Vault ja poimitaan salaisuuksien joukosta se oikea (PowerBIService).

Huomaa, että yhteyden luojalla tulee olla oikeus käyttää kyseistä Key Vaultia.
Näin haemme salaisuuden Key Vaultista ja käytämme sitä HTTP-kutsussa.

Salaisuus on vielä muokkaajien nähtävillä Key Vault -toiminnossa.

Asetetaan Get Secret -toiminnon Secure Outputs -ominaisuus päälle. Samalla voimme ottaa Secure Inputs -toiminnon pois päältä HTTP-toiminnolta. Flow osaa automaattisesti piilottaa kaikki kohdat, joissa käytetään jonkin toiminnon Secure Outputs arvoja.
Valmista!

Muista että myös Key Vault -toiminto käyttää yhteyttä. Joka jaetaan flow’n mukana flow’n muille omistajille. Jotka voivat yhteydelläsi hakea Key Vaultista toisia avaimia…
Flow’n omistajat voivat luonnollisesti muokata flow’ta. He siis voivat ottaa Secure Inputs ja Secure Outputs -asetukset pois päältä ja odottaa flow’n seuraavaa suoritusta. Jonka jälkeen he näkevät kaikki salaisuudet selkokielisenä.
Onkin syytä olla tarkkana, keillä kaikille antaa muokkausoikeudet flow’hun. Mikäli annat, älä pidä flow’ssa yhteyksiä, jotka on luotu omalla tunnuksellasi.