Delen via


Een Azure-service-principal maken met Azure PowerShell

Geautomatiseerde hulpprogramma's die gebruikmaken van Azure-services moeten altijd beperkte machtigingen hebben. 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 voor gebruik met toepassingen, gehoste services en geautomatiseerde hulpprogramma's voor toegang tot Azure-resources. Deze toegang wordt beperkt door de rollen die zijn toegewezen aan de service-principal, zodat u bepaalt welke resources toegankelijk zijn en op welk niveau. Om veiligheidsredenen wordt het altijd aanbevolen om service-principals te gebruiken met geautomatiseerde hulpprogramma's in plaats van hen toe te staan zich aan te melden met een gebruikersidentiteit.

In dit artikel vindt u de stappen voor het maken, ophalen van informatie over en het opnieuw instellen van een service-principal met Azure PowerShell.

Waarschuwing

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

Vereiste voorwaarden

Een service-principal maken

Maak een service-principal met de cmdlet New-AzADServicePrincipal . Wanneer u een service-principal maakt, kiest u het type aanmeldingsverificatie dat 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.

Opmerking

Als uw account niet gemachtigd is om een service-principal te maken, retourneert New-AzADServicePrincipal een foutbericht met de melding "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 verificatieservice-principal op basis van een wachtwoord is Inzender. Deze rol heeft volledige machtigingen voor lezen en schrijven naar een Azure-account. Zie Rollen voor service-principals beheren voor meer informatie over het beheren van roltoewijzingen.

Zonder andere verificatieparameters wordt verificatie op basis van wachtwoorden gebruikt en wordt er een willekeurig wachtwoord voor u gemaakt. Als u verificatie op basis van wachtwoorden wilt, 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 veilig opslaat om te verifiëren met de service-principal. De waarde wordt niet weergegeven in de console-uitvoer. Als u het wachtwoord kwijtraakt, stelt u de referenties van de service-principal opnieuw in.

Met de volgende code kunt u het geheim exporteren:

$sp.PasswordCredentials.SecretText

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

Belangrijk

Aanmelden met een service-principal vereist de tenant-id waaronder de service-principal is gemaakt. Als u de actieve tenant wilt ophalen wanneer de service-principal is gemaakt, voert u de volgende opdracht uit direct na het maken van de service-principal:

(Get-AzContext).Tenant.Id

Verificatie op basis van certificaat

Belangrijk

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

Service-principals die gebruikmaken van verificatie op basis van certificaten, worden gemaakt met de CertValue parameter. Deze parameter gebruikt een base64-gecodeerde ASCII-tekenreeks van het openbare certificaat. Dit wordt vertegenwoordigd door een PEM-bestand of een met tekst gecodeerde CRT of CER. Binaire coderingen van het openbare certificaat worden niet ondersteund. In deze instructies wordt ervan uitgegaan dat u al een certificaat hebt.

$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 aanmelden met de service-principal hebben ook toegang nodig tot de persoonlijke sleutel van het certificaat.

Belangrijk

Aanmelden met een service-principal vereist de tenant-id waaronder de service-principal is gemaakt. Als u de actieve tenant wilt ophalen wanneer de service-principal is gemaakt, voert u de volgende opdracht uit direct na het maken van de service-principal:

(Get-AzContext).Tenant.Id

Een bestaande service-principal ophalen

Een lijst met service-principals voor de actieve tenant kan worden opgehaald met Get-AzADServicePrincipal. Deze opdracht retourneert standaard alle service-principals in een tenant. Voor grote organisaties kan het lang duren voordat resultaten worden geretourneerd. In plaats daarvan wordt het gebruik van een van de optionele filterargumenten aan de serverzijde aanbevolen:

  • DisplayNameBeginsWith vraagt service-principals aan die een voorvoegsel hebben dat overeenkomt met de opgegeven waarde. De weergavenaam van een service-principal is de waarde die is ingesteld DisplayName tijdens het maken.
  • DisplayName vraagt een exacte overeenkomst aan van een service-principal-naam.

Service-principalrollen beheren

Azure PowerShell heeft de volgende cmdlets voor het beheren van roltoewijzingen:

Zie RBAC: Ingebouwde rollen voor meer informatie over Role-Based Access Control (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 nemen de object-id van de service-principal niet op. Ze nemen de bijbehorende toepassings-id op, die tijdens het maken wordt gegenereerd. Als u de toepassings-id voor een service-principal wilt ophalen, gebruikt u Get-AzADServicePrincipal.

Opmerking

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 u de machtigingen van een service-principal beperkt, moet de rol Inzender worden verwijderd.

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

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Aanmelden met een service-principal

Test de referenties en machtigingen van de nieuwe service-principal door u 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.

Aanmelden met een service-principal met behulp van een wachtwoord:

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

Verificatie op basis van certificaten vereist dat Azure PowerShell informatie kan ophalen uit een lokaal certificaatarchief op basis van een 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 vergeet, gebruikt u New-AzADSpCredential om een nieuwe referentie met een willekeurig wachtwoord toe te voegen. Deze cmdlet biedt geen ondersteuning voor door de gebruiker gedefinieerde referenties bij het opnieuw instellen van het wachtwoord.

Belangrijk

Voordat u nieuwe referenties toewijst, wilt u mogelijk bestaande referenties verwijderen om te voorkomen dat u zich met deze referenties aanmeldt. Gebruik hiervoor de cmdlet Remove-AzADSpCredential :

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

Probleemoplossingsproces

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 met behulp van het volgende voorbeeld.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Deze fout kan ook optreden wanneer u eerder een service-principal hebt gemaakt voor een Azure Active Directory-toepassing. Als u de service-principal verwijdert, is de toepassing nog steeds beschikbaar. Deze toepassing voorkomt dat u een andere service-principal met dezelfde naam maakt.

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

Get-AzADApplication -DisplayName ServicePrincipalName

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

Remove-AzADApplication -DisplayName ServicePrincipalName

Kies anders een alternatieve naam voor de nieuwe service-principal die u probeert te maken.