BYOD.. Wel of niet?

Bring your own device, als je daar 15 jaar geleden over begon zou dat absoluut ondenkbaar geweest zijn. Het idee dat een apparaat aangesloten wordt op je bedrijfsnetwerk waar je geen controle en geen zicht op hebt zal nog menig beheerder doen gruwelen, ik kom in ieder geval nog voldoende pentesters tegen die hier grote problemen mee hebben.

Maar is het nog wel zo’n groot probleem? En wat zijn dan de overwegingen om te bepalen of je BYOD toe wil staan of niet, en welke maatregelen zijn er nodig als je die weg dan in slaat?

Oude mac met rugzak
er zijn grenzen..

Wat verstaan we onder BYOD

BYOD komt veel vaker voor dan we denken en strikt gezien is het waarschijnlijk zelfs zo dat we in bijna 100% van alle IT omgevingen tot op zekere hoogte te maken hebben met BYOD situaties.

In het kort is Bring Your Own Device het best te omschrijven als het uitvoeren van zakelijke activiteiten op een aparaat (laptop, telefoon, pc, fax) dat niet onder beheer staat van de IT afdeling van je organisatie.

De meest duidelijke situatie is natuurlijk wanneer een medewerker zijn of haar eigen laptop gebruikt om op te werken, veelal omdat ze dat gemakkelijker vinden of omdat dat systeem beter/sneller is dan wat ze van hun werkgever krijgen.

Een ander scenario is dat de gebruiker een eigen telefoon gebruikt. Wederom omdat deze beter is dan de zakelijke telefoon of domweg omdat er geen telefoon verstrekt wordt en er toch contact met de collega’s, leveranciers of klanten nodig is anders dan alleen teams meetings.

Daarnaast kan een medewerker ook nog vanaf een privé pc of laptop in de avonduren nog even snel een mail beantwoorden (webmail) of zelfs op vakantie even in een internetcafé inloggen op een van de systemen daar (de horror.. niet doen 🙁 ).

Er zijn nog wel meer grensgevallen te bedenken, maar we houden het hier even bij. Voor de rest van dit artikel focussen we ons op de werkplek in de vorm van de PC of de laptop. Mobiele telefoons is een post op zichzelf waard, dus die bewaren we nog even voor later ;).

Security

Volledige segmentatie van alle data, alle netwerken en alle devices die met elkaar in aanraking komen zou de meest veilige situatie opleveren, en meteen ook de meest onwerkbare. Er moet dus gekeken worden naar wat er allemaal mogelijk is op dit vlak om te bepalen of een BYOD oplossing de moeite waard is.

Aan technische mogelijkheden op dit vlak geen gebrek, zeker binnen het Microsoft 365 ecosysteem is er inmiddels meer dan voldoende mogelijk om de benodigde segmentatie zelf voor een groot deel te automatiseren. Met labeling van data (dataclassificatie – Microsoft Purview) heb je de segmentatie van je data op orde. Door je endpoints allemaal netjes in MDM (Microsoft Endpoint Manager) te hangen en zake als EDR en AIR (Automated Investigation and Remidiation) in te regelen hou je zicht op wat er met die data gebeurt en kan je een deel van je incident response automatiseren.

De tools zijn er dus wel, maar hoe pakken we dat dan aan, en wat voor impact heeft dit op de wel/geen BYOD discussie?

Een lange adem

Soms kosten dingen gewoon tijd..

Het inregelen van alle technische maatregelen zoals eerder omschreven (en dat is nog maar een kleine selectie) is een proces van lange adem, veel werk en een hoop keuzes.

Allereerst zal er iets van beleid gerealiseerd moeten worden. De configuratie keuzes die gemaakt moeten worden kunnen deels op de baselines van Microsoft bepaald worden. Echter, de verfijning en aansluiting op je eigen organisatie is van groot belang, niet op de laatste plaats voor de werkbaarheid van de oplossing.

Je beleid bijvoorbeeld moet voorzien in het model waarmee je dataclassificatie toe gaat passen. Ben je bijvoorbeeld ISO27001 gecertificeerd? Dan heb je een dergelijk model in je beleid staan, maar in veel andere gevallen zal dit ontbreken.

Ook voor het onder beheer brengen van je endpoints is mogelijk nog een hele weg te gaan, zeker ook omdat je misschien wel helemaal schoon wil beginnen zodat je zeker weet dat alle devices direct goed in beheer genomen worden en compliant zijn aan het beleid. (Full disk encryptie? Mag een gebruiker zelf local admin zijn op zijn systeem? (een hele discussie op zichzelf)).

Herinner je je dat dataclassificatie beleid nog? Nu we bepaald hebben wat de bedoeling is moeten we dat ook nog zien toe te passen op de berg data die je al hebt.. Het is gemakkelijk om te zeggen dat je alle bestaande data als vertrouwelijk markeert en de gebruikers labels mogen wijzigen als dat nodig is, maar hoeveel impact heeft dat op de werkwijze van de gebruikers? En hoeveel tijd gaat ze dat kosten?

Vragen en uitdagingen genoeg dus, en we zijn pas bij het voortraject.

en dan?

Voorbereidingen klaar? Go!

Alle voorbereidingen zijn getroffen, het dataclassificatie beleid is ten uitvoering gebracht, alle systemen zijn onder beheer. Je nieuwe medewerker vraagt of hij zijn eigen laptop mag gebruiken omdat de resolutie beter voor zijn ogen is.

Eindelijk zijn we dan bij de BYOD vraag aangekomen..

Er zijn nu twee routes, wanneer je er voor kiest om eigen hardware toe te staan (we hebben het even over laptops/pc’s) kan je stellen dat je dit alleen accepteert als de laptop opgenomen wordt in het MDM systeem. De hardware is dan wel nog in eigendom van de gebruiker, maar alles wat er op staat is onder regie van de werkgever. Als je vooraf afspraken maakt over bepaalde hardware eisen (TPM bijvoorbeeld) is er in deze route geen noemenswaardig verschil tussen hardware die de organisatie zelf koopt en hardware van de eindgebruiker.(voor dit verhaal dan).

De tweede route is het scenario waarbij de eindgebruiker niet wil dat zijn/haar laptop wordt opgenomen in het centrale MDM systeem. Over het algemeen vind ik dit een onwenselijke situatie en ik zou ik vragen hebben over waarom hij/zij dat dan niet zou willen. De voornaamste reden zal het privé gebruik van het apparaat zijn en de onwil om daar toegang toe te geven (begrijpelijk). Maar dat wil niet zeggen dat dit scenario niet toch voorkomt en er legitieme use-cases zijn.

Unmanaged BYOD

Deze tweede route brengt ons bij een unmanaged BYOD scenario. Als je de eerdere stappen gevolgd hebt, het beleid en de classificaties in orde zijn en je omgeving voorbereid is zijn er wel mogelijkheden op dit vlak.

Middels conditional acces policies kan er onderscheid gemaakt worden tussen welke systemen en data er benaderd mogen worden door de diverse clients die we kennen (managed, unmanaged, location based enzovoorts).

In het geval van een unmanaged device zou je nog kunnen toestaan dat de webmail gelezen wordt en eventueel ook nog dat documenten met een bepaalde classificatie in de web vorm bekenen en bewerkt kunnen worden. Het downloaden van de data, het installeren van applicaties en het inloggen in gevoelige SaaS systemen is uit den boze op een unmanaged systeem.

Mogelijkheden

Is er dan echt niets mogelijk in het kader van Bring Your Own Device? Zeker wel! Wil je de gebruikers toch grote vrijheid geven op hun eigen devices is er altijd nog de mogelijk om een centrale werkplek op de bouwen vanaf waar alsnog alles gedaan kan worden. Het downloaden van data naar je eigen (dus niet zakelijke, unmanaged) laptop kan nog steeds niet, maar eenmaal ingelogd op het centrale platform (zoals Azure Virtual Desktop, zie ook mijn “Virtual Walled Garden” post) kan je in die volledig beheerde omgeving alles doen wat je met een managed systeem ook zou kunnen.

Dit brengt me dan ook bij een van de (ik denk meest voorkomende) scenario’s waarbij je mogelijkerwijs met grotere aantallen “BYOD” devices in je omgeving te maken krijgt. Wanneer er op grote schaal extra krachten ingehuurd moeten worden voor kortere tijd kan je je afvragen of je hiervoor de nodige devices wil aanschaffen en klaar wil hebben liggen op de plank, of dat je ze misschien wil huren. Deze mensen werken mogelijk ook niet op je eigen kantoren, maar misschien wel exclusief vanuit thuis.

Allemaal factoren waar je verminderd grip op hebt, door deze devices ook niet toe te laten op je netwerk, maar de werkzaamheden gecontroleerd centraal uit te laten voeren hou je optimaal grip op je data en bied je toch de vrijheid om te werken met de tools die passen bij de situatie.

Het gebruikersgemak van Bring Your Own Device

Laptop op een tuintafel
Een werkplek moet je eigenlijk kunnen maken zoals deze bij jou past..

Bring Your Own Device mogelijkheden spreken erg aan op het vlak van gebruikersgemak bij je eindgebruikers. Als ze kunnen werken met systemen die ze kennen, in situaties die bij ze passen, zal er minder snel buiten de zakelijke IT omgeving heen gewerkt worden.

Eerder schreef ik op dit vlak ook al wat over Security Awareness, en in het stuk over de Virtual Walled Garden ging ik in op de mogelijke oplossing die ook op dit vraagstuk pas. Maar ik kan ook niet genoeg benadrukken dat de bewustwording van de gebruikers, en het faciliteren van een comfortabele omgeving waar je als IT verantwoordelijke grip op hebt, cruciaal zijn voor de veiligheid van je data/organisatie.

In het verlengde daarvan zijn we er vanuit security oogpunt dus bij gebaat om een omgeving aan te bieden met net voldoende vrijheden om te voorkomen dat gebruikers dingen gaan doen die we niet willen, maar met voldoende grip zodat we precies weten wat er gebeurt.

Overigens is er mogelijk ook een heel ander probleem dan een inrichtingsvraagstuk als je veel gebruikers hebt die hun eigen spullen willen gebruiken. Het is (zeker ook gezien de situatie op de arbeidsmarkt) aan te raden om na te denken of die goedkope zakelijke laptop nog wel past bij de beleving die je je medewerkers wil bieden.

Microsoft heeft natuurlijk een erg nette Surface lijn beschikbaar, maar je hoeft niet direct zo ver te gaan (alhoewel ze verhoudingsgewijs niet een zo heel duur zijn ten opzichte van de Dell, of HP alternatieven.). Het is in ieder geval wel goed om eens na te denken bij de hardware die je standaard voert, ook hier speelt de beleving van de gebruiker weer een grote rol.

Conclusie?

Of BYOD bij je organisatie/omgeving past is sterk afhankelijk van het soort organisatie dat je bent en het soort data waar je mee werkt. Als de data zeer gevoelig of zeer waardevol is zijn oplossingen waarbij je openingen bied om de data te extracten zonder dat je daar zicht, of controle, over hebt onwenselijk.

Maar zelfs in die scenario’s zijn er ook rollen in je organisatie waarbij meer vrijheid misschien wel passend is. Als je daar dan de juiste voorwaarden voor schept zoals, segmentatie, conditional acces en de vele andere mogelijkheden in dat vlak, is er misschien toch best wel wat mogelijk.

Ook met een centrale werkplek die je optioneel aanbied voor de mensen die dan toch met hun eigen device willen of moeten werken is er best wel ruimte te creëren voor dergelijke situaties.

Mijn advies zou in ieder geval zijn om naast het belang van het beschermen van je omgeving ook goed te kijken naar de belevenis van je gebruikers. Probeer te voorkomen dat ze het idee hebben hun werk niet goed te kunnen doen met de middelen die je ze bied. In deze gevallen zullen ze zelf op zoek gaan naar oplossingen en werkwijzen, en die zijn vrijwel zeker niet in lijn met het beleid dat je hebt vastgesteld.

Boekenkast
Beleid hebben we vaak kasten vol.. Nu de uitvoering nog..

Security awareness

Iedereen die voor een organisatie van een beetje formaat werkt zal inmiddels wel bekend zijn met Security Awareness trainingen. Wat is nou een datalek, wat moet ik doen bij een datalek en hoe houd ik mijn werkomgeving en daarmee de data van je werkgever en haar klanten zo veilig mogelijk. Soms voelt het een beetje als die verplichte hoepel waar je jaarlijks doorheen moet springen. Maar toch is het echt de moeite waard om aandacht te besteden aan wat er allemaal voorbij komt bij een dergelijke training.

De ontwikkelingen

Het aanbod in de markt voor de verschillende trainingen op dit gebied is gelukkig flink gegroeid en daarmee ook zeker in kwaliteit verbeterd. Een meer interactieve vorm van trainen begint gelukkig ook meer en meer de norm te worden. Echter, wat mogelijk een nog veel belangrijker aspect is dat de trainingensteeds vaker geplot worden op de deelnemer als mens, en niet zo zeer alleen de deelnemers als medewerker.

Dat laatste is niet geheel onbelangrijk. Met de verschuiving van centrale werkplekken zoals Citrix en Remote Desktop omgevingen naar toch weer meer werken op de endpoints zelf (laptops telefoons) wordt het ook moeilijker om je bedrijfsdata veilig op te bergen in een centrale omgeving met een hoge muur er omheen. Er is natuurlijk van alles technisch te realiseren om de potentieel onwenselijke toegang tot deze data en systemen te voorkomen, maar feit is wel dat de gebruikers buiten het zicht van je eigen infrastructuur op pad gaan met hun devices en jouw data.

Combinatieslot

Alles op slot of totale vrijheid?

De waarheid ligt uiteraard in het midden en het antwoord is sterk afhankelijk van de data waarmee gewerkt wordt. In het geval van privacy gevoelige data zal je eerder geneigd zijn om de zaak goed op slot te zetten terwijl er andere scenario’s denkbaar zijn waarbij meer vrijheid op zijn plaats is.

Toch wil je in alle gevallen wel grip houden op je endpoints en alles wat daar op staat. Effectief resulteert dat er in dat in de gevallen dat je meer vrijheid geeft je ook meer monitoring zal toepassen om ten alle tijden te weten welke applicaties er gebruikt worden, welke datastromen er van en naar deze endpoints gaan, welke processen er allemaal draaien en hoe dit alles met elkaar samenhangt.

Alhoewel alles op slot zetten de veiligste optie lijkt heeft het wel als gevolg dat de kans dat de gebruikers om de officiele IT systemen heen gaan werken aanzienlijk toeneemt. Als de gebruiker vindt dat hij/zij niet goed kan werken met de aangeboden toolset zal er gezocht worden naar alternatieve werkwijzen die mogelijk buiten het zichtveld van de security en IT afdelingen liggen, met alle risico’s van dien.

Zoals met alles is het dus zaak om een balans te vinden en dat valt of staat met een goed beeld van de risico bereidheid van een organisatie. Die zal anders zijn voor een ziekenhuis dan bij een loodgieter, maar de ene loodgieter is ook de andere weer niet.

Sidenote: Technische uitdagingen bij totale vrijheid

Bij een groot deel van de organisaties zie je dat er een consolidatie plaatsvind van security componenten in het Microsoft framework. Het verwerken van deze data vergt verregaande automatisering en veel kennis, zeker ook omdat enkel het verwerken niet voldoende is, er moet ook nog geacteerd worden op de bevindingen. (Bij voorkeur automatisch). Het consolideren van deze componenten in één omgeving maakt de implementatie overzichtelijker en sneller en je kan bovendien leunen op de expertise van een gigant als Microsoft. Het voordeel is dat het vrijwel onzichtbaar is voor de eindgebruiker en zelfs voor een groot deel van de beheerders, maar het risico is dat de effort om dit goed te implementeren vaak onderschat wordt.

Gevolgen voor security awareness

Hebben de bovenstaande keuzes dan impact op de security awareness training? Voor sommige feitelijke componenten wel uiteraard, je kan lastig in een training verkondigen dat de gebruiker zelf geen applicaties mag installeren terwijl dat wel zo is. Maar in zo goed als alle andere onderdelen van de security awareness training zou het niet al te veel uit moeten maken

Security awareness zou moeten gaan om het activeren van bewustzijn en gedragsveranderingen. En dat gaat verder dan alleen de training zelf natuurlijk. Het moet normaal worden om elkaar ook aan te spreken op zaken die niet door de beugel kunnen, dus ook jij kan die projectengineer die “tijdelijk” even het wachtwoord Welkom01 invult daar gewoon op aanspreken.

Elkaar aanspreken is dus geen synoniem voor “de ander voor de bus gooien” en dat is misschien ook nog iets waar we met zijn allen in het security domein nog wat over kunnen leren. Tenzij iemand een “veelpleger” wordt moeten we er vanuit gaan dat security nou eenmaal niet top-of-mind is voor iedereen. Daarnaast heeft harder schreeuwen maar zelden tot een oplossing geleid (ik hoop dat mijn kinderen dat ooit nog leren).

Bomen in een bos
De gebruikers zien door de bomen het bos niet meer

Mensen met een technische achtergrond zijn geneigd om te vergeten dat niet iedereen dezelfde technische basiskennis heeft. We grijpen dan ook te vaak naar het uitleggen van de technische maatregelen. Zaken als “controleer de URL in de mail goed voor je klikt” terwijl het overgrote deel van de bevolking geen idee heeft van wat een URL nu eigenlijk is, laat staan hoe je een Office365 safelink kan controleren.

Focus op gedragsverandering

Het is goed om mensen bekend te maken met termen zoals Phishing, Spam, Malware, Cryptolocker en al dat soort zaken, maar voornamelijk om context te bieden voor alle berichten die ze daarover tegenwoordig voorbij zien komen.

Het doel van security awareness zou niet zo zeer het trainen van technische handelingen moeten zijn. Maar een gezond wantrouwen tegenover zaken die je zelf niet onder controle hebt. En doe dat in een context die mensen kennen of waar ze meer affiniteit mee hebben. Een voorbeeld:

Als iemand ergens snoep op de grond vind hebben we allemaal geleerd dat we dat beter niet op kunnen eten. Dit leren we al op jonge leeftijd en gaan zelfs nog een stapje verder, als je snoep aangeboden krijgt van een vreemde leren we onze kinderen dat je dat moet weigeren.

Hoe is dit anders dan het vinden van een USB stick op de parkeerplaats? Je zal er zelf niet ziek van worden of worden gedrogeerd, maar je laptop wel..

Snoepgoed
Snoep, toch?

Door te linken aan allerlei zaken die al vanaf onze jeugd in ons brein geprint zijn kunnen we security zaken die van origine puur technisch zijn aanhaken op ons instinct wat we al jaren gekweekt hebben.

Een ander makkelijk voorbeeld is vreemden binnenlaten op het kantoor. We zouden thuis iemand die bij de deur staat die we niet kennen nooit zomaar binnen laten, maar toch vinden we het op kantoor vrij normaal om iedereen maar gewoon mee door de deur te laten lopen. Er heerst een soort van schaamte om toch even te vragen of die persoon er wel hoort.

Daarnaast moeten we ons aanleren dat we berichten die we ontvangen allereerst moeten toetsen op of we een dergelijk bericht wel verwachten en of het past bij de afzender. Een directeur die ineens een Engelse mail stuurt om geld over te maken terwijl hij dat anders nooit zou doen moet natuurlijk alarmbellen af laten gaan. Maar ook de mail van een “webshop” die ineens op je zakelijke adres binnen komt terwijl je daar zakelijk niets koopt moet wel wat te denken geven.

Conclusie

Ik heb de wijsheid niet in pacht en er zullen ongetwijfeld anderen zijn die hier een andere visie over hebben. Maar ik denk dat we het met zijn allen eens zijn dat te technische security awareness trainingen eerder een averechts effect hebben op de bewustwording. Gelukkig lijkt de markt voor dergelijke trainingen zich dat ook te realiseren. Wel zijn er kansen voor trainigen juist gericht op het IT personeel van een organisatie.

Met een focus op gedragsverandering en het aansluiten op zaken die mensen al kennen vanuit het dagelijkse leven die niet per se IT gerelateerd zijn kunnen we gebruik maken van het gezonde wantrouwen wat iedereen tot op zekere hoogte in zich heeft. IT is immers meer en meer verweven in het dagelijkse leven, en het bewustzijn van de risico’s die daarbij komen kijken behoren dan ook tot de basiskennis die iedereen zou moeten hebben.

Ik heb een game geschreven

Eigenlijk een hele tijd terug al, maar het was er nog niet echt van gekomen om daar hier wat over te schrijven. Nu met een klein beetje extra tijd is het wel aardig om eens wat inzage te geven over hoe ik het schrijven van een web-based spel nu eigenlijk aangepakt heb. Niet op de laatste plaats omdat ik daar 0 ervaring mee had, en als ik het kan dan kan jij het ook.

Het gaat hier om clickfarm.nl een simpele web game die uiteindelijk draait om het verzamelen van zo veel mogelijk geld met een zo goed mogelijk gebalanceerd en geautomatiseerd productie proces.

Clickfarm landbouw knop
Dit zou ik niet handmatig blijven doen 😉

Waarom heb ik een game geschreven?

Ik vroeg me af of ik mezelf iets helemaal nieuws kon leren, alhoewel ik in het verleden wat PHP geschreven heb in in mijn werk de nodige scripts schreef wilde ik graag weten of ik ook HTML, CSS en Javascript kon leren.

Wat begon met een knop die simpelweg een teller liet oplopen mondde uit in een volledig spel met meer dan 2.000 regels code (dat had vast efficiënter gekund). Ik heb veel geleerd over JavaScript en ook het nodige over HTML en CSS, maar daar ligt voor mij toch minder de focus.

Random clickfarm broncode
Random clikcfarm code (game geschreven)

Mijn doel was dus het leren van een nieuwe taal, en dit is de eerste keer geweest dat er voor mij ook echt wat geklikt heeft waarbij ik het gebruik van objecten, functions en al dergelijke zaken ook heb kunnen plaatsen. Alles wat ik hierna geschreven heb voelt aanzienlijk eenvoudiger omdat er blijkbaar wat op zijn plek gevallen is.

Hoe heb ik de game geschreven?

Excessief gebruik van Google en heel veel proberen. De aanpak was heel iteratief en ik heb niet vooraf een groot plan gemaakt over hoe de bouw er uit zou gaan zien, sterker nog, de meeste functionaliteit is on the fly bedacht terwijl ik het aan het schrijven was. In dat opzicht is het een klein wonder dat het spel zo goed werkt als dat het doet.

Verder heb ik zeker in de latere stadia van de ontwikkeling veel input gebruikt vanuit onder andere het forum op Tweakers.net om het nodige in balans te brengen.

Ik denk wel dat dit een mooi voorbeeld is van hoe je als je enige affiniteit hebt met scripting vrij eenvoudig je kennis steeds verder kan uitbreiden. Begin met een klein projectje en bouw daar op door, probeer niet meteen de lat te hoog te leggen en accepteer dat het een zeer iteratief proces gaat zijn.

Learn krijtbord

Wat is er van gekomen?

Los van dat ik er een hoop van geleerd heeft hebben een hoop mensen veel tijd van hun leven verloren met het spelen van het spel. Op de piek waren er 400+ gelijktijdige spelers met een paar duizend bezoekers per dag op de site. Ik heb nooit reclame op de site gehad, maar wel de mogelijkheid geboden om donaties te doen, en wonderwel ook daadwerkelijk voor een aardig bedrag aan donaties ontvangen (dat had ik niet verwacht).

Voor mezelf is het voornaamste doel bereikt, ik heb weer een nieuwe taal geleerd waar ik comfortabel mee aan de slag kan. De stap naar NodeJS is inmiddels ook gezet dus ook daar ben ik inmiddels de nodige kennis van op aan het doen.

Tot slot

Alhoewel ik niet uitsluit dat ik later nog een klein stukje verder schrijf aan het spel en mogelijk het een en ander zal moderniseren acht ik dit ook weer niet heel waarschijnlijk. Het is een mooi project geweest en ik heb er een hoop van geleerd, maar het verder onderhouden zou wel aardig wat tijd gaan kosten waar voor mijzelf eigenlijk niets meer tegenover staat.

De code van het spel is beschikbaar op Github, mocht iemand nog goede toevoegingen aanbieden via die route zal ik die waarschijnlijk nog wel implementeren.

GitHub – HermanRonk/Clickfarm: Clickfarm webgame

Azure function apps in combinatie met AFAS Profit

Als je wil proberen om zo min mogelijk eigen infrastructuur te gebruiken zonder dat dat meteen veel geld moet kosten zijn er talloze opties te bedenken. Een van die opties is Microsoft Azure. De eerste stap die je zal moeten zetten is gaan denken in de daadwerkelijke handelingen die er uitgevoerd moeten worden. Deze handelingen wil je vervolgens in logische blokken opdelen, met als voorwaarde dat deze blokken moeten onafhankelijk van elkaar kunnen functioneren. Vervolgens kan je per blok gaan kijken wat de beste manier is om de gewenste functionaliteit te realiseren.

Het “Probleem”

In dit voorbeeld gaan we voor nieuwe medewerkers in AFAS Profit een aantal velden vullen. Omwille van de eenvoud van het voorbeeld heb ik het gebruikte script even eenvoudig gehouden. Gezien het in Profit niet mogelijk is om logica toe te passen bij het automatisch vullen van velden hebben we een externe oplossing nodig om dit te doen. Het heeft mijn voorkeur om dit soort zaken met Powershell en de connectoren in Profit op te lossen. Voorheen gebruikte ik hiervoor altijd een van onze applicatieservers voor (om het script te draaien). We kunnen dit echter ook prima in Azure oplossen

De oplossing (Microsoft Azure)

Als je in Microsoft Azure scripts wil laten draaien die gebruik kunnen maken van web connectiviteit zijn de “Function Apps” een goede optie. Binnen dit systeem heb je bijvoorbeeld ook Web Proxies beschikbaar en die gaan we in een latere post gebruiken :). We gaan dus een Function App aanmaken waarbinnen we één of meerdere scripts op een tijdschema laten draaien. In dit voorbeeld gaan we een lijst ophalen van medewerkers die nog geen licenties toegekend gekregen hebben. Deze lijst met medewerkers krijgt vervolgens de juiste licenties toegekend op hun medewerkerkaart. Voor deze stappen heb je een actieve Azure Subscription nodig (je moet dus of in de trial zitten of een betaalmethode gekoppeld hebben). De kosten van het draaien van dit script (15 uur per dag) zijn 6 eurocent per maand (afhankelijk van de gebruikte opslag / data). Ik zou Azure altijd instellen op de Engelse taal gezien de vertalingen naar het Nederlands erg verwarrend kunnen zijn. Daarnaast zijn niet alle vertalingen correct.

Stappenplan (functie)

We starten op de Azure portal en kiezen daar voor het aanmaken van een nieuwe resource:
Azure portal "Create Resource"
In het volgende venster zoek je naar “Function app”:
Azure function app aanmaken
Je krijgt een nieuw menu te zien waar je een aantal instellingen in kan geven. De “App name” is voor dit stappenplan niet zo van belang. Mocht je later de Proxy functionaliteit wil gaan gebruiken wordt dit de URL waarop je de proxy kan benaderen. In ons geval moeten we een nieuwe resoursegroup aanmaken waar alle elementen voor deze functionaliteit gebundeld worden. als locatie kiezen we voor West Europe gezien die geografisch het dichtste bij onze AFAS Profit omgeving zal staan. De naam van de storagegroup is niet heel belangrijk in dit geval, als je het maar eenvoudig terug kan vinden. Uiteindelijk heb je dan grofweg het onderstaande. Als je nu op “Create” klikt wordt de Function App aangemaakt, dit kan ongeveer een minuut duren.
Na een minuutje wachten kan je de Function App openen en krijg je een overzicht zoals dit te zien:
Function app overzicht.
We kunnen nu daadwerkelijk de functie aan gaan maken die het script gaat draaien. We klikken hiervoor bij “Funtions” op het plusje om de wizzard te openen. Er zijn een groot aantal standaard functies beschikbaar, maar in ons geval willen we een custom function bouwen:
In het volgende venster zal je de beta talen aan moeten zetten. Powershell is nu nog in beta (al tijden), maar werkt prima. Om deze mogelijkheid te krijgen moet je deze switch even omzetten:
Vervolgens kan je de “Time Trigger” optie kiezen:
Azure function Time Trigger
In het volgende venster zal je de taal moeten kiezen (in ons geval PowerShell) en het schema moeten definiëren. Dit schema maakt gebruik van dezelfde notatie als CRON en is niet heel erg gemakkelijk leesbaar als je er niet veel mee werkt. Je kan hiervoor eventueel een generator gebruiken. In het voorbeeld hier onder draaien we het script ieder uur vanaf 7.00 in de ochtend tot 20.00 in de avond. (let wel op dat je je tijdzone goed ingesteld hebt).
Na het aanmaken van de functie krijg je een leeg venster te zien waar het script geplaatst kan worden. Je kan dit allemaal integreren met bijvoorbeeld Github (of andere repositories), maar dat gaat voor dit voorbeeld even te ver.

Het script

De laatste stap is het toevoegen van het script zelf. Ik ga niet al te veel in op de werking van het script, maar kort samengevat gebeurt er het volgende:
  • Roep een getconnector aan die een gefilterde lijst met gebruikers zonder licenties ophaalt.
  • Loop door deze lijst en voer de gewenste licentiecodes in bij de diverse users.
Om het voorbeeld een beetje overzichtelijk te houden staat hier onder een versimpelde versie van ons script. We gebruiken zelf een complexer script met een aantal randvoorwaarden om te bepalen welke licentie nodig is voor welke gebruiker.
begin {

    # define the access token for the AFAS service
    $token = '<token><version>1</version><data>***</data></token>'
    $encodedToken = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($token))
    $authValue = "AfasToken $encodedToken"
    $Headers = @{
        Authorization = $authValue
    }

    # Connect and retrieve the table
    $url = 'https://**/profitrestservices/connectors/***?skip=-1&take=-1'
    $records = ((Invoke-WebRequest -Uri $url -UseBasicParsing -Headers $Headers).content  | ConvertFrom-Json).Rows
}

process {
    # Specify update authorization
    $token = '<token><version>1</version><data>***</data></token>'
    $encodedToken = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($token))
    $authValue = "AfasToken $encodedToken"
    $Headers = @{
        Authorization = $authValue
    }
    $connectorname = "KnEmployee"
    
    # Process records 
    foreach ($record in $records) {
        $url = "https://***/profitrestservices/connectors/KnEmployee"

        Write-Host $record.profituser
        $medewerker = $record.profituser

        $messagecontent = '{"AfasEmployee": {"Element": {"@EmId": "' + $medewerker + '", "Fields": { "***": "02", "***": "01"}}}}'

        $results = ((Invoke-WebRequest -Uri $url -UseBasicParsing -ContentType 'application/json;charset=utf-8' -Method PUT -Headers $Headers -Body $messagecontent).content | ConvertFrom-Json)
        Write-Host $results
    }
}
Na het invoeren van het script kan je op “save en run” klikken en daarna zal het script volgens het voorgestelde schema draaien. Je kan eventuele fouten opsporen door de logging na te kijken, deze is voor de losse run direct onder in het scherm beschikbaar:
En later via het monitor menu:

Tot slot

Dit is natuurlijk maar een eenvoudig voorbeeld, maar je kan je voorstellen dat je op deze manier veel zaken kan automatiseren zonder dat je hier eigen infrastructuur voor nodig hebt. Het script wat ik gebruikt heb in dit voorbeeld is gemaakt samen met Jaap de Koning, lees ook eens zijn blog als je geïnteresseerd bent in automatisering. Laat even een berichtje achter als je meer wil weten over deze manier van automatiseren rondom AFAS Profit of het gebruik van Azure functions. De komende tijd zal ik meer in gaan op deze aanpak. Daarbij kijken we naar de veranderingen die nodig zijn in de manier van denken om goed gebruik te maken van cloud en hybride oplossingen.

Detron Open Script Night – Ronde 1

Als een van de Business Developers bij Detron IT Consultants mag ik samen met het als team altijd zoeken naar methoden om onze collega’s kennis te laten maken met nieuwe systemen en technieken. Maar soms moet je ook de aanpak van deze kennisdeling eens op de schop gooien om zo een andere groep mensen te bereiken of een hoger niveau te behalen. Zeker op het gebied van het schrijven van een script ten behoeve van automatisering zien we het niveau flink stijgen en moeten we de aanpak dus veranderen.

Zo gaan we na 2 jaar aan PowerShell bootcamps eens proberen om op een hele andere wijzen kennis te delen over niet alleen PowerShell, maar ook andere scripttalen waar we in onze dagelijkse werkzaamheden mee in aanraking komen. Het resultaat van wat berichten heen en weer tussen collega’s was dat we vanuit het Detron ICT Kenniscafé (communicatie middel en organisatie van een deel van onze kennissessies en trainingen en mijn hobby op het werk 😉 ) ook wel een Open Script Night konden houden. Hier kunnen collega’s of externe sprekers in 10-20 minuten een demo en toelichting geven van iets wat ze zelf gemaakt hebben en misschien handig is voor collega’s.

Als we deze korte sessies combineren met een introductie van een nieuwe of bestaande techniek die voor iedereen interessant kan zijn hopen we een leuke actieve avond te hebben. Het is niet de bedoeling dat bezoekers alleen maar gaan zitten luisteren, maar ook direct met de laptop aan de slag kunnen om ervaring op te doen met wat ze horen en zien.

Ondanks dat ik met al 6 jaar bezig houd met het organiseren van trainingen en sessies heb ik anders dan het welkomstwoord nog nooit zelf inhoudelijk gesproken op een sessie, gezien een van mijn hobby’s nogal wat met scripting te maken heeft (clickfarm.nluitleg) was dit een mooie gelegenheid om hier ook een keer verandering in te brengen. Tijdens de eerste Detron Open Script Night zal ik 30 minuten spreken over twee tools die mij enorm helpen en een stukje techniek waar ik dagelijks mee in aanraking kom. Een van de andere onderwerpen  waar we deze eerste avond naar gaan kijken is git, wat mij betreft ook een onmisbaar stuk gereedschap voor het onderhouden van je scripts.

Onderwerp 1: Visual Studio Code (script editor)

Visual Studio Code een erg mooi stukje gratis software van Microsoft voor het schrijven van je code. Voor de meeste talen is er een intellisense module beschikbaar. Daarnaast zorg de Emmet.io integratie voor een aanzienlijke versnelling van het schreven van de code. Ook een directe integratie met git draagt bij aan een goede workflow. Visual Studio Code - Script editor

Onderwerp 2: Postman

Eigenlijk al een stukje voorbereiding op het derde onderwerp, maar Postman is een tool voor het testen van allerlei web connectoren (om het maar eens heel simpel uit te leggen). De eerste keer dat ik er mee in aanraking kwam was voor het testen van de backend voor Clickfarm, maar inmiddels gebruik ik de tool ook zakelijk.

Postman API Test suite

Onderwerp 3: Web-connectoren (API’s)

Wanneer je meerdere (SaaS) systemen aan elkaar wil koppelen ontkom je niet meer aan allerlei verschillende API’s. Nou zijn er aardig wat standaarden, maar in hoofdlijnen werken ze technisch veelal hetzelfde. Reden genoeg om eens beter te kijken wat nu de kracht kan zijn van een goede API, maar ook wat de uitdaging kan zijn als je meerdere passieve systemen wil koppelen.

api grafische weergave

 

Microsoft Power BI Gateway (Deel 2)

In de vorige post hebben we gekeken naar hoe we data uit Profit via de webconnectoren naar JSON files kunnen halen. Om deze files ook beschikbaar te maken in de cloud voor Power Bi kunnen we het beste gebruik maken van de Power Bi gateway. Hier onder vind je een instructie van hoe deze te installeren en configureren. De instructie is op basis van de documentatie van Microsoft die je hier vind.

Stap 1: Download Enterprise Gateway

Om de Gateway te kunnen downloaden moet je inloggen op Office.com en dan doorklikken naar de PowerBI omgeving.

Office 365 Power BIRechts bovenaan heb je een “download” knop, kies daar voor “Data Gateway”

Power BI Gateway

Je wordt vervolgens doorverwezen naar de download pagina, klik daar op de “Download Gateway” optie.

Download Power BI gateway

Stap 2: Installeer Enterprise Gateway

Na de download kan je de installer starten, als er al andere applicaties draaien op de server is het zeer waarschijnlijk dat aan alle requirements voldaan wordt voor de installatie.

Power BI Gateway installatie

Je krijgt de keuze voor twee types gateway, kies hier voor de aanbevolen optie en dus NIET voor de personal mode!

Power BI Gateway Installtie modusDruk op volgende tot de installatie daadwerkelijk start.

Stap 3: Koppel Gateway

Na de installatie moet deze gekoppeld worden. Het maakt in principe niet al te veel uit welke user hier gekoppeld wordt, maar:

Alleen deze user kan:

  • aanpassingen doen aan de configuratie van de gateway zelf
  • Logging exporteren

Verder:

  • Er wordt een recovery code aangemaakt waarmee we deze user kunnen omzeilen, bewaar deze goed
  • Je moet met deze user in kunnen loggen op Office.com en je hebt dus een volledige O365 licentie nodig!

Power BI Gateway user

Je zal vervolgens een pop-up krijgen voor je credentials.

Vervolgens moet je een keuze maken of je een oude gateway wil recoveren of dat je een nieuwe gaat installeren, in ons geval installeren we dus een nieuwe:

Power BI Gateway Nieuw of Recover

Geef de gateway een naam en voer de herstelsleutel in, bewaar deze goed, we hebben deze nodig als we de gateway ooit zouden willen migreren naar een nieuwe server.

Power BI Gateway Recovery Key en naam

Je krijgt vervolgens de instellingen te zien, deze staan goed, dus die kan je zo laten:

Power BI Gateway regio

Zet tot slot het vinkje voor het verzenden van de gebruikersgegevens nog even uit. Vervolgens is de installatie klaar.

Power BI Gateway installatie voltooid

Stap 4: Autoriseer Gateway

Tot slot moet de gateway nog geautoriseerd worden. Deze is op dit moment alleen beschikbaar voor de user die je bij de installatie hebt opgegeven.

Log als deze user in op Offic.com, ga naar de PowerBI pagina en kies deze keer voor de “Settings” knop en kies voor manage gateways

Power BI Gateway autorisatie

Klik vervolgens op administrators:

Power BI Gateway administrators

 

 

De rest van de configuratie vind plaats vanuit Power Bi zelf.