Wanneer u taken in Azure wilt automatiseren met scripts en tools, zou u overwegen om serviceaccounts of Azure-serviceprincipals te gebruiken? Het is niet ongebruikelijk dat sommigen gewoon een nieuw serviceaccount aanmaken, het volproppen met alle beheerrollen die u wilt, en het uitsluiten van MFA.
I know what you’re thinking – “that is a horrible idea”. Of course, it is! And for sure, your IT Sec will give you a lot of grief if you did all that.
Maar wat is het alternatief? Hoe kunt u een bevoorrecht referentiegegeven gebruiken met een beperkte reikwijdte dat niet uitgesloten hoeft te worden van multi-factor authenticatie? U hebt geluk, want dat is wat dit artikel u zal leren.
In dit artikel leert u wat een Azure-serviceprincipal is. U leert hoe u serviceprincipals kunt maken met verschillende soorten referentiegegevens, zoals wachtwoorden, geheime sleutels en certificaten.
Er zijn veel tools om Azure-serviceprincipals te maken. Deze omvatten het gebruik van de Azure Portal, Azure Active Directory Admin Center, Azure AD PowerShell, Azure CLI en Azure PowerShell. De tool waarop dit artikel zich zal richten, is de Azure PowerShell.
Nog steeds geïnteresseerd? Blijf lezen en laten we beginnen!
Vereisten
Aangezien dit een artikel is over ‘leren door te doen’, zijn hier enkele vereisten zodat je kunt meedoen.
- Toegang tot een Azure-abonnement. Het is het beste als je werkt op een testomgeving. Als je er geen hebt, kun je je registreren voor een gratis proefperiode.
- Toegang tot een computer met Windows 10 met PowerShell 5.1.
- De Azure PowerShell-module moet geïnstalleerd zijn.
Azure Service Principal versus Service Account
Automatiseringstools en scripts hebben vaak beheerders- of bevoorrechte toegang nodig. Bijvoorbeeld, het aanmaken van opslagaccounts of het starten en stoppen van virtuele machines volgens een schema. De meeste beheerders gebruiken waarschijnlijk een volledig bevoorrecht gebruikersaccount (een service-account) om de referentievereisten voor scripts in te stellen.
A service account is essentially a privileged user account used to authenticate using a username and password. And, if used with automation, a service account is most likely excluded from any conditional access policies or multi-factor authentication.
Aan de andere kant kan een Azure-serviceprincipal worden ingesteld om een gebruikersnaam en wachtwoord of een certificaat te gebruiken voor authenticatie. Denk aan een gebruikersidentiteit zonder gebruiker, maar eerder een identiteit voor een applicatie.
Een Azure-serviceprincipal kan worden toegewezen met precies genoeg toegang, zelfs tot slechts één specifieke Azure-resource. Bijvoorbeeld, je kunt een Azure-serviceprincipal maken die rolgebaseerde toegang heeft tot een volledig abonnement of alleen een enkele Azure-virtuele machine.
Belangrijkste overwegingen bij het maken van Azure-serviceprincipals
Voordat u een Azure-serviceprincipal maakt, moet u op de hoogte zijn van de basisgegevens waar u rekening mee moet houden. Deze gegevens lijken misschien eenvoudig, maar ze maken het maken van een Azure-serviceprincipal zo efficiënt en gemakkelijk mogelijk.
De weergavenaam. Het begint allemaal met een naam, en een Azure-serviceprincipal moet een naam hebben. Er zijn geen vaste regels, maar uw organisatie kan een voorgeschreven naamgevingsconventie hebben.
- Het type referentiegegevens dat u wilt gebruiken. U kunt ervoor kiezen om een Azure-serviceprincipal te maken die een wachtwoord of certificaat gebruikt voor verificatie. Dit betekent niet dat u er slechts één kunt kiezen, u kunt beide gebruiken.
Voor serviceprincipals worden de gebruikersnaam en het wachtwoord meer toepasselijk aangeduid als toepassings-id en geheime sleutel.
- De geldigheidsduur van de referentiegegevens. Of u nu een wachtwoord of een certificaatreferentiegegeven toewijst, u moet een start- en einddatum voor de geldigheid ervan opgeven. Hoe lang een referentiegegeven geldig is, hangt meestal af van hoe vaak u certificaten en wachtwoorden wilt vernieuwen/roteren.
- De toegangsbereik. Maakt u een Azure-serviceprincipal die toegang heeft tot een abonnement, resourcegroep of geselecteerde resources?
- De rol. Er zijn verschillende rollen beschikbaar, zoals Contributor, Reader en Owner, om er een paar te noemen. U moet bepalen welke rol “voldoende” is voor de serviceprincipal.
Het aanmaken van een Azure Service Principal met Automatisch Toegewezen Geheim Sleutel
Het hart van het creëren van een nieuwe service principal in Azure is de New-AzAdServicePrincipal
cmdlet. In dit voorbeeld wordt een nieuwe service principal aangemaakt met deze waarden:
Weergavenaam: AzVM_Reader
Bereik: AzVM1 (Virtuele Machine)
Rol: Reader
Wachtwoord: <automatisch toegewezen>
Geldigheid van referenties: 1 jaar
Het verkrijgen van de ID van het doelbereik (Virtuele Machine)
Zoals je kunt zien, is het bereik van deze nieuwe service principal alleen voor de virtuele machine met de naam AzVM1. Echter, de -Bereik
parameter accepteert niet alleen de naam, maar de gehele ID van de resource. Dus, in dit voorbeeld, is het eerste wat je moet doen het verkrijgen van de ID van de virtuele machine AzVM1. Gebruik hiervoor de onderstaande code.
Als je de bovenstaande code uitvoert in PowerShell, zou je een lijst met VM-namen en IDs moeten zien, vergelijkbaar met de onderstaande schermafbeelding.

Het aanmaken van de Azure Service Principal met Geheime Sleutel
Nu je de ID hebt van het doelbereik, wat de ID is van de AzVM1 virtuele machine, kun je de onderstaande opdracht gebruiken om de nieuwe service principal te maken met de lezer rol. De eigenschappen van de nieuwe service principal worden opgeslagen in de $sp
variabele.
Als resultaat van de bovenstaande opdracht is de service principal aangemaakt met de onderstaande waarden.

Het ontcijferen van de Geheime Sleutel
Nu heb je de ApplicationID en Secret, wat de gebruikersnaam en wachtwoord van de service principal is. Echter, de waarde van de Secret wordt weergegeven als System.Security.SecureString. Je wilt weten wat het geheime wachtwoord is. Gebruik daarvoor onderstaand commando om het geheim om te zetten naar platte tekst.
Het bovenstaande commando zet de beveiligde tekenreekswaarde van $sp.Secret
om naar platte tekst. Zie de onderstaande afbeelding ter referentie.

Verifiëren van de Azure Service Principal Role Assignment
Hoe weet je dat dit heeft gewerkt? Je kunt de toegangsbeheerlijst van de resource controleren met behulp van de Azure Portal. Bijvoorbeeld, in de onderstaande afbeelding kun je zien dat de AzVM_Reader service principal nu Lezer-toegang heeft tot de virtuele machine AzVM1.

Ook kun je het commando Get-AzRoleAssignment -ObjectID $sp.id
gebruiken om de roltoewijzingen van de Azure service principal op te halen. Zie de onderstaande schermafbeelding als voorbeeld.

Het maken van een Azure Service Principal met Wachtwoord
Als je meer controle wilt over welk wachtwoord of geheim sleutel aan je Azure service principal wordt toegewezen, gebruik dan de parameter -PasswordCredential
tijdens de creatie van de service principal. Dit is vooral handig als het wachtwoord aan complexiteitseisen moet voldoen.
In dit voorbeeld zal de nieuwe Azure service principal worden aangemaakt met deze waarden:
Weergavenaam: ATA_RG_Contributor
Bereik: ATA (ResourceGroup)
Rol: Bijdrager
Wachtwoord: 20 tekens lang met 6 niet-alfanumerieke tekens
Geldigheid van referentie: 5 jaar
Het verkrijgen van de ID van de doelscope (Resourcegroep)
De scope van deze nieuwe service principal omvat de hele resourcegroep met de naam ATA. Het eerste wat je moet doen, is de ID van de resourcegroep ATA krijgen. Gebruik hiervoor de onderstaande code, maar zorg ervoor dat je de waarde van de parameter -Name
wijzigt naar je resourcegroepnaam.
Vervolgens zou je de ResourceID
van de resourcegroep moeten zien die nu is opgeslagen in de variabele $Scope
.

Genereren van de wachtwoordreeks
De volgende stap is het genereren van het wachtwoord dat voldoet aan de complexiteit van 20 tekens lang met 6 niet-alfanumerieke tekens. Hiervoor kun je gebruikmaken van de .NET statische methode GeneratePassword()
.
In de bovenstaande code GeneratePassword(20, 6)
, betekent de eerste waarde de lengte van het wachtwoord en de tweede waarde het aantal niet-alfanumerieke tekens om op te nemen. Het resultaat wordt getoond in de onderstaande schermafbeelding.

GeneratePassword()
static methodAanmaken van het wachtwoordreferentieobject
Nu je de wachtwoordreeks hebt, is de volgende stap het maken van het Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential
-object. Dit object zal de wachtwoordreeks bevatten die is opgeslagen in de variabele $password
en de geldigheidsperiode van 5 jaar. Kopieer de code hieronder en voer deze uit in je Azure PowerShell-sessie.
Het uitvoeren van de bovenstaande code in PowerShell zal vervolgens het referentieobject naar de variabele $PasswordCredential
opslaan. Het verwachte resultaat zou vergelijkbaar moeten zijn met het onderstaande.

Het aanmaken van de Service Principal met Wachtwoord
Je hebt nu de vereiste parameterwaarden klaar om de Azure-serviceprincipal te maken. De onderstaande code zal de serviceprincipal aanmaken met de weergavenaam van ATA_RG_Contributor en gebruikmakend van het wachtwoord opgeslagen in de variabele $PasswordCredential
.
Na het uitvoeren van de code zou de nieuwe serviceprincipal moeten zijn aangemaakt, en de eigenschappen zijn opgeslagen in de variabele $sp
. Zie het voorbeeldresultaat hieronder.

Het Toekennen van de Rol en Scope
De Azure-serviceprincipal is aangemaakt in de vorige sectie, maar zonder Rol en Scope. Dat komt doordat de parameters -Role
en -Scope
niet samen kunnen worden gebruikt met de parameter -PasswordCredential
. Dit betekent dat er een extra stap nodig is om de rol en scope toe te wijzen aan de serviceprincipal.
De onderstaande code maakt gebruik van de New-AzRoleAssignment
-cmdlet om de reikwijdte en rol van de Azure-serviceprincipal toe te wijzen.
De onderstaande schermafbeelding toont het verwachte resultaat nadat de rol en reikwijdte aan de Azure-serviceprincipal zijn toegewezen.

Zorg er altijd voor dat u het wachtwoord van de serviceprincipal opslaat, omdat er geen manier is om het te herstellen als u het niet hebt kunnen opslaan of bent vergeten.
Verbinding maken met Azure met een Service Principal-wachtwoord
Nu is het tijd om de serviceprincipal te gebruiken. In plaats van in te loggen bij Azure PowerShell met een gebruikersaccount, gebruikt de onderstaande code in plaats daarvan de referenties van de serviceprincipal.
Na het uitvoeren van de bovenstaande code, zou u moeten zijn ingelogd op Azure PowerShell met behulp van de service-principal ATA_RG_Contributor en het wachtwoordreferentie.

Het maken van een Azure Service Principal met certificaat
Naast wachtwoordreferenties kan een Azure-serviceprincipe ook een op certificaten gebaseerde referentie hebben. Het bijbehorende certificaat kan worden uitgegeven door een certificaatautoriteit of zelfondertekend.
In dit voorbeeld wordt de nieuwe Azure-serviceprincipe gemaakt met deze waarden:
Weergavenaam: VSE3_SUB_OWNER
Bereik: VSE3 (Abonnement)
Rol: Eigenaar
Certificaatgeldigheid: 2 jaar
Het verkrijgen van de ID van het Doelscope (Abonnement)
Het bereik van deze nieuwe serviceprincipe omvat het Azure-abonnement met de naam VSE3. Het eerste wat u moet doen is de ID van het VSE3 abonnement ophalen. Gebruik daarvoor de onderstaande code, maar zorg ervoor dat u de waarde van de -SubscriptionName
-parameter wijzigt in uw resourcegroepnaam.
Vervolgens geeft u de naam op van de nieuwe Azure-serviceprincipe en het zelfondertekende certificaat dat moet worden gemaakt.
Het maken van het zelfondertekende certificaat
De onderstaande code maakt het zelfondertekende wachtwoord in de persoonlijke certificaatopslag met de naam CN=VSE3_SUB_OWNER aan. De geldigheid van het certificaat is ingesteld op twee jaar. De eigenschappen van het certificaat worden opgeslagen in de variabele $cert
.
De onderstaande schermafbeelding toont aan dat het certificaat is aangemaakt.

Als je het nieuwe certificaat in een meer vertrouwde weergave (GUI) wilt zien, kun je het vinden in de Certificatenconsole (certmgr.mmc). Raadpleeg de onderstaande afbeelding waarop het certificaat wordt weergegeven.

Het volgende is om de Base64 gecodeerde waarde van het zelfondertekende certificaat te verkrijgen en deze op te slaan in de variabele $keyValue
.
Het creëren van de Service Principal met Certificaat
Nu het certificaat is aangemaakt, is de volgende stap het creëren van de nieuwe Azure-serviceprincipal. De onderstaande code zal de Azure-serviceprincipal aanmaken die het zelfondertekende certificaat als referentie gebruikt. De geldigheidsduur van de referenties komt overeen met de geldigheidsduur van het certificaat.
Je krijgt een vergelijkbare uitvoer, zoals getoond in de onderstaande afbeelding.

Toewijzen van de Rol en Scope
De Azure-serviceprincipal is aangemaakt, maar er zijn nog geen Rol en Scope toegewezen. Dit betekent dat een aanvullende stap nodig is om de rol en scope toe te wijzen aan de serviceprincipal.
De code hieronder gebruikt de New-AzRoleAssignment
cmdlet om de eigenaarrol toe te wijzen aan de VSE3-abonnement van de service principal.
Wanneer de code wordt uitgevoerd, toont de onderstaande schermafbeelding de bevestiging dat de roltoewijzing is voltooid.

Verbinding maken met Azure met een Service Principal Certificate
Nu heb je de service principal gemaakt met een op certificaat gebaseerde referentie. Dit betekent dat je het kunt gebruiken om verbinding te maken met Azure zonder een wachtwoord te gebruiken. In plaats daarvan gebruik je het certificaat dat beschikbaar is op je computer als authenticatiemethode.
In dit voorbeeld is de weergavenaam van de service principal VSE3_SUB_OWNER, en de certificaatnaam is CN=VSE3_SUB_OWNER. De onderstaande code haalt de duimafdruk van het certificaat op uit de persoonlijke certificaatopslag en gebruikt het als aanmeldingsreferentie.
De onderstaande schermafbeelding toont dat met de bovenstaande code de aanmelding bij Azure PowerShell succesvol was met alleen de ApplicationID, Tenant, en Certificate ThumbPrint.

Conclusie
Azure Service Principals is de beveiligingsprincipal die moet worden overwogen bij het maken van referenties voor geautomatiseerde taken en tools die toegang hebben tot Azure-resources. De reikwijdte en rol die moeten worden toegepast, kunnen worden gekozen om “net genoeg” toegangsrechten te geven.
In dit artikel heb je geleerd hoe je Azure Service Principals kunt maken met behulp van PowerShell. Azure Service Principals kunnen een wachtwoord, geheim sleutel of certificaatgebaseerde referenties hebben. Elk van deze soorten referenties heeft zijn voordeel en toepasbare gebruiksscenario’s.
Service principals met een wachtwoord of geheim sleutel referentie zijn draagbaarder, maar worden beschouwd als minder veilig omdat de referentie als platte tekst kan worden gedeeld. Aan de andere kant zijn certificaatgebaseerde referenties de veiligere optie, maar vereisen ze iets meer inspanning om te onderhouden.
De technieken die je in dit artikel hebt geleerd, behandelden alleen de basisprincipes om je op weg te helpen bij het gebruik van Azure-service principals in je automatisering. Er zijn nog veel meer manieren om Azure-service principals te configureren, zoals het toevoegen, verwijderen en resetten van referenties. Het is aan jou om ze te ontdekken terwijl je verder gaat.
Bedankt voor het lezen!
Aanvullende leermiddelen
Hier zijn enkele bronnen die je nuttig zou kunnen vinden om bij dit artikel te gebruiken.
- Connect-AzAccount: Uw toegangspoort tot Azure met PowerShell
- Connect-AzAccount: Uw toegangspoort tot Azure met PowerShell
- Hoe u een willekeurig wachtwoord genereert met PowerShell
- Wat is Azure role-based access control (Azure RBAC)?
- Demystifying Azure AD Service Principals
- Hoe maak je een Azure-serviceprincipe aan via de Azure CLI 2.0
- Hoe toegang tot Office 365-services te beheren met MFA
Source:
https://adamtheautomator.com/azure-service-principal/