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..

koppeling AFAS Profit & Microsoft Azure & Power BI

De eerdere posts waren gericht op het live (of near live) ontsluiten van data uit AFAS Profit naar een Power BI rapport. Alhoewel dit erg goed werkt voor rapporten waarbij de data zo live mogelijk moet zijn is het niet de beste optie als performance belangrijker is dan de meest actuele data. Zeker in de gevallen waarbij je de data maar eens per dag of nog minder hoeft te verversen.

Voor dit scenario maken we van de volgende diensten gebruikt:

  • AFAS Profit (on-prem of AFAS Online)
  • Azure Automation
  • Azure (Blob) Storage
  • Microsoft Power BI

De kosten van de Azure storage zijn afhankelijk van het gebruik, maar normaal gezien zouden we het over maximaal enkele euro’s per maand moeten hebben. De precieze kosten van Azure Blob Storage vind je eventueel hier (https://azure.microsoft.com/nl-nl/pricing/details/storage/blobs/)

Het stappenplan bevat de volgende onderdelen:

  • Aanmaken getconnectoren AFAS Profit
  • Aanmaken app-connector AFAS Profit en genereren token
  • Aanmaken Azure Automation instance
  • Aanmaken Azure Blob Storage
  • Invoeren Automation Runbook
  • Koppelen Power BI rapport

Aanmaken getconnectoren AFAS Profit

Binnen AFAS Profit kan je middels het aanmaken van een getconnector data buiten het pakket beschikbaar stellen. Deze connector is na het uitvoeren van de volgende stap vai de REST API beschikbaar.

De belangrijkste keuze die je in deze stap moet maken (naast de te ontsluiten velden natuurlijk) is waar je de filtering van de data uit wil voeren. Het is altijd een goed idee om niet meer data beschikbaar te stellen dan strikt noodzakelijk. Het heeft dan ook mijn persoonlijke voorkeur om filters waarvan je zeker weet dat die nooit veranderen aan de Profit kant in te regelen en alle overige filters af te handelen in de scripts die de data ophalen (of Power BI zelf).

Hoe je een getconnector in AFAS Profit aanmaakt vind je hier. (https://help.afas.nl/help/NL/SE/App_Cnr_XML_Get_Build.htm)

Aanmaken app-connector AFAS Profit en genereren token

De getconnectoren die we in de vorige stap aangemaakt hebben moeten nu nog naar buiten toe bescchikbaar gesteld worden. In de onderstaande twee stukken heb ik uitgewerkt hoe je de connectoren kan toevoegen aan een App connector en hoe je de autorisatie tokens klaar kan maken voor gebruik:

Normaal gezien gebruik ik een systeem gebruiker (Binnen AFAS Profit) en een specifieke groep van connectoren zodat ik de autorisatie van deze user middels groep autorisatie in kan regelen.

Alle get-connectoren die je mee neemt in de app connector zullen worden gedownload. Je kan de lijst later dus ook nog uitbreiden. Als je de lijst wil inkrimpen zal je handmatig de json’s van de verwijderde connectoren moeten verwijderen uit je blob-storage.

Aanmaken Azure Automation instance

Tot dusver hebben we nog niets gedaan dat we in eerdere stappen niet ook al gedaan hebben. Voor de volgende stappen moeten we in de Azure omgeving een aantal dingen voorbereiden. Je kan als je nog geen account hebt via https://portal.azure.com een nieuw account aanmaken. De kosten van de onderdelen die we inzetten zijn we erg afhankelijk van hoeveel data we opslaan, maar normaal gezien zou het maar een paar euro per maand moeten zijn.

In de Azure portal kan je zoeken naar “Azure Automation” je krijgt dan een optie om een Azure Automation Acocunt aan te maaken, als je dat onderdeel opent krijg je een beeld zoals hier onder:

Azure Automation menu

Klik hier op “Add” om een nieuwe Azure Automation Instance aan te maken. Je krijgt een venster zoals hier onder te zien:

Azure Automation Account aanmaken

Je moet de instance een naam geven en eventueel aan een bestaande resource group koppelen, als je die nog niet hebt kan je die ook meteen even aanmaken. Tot slot moet je een regio kiezen, qua functionaliteit maakt het niet uit, maar het is sterk aan te raden om de dichtstbijzijnde regio te kiezen. In ons geval dus West Europa.

Als alles goed gegaan is krijg je uiteindelijk een venster zoals dit te zien:

Azure Automation overview

Om er voor te zorgen dat je alle acties uit kan voeren is het noodzakelijk om te zorgen dat de juiste modules geactiveerd zijn (via de modules knop kan je de lijst aanpassen). In ons geval is dit de lijst die we gebruiken:

Azure Automation Modules

Dit zijn er iets meer dan strikt noodzakelijk voor dit artikel maar dat is verder geen probleem. Let er wel op dat je deze modules af en toe zal moeten updaten.

Het aanmaken van het Automation Account kan even duren, je kan onderstussen aan de slag met de volgende stap, we maken het Automation Account verderop af.

Vanuit hier kunnen we verder met de voorbereidingen en gaan we een Storage account aanmaken.

Aanmaken Azure Blob Storage

In tegenstelling tot de directe koppelingen waar ik eerder over schreef maken we nu een tussenstap door de data in Azure Blob Storage te zetten. Dat komt de performance ten goede en bied ook een aanzienlijk aantal extra mogelijkheden als we meer met de data zouden willen doen.

Op de Azure portal zoeken we naar “Storage Acocunts”. Als je daar op klikt krijg je een overzicht met de bestaande storage accounts. Indien nodig kan je nu zelf een nieuw acocunt aanmaken door op “Add” te klikken

Microsoft Azure Storage Accounts

Over de gevraagde velden in, normaal gezien staat alles goed, let wel op de regio waar je het storage account aanmaakt. Voor de beste performance houd je deze in dezelfde regio als je automation account.

Microsoft Azure Storage account aanmaken

Als het aanmaken gelukt is kan je de nieuw aangemaakte resource openen:

Micorosoft Azure Storage Account overview

Kies hier voor “Blob” om de container aan te maken waar we de JSON files die uit de AFAS Profit connector komen op gaan slaan.

Microsoft Storage Blob aanmaken

Tot slot hebben we nog twee zaken nodig uit ons Azure Storage account. Allereerst hebben we het access token nodig. Deze kan je vinden door op de Azure Storage Acocunt overview pagina in het menu op “Access Keys” te klikken en key 1 of 2 te kopiëren.

Azure Storage acces keys

Vervolgens hebben we de URL nodig waarop je Blob beschikbaar is. Open daarvoor vanuit  de Azure Storage Acocunt overview pagina het “Blobs” menu en open daar de Blob die we net aangemaakt hebben. Open daar vervolgens de properties en kopier de URL.

Microsoft Azure Storage Blob url

Invoeren Automation Runbook

De eerste stap die we moeten zetten in het Azure Automation account is het aanmaken van een runbook voor het draaien van het script. Ga hiervoor naar het runbook menu:

Azure Automation Runbook

Mogelijk staan hier een aantal voorbeeldscripts, die kan je verwijderen om het beeld wat overzichtelijker te maken. Vervolgens klik je op de “nieuw” knop, en vul je de velden in. De naam die je het script geeft is niet zo van belang, maar zorg er voor dat “type” op “Powershell” staat:

Azure Automation aanmaken runbook

Vervolgens kan je het runbook bewerken om het script toe te voegen. Het script heb ik onder aan deze post staan en nog even toegelicht.

Azure Automation Runbook bewerken

Wanneer je de code ingevoerd hebt kan je op “Publish” drukken, er is ook een save knop, maar het script draait altijd de laatste versie die gepubliceerd is, dus zeker voor de eerste keer opslaan is het van belang om “Publish” te gebruiken.

Je kan nu terug gaan naar het runbook overzicht zoals hier onder, als je op het script klikt ga je na de status pagina van dat script/runbook. Als je hier op “run” drukt zal het script in de wachtrij gezet worden, je gaat dan naar een status pagina waar je de “job” kan bekijken.

Azure Automation Runbook overzicht
Azure Automation Job status

Als alles goed gegaan is zal de job naar completed springen en zie je geen errors. (mogelijk moet je even op refresh drukken). Je kan ondertussen ook de blob storage opnieuw openen en controleren of de files daar verschenen zijn.

Tot slot willen we nog een schema toevoegen om het script/runbook periodiek te draaien. Je kan in de runbook op “Schedule” klikken:

Azure Automation Scheduling

Als je hier de stappen volgt kan je een script toevoegen dat bijvoorbeeld ieder uur of iedere dag draait:

Azure Automation Schedule aanmaken

Script

Je vind de code van het script hier (op Github, https://github.com/HermanRonk/ProfitExportToAzureBlob ), de nummers hier onder verwijzen naar de verschillende blokken in dat script.

  1. In het eerste blok worden de inloggegevens voor de Profit omgeving vastgelegd. En de header opgebouwd
  2. Hier worden de Variabelen voor het Azure Storage account vastgelegd.
  3. Hier maken we verbinding met de Azure Storage omgeving
  4. Hier halen we eerst de lijst met geautoriseerde connectoren op en vervolgens loopen we door deze connectoren heen. Voor iedere connector wordt een JSON file naar de storage geschreven.

Koppelen Power BI rapport

Het koppelen van de databron werkt niet helemaal intuitief, het is dus zaak om deze stappen goed te volgen.

Open de Power BI client en begin een nieuw rapport

  • Kies voor een nieuwe gegevensbron, gebruik eventueel het zoekveld en zoek naar Azure Blob
Power BI Gegevensbron toevoegen
  • Je krijgt vervolgens een veld waar je het adres van de Azure Blob in kan voeren. Je vind dit adres op de properties pagina van de Storage Blob in Azure.
Power BI gegevensbron URL
  • In het volgende veld moet je de “Key” van het storage account invoeren. Je vind deze “Key” op de “access keys” pagina van het storage account (dus 1 niveau hoger dan de Storage Blob).
Power BI Blob Accountsleutel
  • Je krijgt vervolgens een pagina te zien met alle beschikbare files op de Blob, je mag hier op laden klikken
Power BI Tabel
  • Als je vervolgens de Query Editor opent zie je een aantal regels, klik in de eerste regel op “Binary”
Power BI Tabel
  • In het volgende venster zie je weer een aantal regels, klik hier op “List”
Power BI List
  • In de nieuwe weergave mag je in het ribbon op de “Naar tabel” knop drukken
Power BI convert to table
  • Vervolgens kan je op de onderstaande knop drukken om de tabel om te zetten in alle kolommen.
Power BI Expand
  • Selecteer hier de kolommen die je wil gebruiken.
Power BI Kolommen selecteren

Je kan deze stappen herhalen voor iedere JSON / Connector die je in je rapportage wil gebruiken. Om de eerste stappen wat te versnellen kan je eventuele in de advanced editor de code die je heb na stap 4 kopieren en als nieuwe query plakken. Dat scheel eventueel wat handwerk.

Als je deze stappen doorlopen hebt is de data “live” beschikbaar in Power BI. Afhankelijk van de refresh die je in Azure Automation hebt ingesteld zal de data periodiek worden bijgewerkt. Als je de rapportage open hebt staan kan je op “Refresh” drukken om de nieuwe data op te halen.

Tot slot

Als je de bovenstaande stappen gevolgd heb zal alles normaal gezien naar behoren moeten werken. Er is dan wel nog ruimte voor verbetering, maar om het voorbeeld een beetje overzichtelijk te houden heb ik het hier bij gehouden. De eerste stap die eigenlijk nog gezet moet worden is het het gebruiken van de Azure Credential Store in je Azure Automation account, dat voorkomt dat de autorisatie tokens zichtbaar in het script staan en is dus uiteindelijk een veiligere implementatie.

Verder kan je het versiebeheer en de uitrol van het script nog mooi inregelen in Azure Devops of Github, maar dat is een post voor later :).

AFAS Profit Power BI directe koppeling

Ik heb eerder een aantal berichten geschreven over het koppelen van AFAS Profit aan Power BI door middels de connectoren en een stukje Powershell JSON files te genereren. Hiervoor had je een stukje storage nodig om de files te plaatsen en daarnaast een Power BI Gateway. Daarmee dus ook een server om die op te draaien. Zeker voor de AFAS Online klanten is het niet vanzelfsprekend dat je die infrastructuur hebt, en dus was er genoeg aanleiding om even verder te zoeken naar de mogelijkheden :).

Het doel

Er zijn grofweg 3 manieren om data in Power BI te krijgen:

  • Direct (live)
  • Direct (update via schema)
  • Files via de Enterprise Gateway

In mijn eerdere posts ging ik in op de mogelijkheden via de Enterprise Gateway. Dit is overigens een variatie op de Directe koppeling met een update via een schema. Het streven was nu vooral het koppelen zonder tussenkomst van eigen servers, services of storage.

De uitdaging

Power BI heeft een flink aantal mogelijkheden als het gaat om het koppelen van databronnen. Een van de opties is een web connector:

De Power BI web data source connector

Het is alleen even wat puzzelwerk om de autorisatie voor de REST connector van AFAS Profit goed te krijgen, vooral ook omdat hier eigenlijk geen hele goede documentatie van beschikbaar is. Maar goed, daar zijn artikelen als deze voor :).

De oplossing

Om data uit AFAS Profit beschikbaar te krijgen in Power BI zonder dat daar (behalve bij het aanmaken) handmatige acties voor nodig zijn moeten we gebruik maken van de web/app connectoren in Profit. In dit voorbeeld maken we gebruik van de REST API van AFAS Profit. Hoe je deze connectoren aan kan maken heb ik eerder omschreven in dit artikel.

Het belangrijkste is dat je de autorisatie token die je in dat stappenplan maakt goed bewaart. Het is niet mogelijk om deze code opnieuw te generen zonder de oude code te laten vervallen. De code die je genereert zit er grofweg als volgt uit:

<token><version>1</version><data>***</data></token>

Je kan deze code echter niet 1-op-1 gebruiken om via Power BI te autoriseren voor de connector, er dient een Base64 string van gemaakt te worden en de tekst “AfasToken” dient voorgevoegd te worden. Om het gemakkelijk te maken heb ik een kleine tool gemaakt om deze handelingen snel uit te voeren.

Screenshot Profitkey.hermanronk.nl

Je vind deze tool op profitkey.hermanronk.nl. Als je ons voorbeeldtoken door deze tool heen halen is dit het resultaat:

AfasToken PHRva2VuPjx2ZXJzaW9uPjE8L3ZlcnNpb24+PGRhdGE+KioqPC9kYXRhPjwvdG9rZW4+

Het laatste wat we nog nodig hebben is het web-pad naar de connector. Het eerste deel van de URL is altijd hetzelfde voor je eigen omgeving en de rest is variabel. Het eerste deel is als volgt opgebouwd:

AFAS Online: https://12345.afasonlineconnector.nl/profitrestservices/ (12345 is je deelnemersnummer)
Lokale installatie: https://”webadres”/profitrestservices/ (webadres is veelal het gelijk aan het eerste deel van de url voor InSite)

Het laatste deel van de URL kan dus wisselen, de opbouw is als volgt:

/connectors/pbi_mdw?skip=-1&take=-1

/connectors/ = meestal gelijk
pbi_mdw = de naam van de connector die je wil benaderen
?skip=-1&take=-1 = opties en filters

Wanneer je met grote datasets werkt wil je eventueel filters gebruiken en een datasource per bijvoorbeeld periode aanmaken in Power BI. een filter op periode zou er bijvoorbeeld als volgt uit kunnen zien (we filteren hier op periode 7):

&filterfieldids=Periode&filtervalues=7&operatortypes=1

Aan de slag in Power BI

Met de bovenstaande informatie hebben we alles wat we nodig hebben om in Power BI de connector aan te maken. We kiezen zoals aan het begin van deze post aangegeven voor de bron “Web”, wanneer je daarna op geavanceerd klikt krijg je onderstaand scherm te zien:

Power BI Web bron configuratie scherm

Hier moeten we drie velden vullen:

  1. URL
  2. Header 1: Content-Type
  3. Header 2: Autorisation

De URL zou in het geval van een AFAS Online omgeving volgens de bovenstaande instructies als volgt opgebouwd zijn:

https://12345.afasonlineconnector.nl/profitrestservices/connectors/pbi_mdw?skip=-1&take=-1&filterfieldids=Periode&filtervalues=7&operatortypes=1

Bij het tweede en derde veld moeten de headers ingevoerd worden, de eerste specificeert de content type. Dus kies hier in het linker veld “Content-Type” en voer in het rechter veld “application/json;charset=utf-8” in.

Het derde veld is de autorisatie, hiervoor hebben we via profitkey.hermanronk.nl een string gegenereerd. In het linker veld kies je voor “Authorization” en in het rechter veld voer je de gegenereerde string in, zoals bijvoorbeeld “AfasToken PHRva2VuPjx2ZXJzaW9uPjE8L3ZlcnNpb24+PGRhdGE+KioqPC9kYXRhPjwvdG9rZW4+”

Als je op voltooien drukt krijg je een venster waar je moet aangeven op welk niveau de autorisatie moet worden toegepast. Kies hier uit het dropdown menu de meest specifieke optie:

Power BI connector autorisatie

Vervolgens klik je op “verbinden”, je krijgt dan grofweg het volgende te zien:

PBI JSON verwerking

Je kan hier op “List” klikken en vervolgens op naar tabel:

Tot slot moet je de kolom nog uitvouwen en de kolommen selecteren die je wil behouden:

Power BI Kolommen uitvouwen

Als je nu de Query opslaat kan je aan de slag met de Profit data in Power BI! De laatste tip die ik nog even mee wil geven is als volgt. Eerder heb ik aangegeven dat je grotere datasets moet splitsen middels filters. Als je dat gedaan hebt kan je deze tabellen in Power BI naadloos samenvoegen:

Power BI Query toevoegenPower BI tabellen samenvoegen

Er wordt dan een nieuwe tabel aangemaakt die een samenvoeging is van de hier boven geselecteerde tabellen.

Tot slot

Het is even wat werk om op deze manier de data naar Power BI te halen, maar als het eenmaal ingericht is kan je het basisbestand eindeloos kopiëren en uitbreiden. De data kan via de scheduler prima periodiek ververst worden, houd er alleen wel even rekening mee dat zeker grotere connectoren best wat impact kunnen hebben op de performance.

Ik zal in de komende tijd nog twee andere mogelijkheden voor het ontsluiten van Profit data in Power BI uitwerken. Beide opties maken dan wel gebruik van een tussenstap, maar zijn misschien wat meer geschikt voor grotere hoeveelheden data.

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.

Microsoft Flow – Mattermost integratie

Spelen Werken met Office365 is onderdeel van mijn werkzaamheden, maar daarnaast beheer ik ook nog een Mattermost instance die we voor onze onderlinge communicatie gebruiken. Al een tijdje terug had ik met Zapier een flow gemaakt die wanneer een van onze bloggers een bericht schrijft hiervan een notificatie op Mattermost gemaakt zou worden. Zapier is echter een betaald product en ik ben van mening dat we eigenlijk zoveel mogelijk van de producten uit de Office365 suite moeten gebruiken om daar in ieder geval zoveel mogelijk ervaring mee op te doen.

Tijd dus om eens wat effort te steken in het omzetten van deze functionaliteit van Zapier naar Microsoft Flow.

Het proces:

Simpel genoeg zou je zeggen.

De stappen komen neer op het gebruik van een RSS reader die vervolgens via een HTTP post een bericht naar de incoming webhook van Mattermost stuurt in een JSON formaat. Gelukkig worden al deze stappen ondersteund in Microsoft flow.

Stap 1: Aanmaken incoming webhook Mattermost
Open in mattermost het integrations menu vanuit de user die uiteindelijk de posts mag doen.

Stap 2: Aanmaken flow in Microsoft flow
Ga hiervoor naar flow.microsoft.com en log indien nodig in met je credentials.

Uiteindelijk stelt het dus niet al te veel voor maar het is even puzzelen hoe het HTTP request er uit moest komen te zien.

O365 Acceptatie: Train je gebruikers!

Toen Microsoft Office een volledig nieuwe interface kreeg raakte veel gebruikers flink in de war, en zelfs nu nog zijn er hele groepen gebruikers die weigeren naar nieuwe versies over te stappen. De een is bang voor verandering en de ander zit vast in zijn gebruiken in het oude systeem. Microsoft dendert ondertussen voort en blijft in een steeds hoger tempo aan alle elementen van zijn software sleutelen.

Bij een overstap naar een nieuwe Office versie wordt er maar zelden aandacht besteed aan het trainen van de gebruikers en bij een overstap naar Office 365 lijken we dezelfde fout te gaan maken. Voor de niet technisch onderlegde verantwoordelijke klinkt het als een nieuwe Office versie, voor de eindgebruiker is het allemaal hocus pocus en de techneuten vinden het vooral allemaal heel vanzelfsprekend en ligt de focus vooral op de technische uitdagingen.

De overstap naar Office365 is echter helemaal niet zo iets als even een nieuwe Office versie, het vraagt een nieuwe manier van werken en omgaan met je data om er optimaal gebruik van te maken. Daarnaast is het delen van je data zo kinderlijk eenvoudig dat je als bedrijf wel echt even moet nadenken over hoe je met je data om wil gaan en welke risico’s daar bij komen kijken.

Microsoft zelf hamert op een aanpak waarbij je in je organisatie een aantal “Hero’s” aanwijst die de nieuwe manier van werken moeten gaan uitdragen om de rest van je organisatie mee te krijgen in de nieuwe mogelijkheden die zij krijgen. In een moderne relatief kleine organisatie kan je zo een heel eind komen en ook in een organisatie waar het hele personeel een (it) technische achtergrond heeft ga je al flinke stappen kunnen zetten.

De meeste organisaties bestaan echter uit een flinke administratieve afdeling die hulp nodig gaan hebben bij het optimaal gebruiken van de nieuwe toolset die je ze gaat aanbieden. Je kan ze laten aanmodderen, maar dat gaat ten koste van de productiviteit en brengt mogelijk ook risico’s met zich mee. Daarnaast mis je op die wijze een hoop kansen die het werk voor je gebruikers flink eenvoudiger zouden kunnen maken.

De truck is dan dus om je medewerkers op te leiden, dat gaat in dit geval alleen niet door simpel even een trainer in te huren die in een middagje komt vertellen hoe Office365 werkt en wat er allemaal wel niet mee kan. Je zal zelf eerst op regie niveau moeten bepalen welke functionaliteiten er eventueel handig zijn voor jou organisatie. Dat betekent dus ook dat je goed zal moeten kijken naar welke processen er mogelijk geraakt worden door de nieuwe mogelijke werkwijzen en hoe deze eventueel verbeterd kunnen worden door het goed gebruik van de toolset die je voor handen hebt.

Zodra je al dan niet in een team de beste werkwijze bepaald hebt, en een keuze gemaakt hebt uit de elementen die je wil gaan gebruiken is het tijd om een trainer en je hero’s bij elkaar te halen. Gezamenlijk kan je dan gaan kijken hoe je de gebruikers kan betrekken bij deze nieuwe werkwijze en een zoveel mogelijk praktijk gerichte training in elkaar te zetten.

Door de training als kick-off in te zetten kan je de gebruikers in leuke stijl bekend maken met de nieuwe werkwijze en mogelijkheden. De hero’s moeten vervolgens benaderbaar zijn in de dagelijkse werkzaamheden zodat de gebruikers hun vragen altijd kwijt kunnen en zo min mogelijk hinder ondervinden van de nieuwe werkwijze.

Deze hero’s zijn ook je voelsprieten in de organisatie, zij zullen eventuele onvrede direct opmerken en daarop kunnen acteren. Let er op dat je in deze fase problemen niet te lang door laat lopen, dat gaat snel ten koste van het draagvlak voor de nieuwe werkwijze. Je wil namelijk koste wat kost voorkomen dat de oude en nieuwe systemen en gebruiken door elkaar heen gaan lopen.

Klinkt dit als veel werk? Dat kan kloppen de impact van de overstap naar Office365 voor je gebruikers wordt nogal eens onderschat, en natuurlijk blijft alles ook wel soort van werken op het moment dat je er verder geen aandacht aan besteed. Je zal alleen bij lange na niet gebruik maken van de potentie waar je wel voor betaald en je loopt aanzienlijke onnodige risico’s..

Wellicht ten overvloede, maar de stappen in het kort:

  • Bepaal de (gebruikers)processen die geraakt worden door een overstap naar Office365
  • Onderzoek welke bestaande processen verstoord raken door een overstap naar O365
  • Bekijk welke optimalisaties je aan de processen kan doorvoeren door goed gebruik te maken van de beschikbare nieuwe functionaliteiten
  • Leid een trainer op om de nieuwe werkwijze uit te dragen in de organisatie
  • Ga op zoek naar de hero’s in je organisatie die de nieuwe werkwijze kunnen uitdragen en ondersteunen binnen de organisatie.
  • Verzamel feedback over de nieuwe werkwijze en acteer hier zo snel mogelijk op

In de echte wereld is het natuurlijk wat complexer dan hierboven omschreven gezien je over het algemeen maar beperkte middelen tot je beschikking hebt en er meerdere belangen spelen. Maar denk in ieder geval ook eens aan de echte werkzaamheden van een gebruiker voor je de overstap maakt. En nee, de werkzaamheden zijn niet zo eenvoudig als het openen van een mailtje, of alleen het opslaan van een document.. Vraag ook eens door wat ze vervolgens met een mailtje doen, of welke stappen ze nu werkelijk doorlopen om een standaard document aan te maken en eventueel te versturen.

Er is in ieder geval nog een hoop te optimaliseren als we kijken naar hoe weinig van de beschikbare functionaliteiten gebruikt worden. En een eenvoudige optimalisatie van je processen is altijd welkom toch? Zeker als je alle tools die je daarvoor nodig hebt al in je abonnement hebt zitten en er dus geen aanvullende kosten bij komen kijken!