Een Azure-service-principal maken met Azure PowerShell

Geautomatiseerde hulpprogramma's die gebruikmaken van Azure-services moeten altijd beperkte machtigingen krijgen. In plaats van toepassingen zich te laten aanmelden als een gebruiker met volledige rechten, biedt Azure Service Principals.

Een Azure-service-principal is een identiteit die is gemaakt om toepassingen, gehoste services en geautomatiseerde hulpprogramma's toegang te geven tot Azure-resources. Deze toegang wordt beperkt door de rol die wordt toegewezen aan de service-principal, zodat u kunt bepalen welke resources kunnen worden geopend en op welk niveau. Uit veiligheidsoverwegingen is het altijd aanbevolen om voor geautomatiseerde tools service-principals te gebruiken, in plaats van deze zich te laten aanmelden met een gebruikers-id.

In dit artikel leest u hoe u service-principals kunt maken en opnieuw kunt instellen en hoe u hier meer informatie over kunt vinden.

Let op

Wanneer u een service-principal maakt met de opdracht New-AzADServicePrincipal, bevat de uitvoer de referenties die u moet beschermen. Als alternatief kunt u overwegen beheerde identiteiten te gebruiken om te voorkomen dat u referenties moet gebruiken.

Vereisten

Een service-principal maken

Maak een service-principal met de cmdlet New-AzADServicePrincipal. Wanneer u een service-principal maakt, kiest u het type verificatie dat voor aanmelding wordt gebruikt.

Belangrijk

Vanaf Az PowerShell-module versie 7.x wijst New-AzADServicePrincipal standaard de rol Inzender niet meer toe aan de service-principal. Zie Stappen voor het toevoegen van een roltoewijzing als u een specifieke rol aan een service-principal wilt toewijzen.

Notitie

Als uw account niet gemachtigd is om een service-principal te maken, New-AzADServicePrincipal wordt een foutbericht geretourneerd met onvoldoende bevoegdheden om de bewerking te voltooien. Neem contact op met uw Microsoft Entra-beheerder om een service-principal te maken.

In een Microsoft Entra ID-directory waarin gebruikersinstelling Gebruikers kunnen toepassingen registreren is ingesteld op Nee, moet u lid zijn van een van de volgende ingebouwde rollen van Microsoft Entra ID (die de actie hebben: microsoft.directory/applications/createAsOwner of microsoft.directory/applications/create):

Zie Beperken wie toepassingen kan maken voor meer informatie over gebruikersinstellingen in Microsoft Entra ID.

Er zijn twee typen verificatie beschikbaar voor service-principals: verificatie op basis van wachtwoorden en verificatie op basis van certificaten.

Verificatie op basis van een wachtwoord

Belangrijk

De standaardrol voor een service-principal met verificatie op basis van een wachtwoord is Inzender. Deze rol heeft alle machtigingen om in een Azure-account te lezen en te schrijven. Zie voor informatie over het beheren van roltoewijzingen Rollen voor service-principal beheren.

Zonder verdere verificatieparameters wordt verificatie op basis van een wachtwoord gebruikt en wordt er een willekeurig wachtwoord voor u gemaakt. Als u verificatie op basis van een wachtwoord wilt gebruiken, wordt deze methode aanbevolen.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

Het geretourneerde object bevat de PasswordCredentials.SecretText eigenschap met het gegenereerde wachtwoord. Zorg ervoor dat u deze waarde ergens op een beveiligde plek opslaat om te verifiëren met de service-principal. De waarde wordt niet weergegeven in de console-uitvoer. Als u het wachtwoord kwijtraakt, kunt u de referenties voor de service-principal opnieuw instellen.

Met de volgende code kunt u het geheim exporteren:

$sp.PasswordCredentials.SecretText

Het object dat wordt geretourneerd door New-AzADServicePrincipal, bevat de leden Id en DisplayName, die allebei kunnen worden gebruikt voor aanmelding met de service-principal.

Belangrijk

Bij aanmelden met een service-principal is de tenant-id vereist waaronder de service-principal is gemaakt. Voer onmiddellijk na het maken van de service-principal de volgende opdracht uit om de actieve tenant op te halen waaronder de service-principal is gemaakt:

(Get-AzContext).Tenant.Id

Verificatie op basis van certificaat

Belangrijk

Er is geen standaardrol toegewezen bij het maken van een service-principal met verificatie op basis van certificaten. Zie voor informatie over het beheren van roltoewijzingen Rollen voor service-principal beheren.

U kunt service-principals maken die gebruikmaken van verificatie op basis van een certificaat, met de parameter CertValue. Deze parameter gebruikt een ASCII-tekenreeks met Base64-codering van het openbare certificaat. Deze is opgeslagen als een PEM-bestand of een tekstgecodeerd CRT- of CER-bestand. Binaire coderingen van het openbare certificaat worden niet ondersteund. Voor deze instructies wordt ervan uitgegaan dat u al over een certificaat beschikt.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

Het object dat wordt geretourneerd uit New-AzADServicePrincipal bevat de Id en DisplayName eigenschappen, die kunnen worden gebruikt voor aanmelding met de service-principal. Clients die zich met de service-principal aanmelden, moeten ook toegang hebben tot de persoonlijke sleutel van het certificaat.

Belangrijk

Bij aanmelden met een service-principal is de tenant-id vereist waaronder de service-principal is gemaakt. Voer onmiddellijk na het maken van de service-principal de volgende opdracht uit om de actieve tenant op te halen waaronder de service-principal is gemaakt:

(Get-AzContext).Tenant.Id

Een bestaande service-principal ophalen

U kunt een lijst met service-principals ophalen voor de actieve tenant met de opdracht Get-AzADServicePrincipal. Deze opdracht retourneert standaard alle service-principals in een tenant. Bij grote organisaties kan het lang duren om resultaten te retourneren. In dergelijke gevallen raden we aan een van de optionele argumenten te gebruiken om al aan de serverzijde te filteren:

  • Met DisplayNameBeginsWith vraagt u service-principals op waarvan het voorvoegsel overeenkomt met de opgegeven waarde. De weergavenaam van een service-principal is de waarde die tijdens het aanmaken is ingesteld met DisplayName.
  • Met DisplayName vraagt u resultaten op die exact overeenkomen met de opgegeven service-principal-naam.

Service-principalrollen beheren

Azure PowerShell beschikt over de volgende cmdlets voor het beheren van roltoewijzingen:

Zie RBAC: ingebouwde rollen voor meer informatie over rollen en op rollen gebaseerd toegangsbeheer (RBAC).

In het volgende voorbeeld wordt de rol Lezer toegevoegd en wordt de rol Inzender verwijderd:

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Belangrijk

Cmdlets voor roltoewijzing werken niet met het object-id van de service-principal. In plaats daarvan gebruiken ze de bijbehorende toepassings-id, die wordt gegenereerd tijdens het maken van de service-principal. U kunt de toepassings-id voor een service-principal ophalen met Get-AzADServicePrincipal.

Notitie

Als uw account niet gemachtigd is om een rol toe te wijzen, ziet u een foutbericht dat uw account geen autorisatie heeft om de actie 'Microsoft.Authorization/roleAssignments/write' uit te voeren. Neem contact op met uw Microsoft Entra-beheerder om rollen te beheren.

Als u een rol toevoegt, worden eerder toegewezen machtigingen niet beperkt. Wanneer de machtigingen van een service-principal worden beperkt, moet de rol Inzender worden verwijderd.

De wijzigingen kunnen worden geverifieerd door de toegewezen rollen in een lijst weer te geven:

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Aanmelden met een service-principal

Test de referenties van de nieuwe service-principal en de machtigingen door u met deze referenties aan te melden. Als u zich wilt aanmelden met een service-principal, hebt u de applicationId waarde nodig die eraan is gekoppeld en de tenant waarvoor deze is gemaakt.

Als u zich wilt aanmelden met de service-principal met behulp van een wachtwoord, gebruikt u:

# Use the application ID as the username, and the secret as password
$credentials = Get-Credential
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant <tenant ID>

Voor verificatie op basis van een certificaat is het nodig dat Azure PowerShell informatie kan ophalen uit een lokaal certificaatarchief, op basis van de vingerafdruk van een certificaat.

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Zie Verificatie op basis van certificaten voor instructies voor het importeren van een certificaat in een referentiearchief dat toegankelijk is voor PowerShell

Referenties opnieuw instellen

Als u de referenties voor een service-principal bent vergeten, gebruikt u New-AzADSpCredential om nieuwe referenties toe te voegen met een willekeurig wachtwoord. Deze cmdlet biedt geen ondersteuning voor door de gebruiker gedefinieerde referenties bij het opnieuw instellen van het wachtwoord.

Belangrijk

Voordat u nieuwe referenties toewijst, kunt u het beste bestaande referenties verwijderen, om te voorkomen dat hiermee wordt aangemeld. Om dit te doen, gebruikt u de cmdlet Remove-AzADSpCredential:

Remove-AzADSpCredential -DisplayName ServicePrincipalName
$newCredential = New-AzADSpCredential -ServicePrincipalName ServicePrincipalName

Probleemoplossing

Als u de fout 'New-AzADServicePrincipal: Een ander object met dezelfde waarde voor eigenschap-idUris bestaat al', controleert u of er nog geen service-principal met dezelfde naam bestaat.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Als de bestaande service-principal niet meer nodig is, kunt u deze verwijderen aan de hand van het volgende voorbeeld.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Deze fout kan ook optreden als u eerder een service-principal voor een Azure Active Directory toepassing hebt gemaakt. Als u de service-principal verwijdert, is de toepassing nog steeds beschikbaar. Deze toepassing zorgt ervoor dat u geen andere service-principal met dezelfde naam kunt maken.

U kunt het volgende voorbeeld gebruiken om te controleren of er geen Microsoft Entra-toepassing met dezelfde naam bestaat:

Get-AzADApplication -DisplayName ServicePrincipalName

Als er een toepassing met dezelfde naam bestaat en niet meer nodig is, kan deze worden verwijderd aan de hand van het volgende voorbeeld.

Remove-AzADApplication -DisplayName ServicePrincipalName

U kunt er ook voor kiezen de nieuwe service-principal een andere naam te geven.