Grip op Identity en Access Management
Armiek Assadourian
In dit artikel neem ik je mee in onze aanpak voor het uitdelen van rechten binnen de organisatie. Het centrale punt daarbij is onze autorisatie-matrix (een Excel-file) waarin we o.a. hebben vastgelegd welke rollen toegang krijgen tot welke “technische groepen”. Vanuit deze matrix wordt alles verder geautomatiseerd met Terraform. Op deze manier houden we het beheer overzichtelijk, laagdrempelig en strak onder controle.
De autorisatie-matrix als bron van waarheid
De autorisatie-matrix is het uitgangspunt voor zoveel mogelijk van de rechten die wij uitdelen. In de matrix leggen we voor elke rol vast welke rechten daarbij horen, vertaald naar zogenoemde “technische groepen”. Deze technische groepen zijn in feite security groepen in Entra (voorheen bekend als Azure Active Directory). Denk bijvoorbeeld aan:
- aks-admin-prod en aks-admin-dev:
Beheerrechten op AKS-clusters in productie- en ontwikkelomgevingen. - storage-reader-dev en storage-reader-prod:
Leesrechten op de Azure Storage-accounts voor respectievelijk dev en prod. - servicebus-contributor-dev:
Schrijfrechten op Service Bus-resources in de dev-omgeving.
De naam van de groep geeft altijd direct aan waar de rechten op van toepassing zijn en in welke omgeving. Deze opzet maakt het toekennen van specifieke rechten beter te beheersen. Je kunt alle gelijksoortige resources in één groep gooien of juist logisch clusteren voor meer granulariteit. Zorg ervoor dat je niet teveel onderhoud moet doen aan je technische groepen.
Excel is voor de meeste mensen een bekend en eenvoudig hulpmiddel. Teams kunnen daardoor snel en gemakkelijk bekijken en aanpassen welke rollen er zijn en welke rechten daarbij horen. Door alle rechten in één sheet te hebben, kun je snel controleren of iedereen de juiste (en niet te veel) rechten heeft. Ook audits of rapportages worden hiermee eenvoudiger.
De autorisatie-matrix geeft een heldere scheiding tussen technische teams en beheerders. Zo kan ieder team zich richten op zijn eigen expertise.
Zodra de autorisatie-matrix is ingericht, gebruiken we Terraform om de leden van de security groups in te delen en voorkomen we handmatig beheer in Azure en minimaliseren we het risico op fouten. Bovendien zijn alle wijzigingen versie-beheerd in Git, waardoor je altijd kunt zien wie, wanneer en waarom iets heeft aangepast.
Koppeling met Azure (DevOps)
Azure DevOps beschikt over een eigen rechtenstructuur, maar wij wijzen daar uitsluitend onze technische groepen aan toe. Zo blijft onze autorisatie eenduidig: we hebben immers één waarheid in de autorisatie-matrix. Dit principe is uiteraard ook toepasbaar op andere applicaties die samenwerken met Entra. Helaas integreren niet alle toepassingen met Entra. Sommige applicaties, bijvoorbeeld Enterprise Apps van Azure zelf, ondersteunen geen (of beperkt) groepen-in-groepen. Als je nested memberships gebruikt, kan het zijn dat die applicatie de werkelijke leden niet kan zien.
Azure DevOps en Azure zelf ondersteunen deze aanpak, daarmee hebben wij twee van onze belangrijke resources goed onder controle.
Let wel op, voor het nesten van groepen in Entra heb je een Entra Premium-licentie nodig. Gelukkig voldoet het om ten minste één gebruiker in je tenant zo’n licentie te geven en kun je daarmee kosten besparen.
Hieronder een script waarmee makkelijk alle Azure DevOps rechten uitgedraaid kunnen worden. Hier dienen dus uitsluitend technische groepen te staan:
1$organization = "xxx"
2$organizationUrl = "https://dev.azure.com/$organization"
3
4$projectsJson = az devops project list --organization $organizationUrl --output json
5$projects = $projectsJson | ConvertFrom-Json
6
7foreach ($project in $projects.value) {
8 $projectName = $project.name
9
10 $groupsJson = az devops security group list --organization $organizationUrl --project $projectName --output json
11 $groups = $groupsJson | ConvertFrom-Json
12
13 foreach ($group in $groups.graphGroups) {
14 $groupName = $group.displayName
15 $groupDescriptor = $group.descriptor
16
17 $membersJson = az devops security group membership list --id $groupDescriptor --organization $organizationUrl --output json
18 $membersResponse = $membersJson | ConvertFrom-Json -AsHashtable
19
20 foreach ($key in $membersResponse.Keys) {
21 $member = $membersResponse[$key]
22 $memberName = $member.displayName
23 Write-Output "----------------------------------------------------"
24 Write-Output "Project: $projectName"
25 Write-Output "Group: $groupName"
26 Write-Output "Member: $memberName"
27 }
28 }
29}
30
Conclusie
Door onze werkwijze waarbij wij geautomatiseerd een autorisatie-matrix vanuit Excel toepassen bereiken we het volgende:
- Eenvoud, de Excel-matrix is eenvoudig te begrijpen en te beheren, zowel voor technische als niet-technische stakeholders.
- Losse koppeling tussen technische teams en beheerders.
- Minder fouten door een deel te automatiseren.
- Grip op Identity en Access Management.