Op 21 mei kwam de openbare preview van Bicep-sjablonen voor Microsoft Graph-resources uit. Bicep maakt het mogelijk – door middel van het schrijven van Infrastructure as Code (IaC) – om Azure resources aan te maken. In eerste instantie zal de Entra-extensie beschikbaar zijn voor core Microsoft Entra ID resources. Met Microsoft Entra beveilig je toegang tot je IT-infrastructuur, door het verifiëren van identities en het beheren van machtigingen en toegang. We duiken in de voordelen en mogelijkheden van de nieuwe Entra-extentie met Bicep.
Wat is Bicep?
Met Bicep is een ontwikkelaar in staat om declaratieve Infrastructure as Code-bestanden te creëren. In deze bestanden wordt opgenomen wat je wil dat er binnen de Azure Cloud bestaat of gebeurt. Zonder in te gaan op hóe dit wordt gerealiseerd. Met declaratieve of verklarende technologieën bedoelen we dan ook dat je je code zó schrijft dat je beschrijft wat je wil doen, en niet hoé je het wil doen.
Hoe vaak je dezelfde Bicep ook uitvoert, de state van je Cloudomgeving verandert niet ten opzichte van de eerste keer dat deze is uitgevoerd. Dit noemen we “idempotent”. Wanneer een Bicep-bestand is ontwikkeld, wordt dat bestand achter de schermen getranspileerd naar een ARM JSON-template bestand. Hierdoor begrijpt de Azure Resource Manager (ARM) wat voor state je op Azure zou willen bereiken.
Voordelen van Bicep
Het voordeel van Bicep-bestanden is dat je alleen bepaald wat je als eindresultaat in Azure wil zien. Je hoeft je dus in principe niet druk te maken om de huidige situatie van de omgeving. Je kunt namelijk een modus aanzetten waarmee alles wat niét in Bicep is gespecificeerd, wordt verwijderd. Dit is de Complete mode. Aan de andere kant: als de resource al bestaat, gebeurt er niks. Wanneer het nog niet bestaat, wordt het gecreëerd vanuit de ARM in de Cloud. Bestaat de resource al maar komt de configuratie niet overeen, dan worden de nodige aanpassingen doorgevoerd.
Daarmee is Bicep een domein-specifieke programmeertaal (DSL) die intuïtief en goed te lezen is, in tegenstelling tot bijvoorbeeld JSON. We zien het vaak terug in DevOps, CI/CD en Infrastructure as Code.
Bicep vs. Terraform: welke organisatie gebruikt wat?
Net als Bicep is Terraform een Desired State Configuration (DSC) tool. Dit betekent dat de ontwikkeling van Infrastructure As Code effectief beheerd kan worden. Voor organisaties die primair op Azure gericht zijn, wordt vaak Bicep gebruikt. Vooral wanneer ze gemotiveerd zijn om declaratieve technologieën toe te passen en Infrastructure as Code te gebruiken in hun CI/CD-pipelines.
Voor multi-cloud organisatie geldt dat Terraform vaak wordt gebruikt. Dit heeft te maken met het feit dat Terraform de mogelijkheid biedt om voor meerdere cloud-providers in dezelfde code-base Infrastructure as Code te schrijven. Bicep ondersteunt dit niet. Het is en blijft namelijk ontwikkeld voor alleen Azure.
De Entra-Bicep integratie
Als je rekening houdt met de typen resources die je in Azure ontwikkeld of gaat ontwikkelen, zou je dat aan een Group toevoegen of deze manipuleren. Dit geldt ook voor het toewijzen van rollen. Denk aan een Service Principle, Managed Identity of Federated Identity. Vóór de Entra-integratie gold overigens dat het werk vanuit Bicep via een deployment engine wordt verplaatst naar JSON en zo naar ARM gaat. ARM heeft echter beperkte mogelijkheden om acties richting Entra uit te voeren. Dit betekent dat de developer ingewikkelde stappen moet zetten om de technieken in Azure te krijgen. Denk aan een deployment script resource.
Bicep heeft een framework voor uitbereidingen. Denk aan Kubernetes. Deze uitbreiding is niet direct beschikbaar. Het is te activeren in een bicepconfig.json bestand waarbij je de uitbreiding inschakelt met “extensibility”: true. Om beroep te doen op de voordelen van de Entra-integratie, gebruik je de Microsoft Graph API waar je via https kunt communiceren met Microsoft 365, Dynamics 365 en Windows-services en natuurlijk Entra ID. Als onderdeel van de Entra-Bicep integratie is er een Microsoft Graph Bicep Extension uitgerold. Dit is te benaderen via extension microsoftGraph in je file. Dit maakt het mogelijk om binnen je Bicep-bestand een Graph resource te bouwen. De Graph resource wordt doorgestuurd naar de extension, wat dit vervolgens doorzet naar de Microsoft Graph API. Microsoft Graph API kan op haar beurt communiceren met Entra. Volgen we hem nog?
Welke objecten ondersteunt Entra?
Op dezelfde manier als waarop ARM-resources worden verklaard, kan je ook Microsoft Graphs definiëren. Dit wordt echter door weinig objecten ondersteund. Omdat het veel inspanning kost om de Upsert en Alternate (Alt) Key Pattern te ondersteunen die de connectie tussen Microsoft Graph Bicep Extension en Microsoft Graph API realiseert. Een belangrijk vereiste om met de Entra-uitbreiding te werken, vanwege de declaratieve aard, is dat Bicep in staat moet zijn om met specifieke objecten te kunnen werken. Om te kunnen communiceren met Entra.
In de documentatie van Microsoft Graph check je welke objecten Upsert ondersteunen. Daarnaast kan je daar ook nagaan, in Group – Properties, of de groep gebruikt kan worden als alternate key.
Ondersteunde objecten op basis van Microsoft Graph Bicep v1.0 reference
- Applications;
- Federated identity credentials;
- App role assignments;
- Groups;
- Oauth2 permission grants;
- Service Principal.
Conclusie
Met de Entra-extensie van Bicep kan een developer deployment script resources schrappen. Hij is namelijk in staat om bepaalde acties te creëren en uit te voeren met Entra. Op dit moment is de extensie in preview, dus hou de documentatie in de gaten. De objecten – waar het mee kan werken – zullen naar verwachting nog veranderen in de komende tijd. De huidige preview kan je gebruiken voor voorzichtige productie of evaluatie. Maar het doel van de Bicep-Entra uitbreiding is duidelijk. Er is geen grens meer aan wat je met je Bicep-bestand kunt doen.
Meer innformatie?
Wil je meer weten over De uitbreiding van Entra met Bicep, neem dan contact met ons op.