Delen via


Een Azure-service-principal maken met Azure PowerShell

Waarschuwing

De AzureRM PowerShell-module is vanaf 29 februari 2024 officieel afgeschaft. Gebruikers wordt aangeraden om van AzureRM naar de Az PowerShell-module te migreren om ondersteuning en updates te garanderen.

Hoewel de AzureRM-module nog steeds kan functioneren, wordt deze niet meer onderhouden of ondersteund, waardoor het gebruik naar eigen goeddunken en risico van de gebruiker blijft bestaan. Raadpleeg onze migratiebronnen voor hulp bij de overgang naar de Az-module.

Als u van plan bent om uw app of service te beheren met Azure PowerShell, moet u deze uitvoeren onder een Azure Microsoft Entra-service-principal in plaats van uw eigen referenties. In dit artikel wordt stapsgewijs uitgelegd hoe u met Azure PowerShell een beveiligingsprincipal maakt.

Notitie

U kunt ook een service-principal maken via Azure Portal. Lees Portal gebruiken voor het maken van een Active Directory-toepassing en -service-principal die toegang hebben tot resources voor meer informatie.

Wat is een service-principal?

Een Azure-service-principal is een beveiligings-id die wordt gebruikt door apps, services en automatiseringsprogramma's die door gebruikers zijn gemaakt voor het verkrijgen van toegang tot specifieke Azure-resources. U kunt een service-principal vergelijken met een gebruikers-id (gebruikersnaam en wachtwoord of certificaat) die een specifieke rol heeft en over nauwkeurig omschreven machtigingen beschikt. Anders dan een algemene gebruikers-id, hoeft een service-principal slechts enkele specifieke handelingen uit te kunnen voeren. De beveiliging verbetert erdoor als u er net voldoende machtigingen aan verleent om de beheertaken te kunnen uitvoeren.

Uw eigen machtigingsniveau controleren

Ten eerste moet u over voldoende machtigingen beschikken in zowel uw Microsoft Entra-id als uw Azure-abonnement. U moet een app in de Active Directory kunnen maken en een rol kunnen toewijzen aan de service-principal.

De eenvoudigste manier om te controleren of uw account over de juiste machtigingen beschikt, verloopt via de portal. Zie Check required permission in portal (Vereiste machtigingen controleren in de portal).

Een service-principal voor uw app maken

U kunt de service-principal maken nadat u zich hebt aangemeld bij uw Azure-account. U moet met een van de volgende methoden de door u geïmplementeerde app kunnen identificeren:

  • de unieke naam van de door u geïmplementeerde app, zoals 'MyDemoWebApp' in de volgende voorbeelden of
  • de toepassings-id, de unieke GUID die is gekoppeld aan de door u geïmplementeerde app of service, of het door u geïmplementeerde object

Informatie over uw toepassing verzamelen

De cmdlet Get-AzureRmADApplication kan worden gebruikt om informatie over uw toepassing op te halen.

Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName             : MyDemoWebApp
ObjectId                : 775f64cd-0ec8-4b9b-b69a-8b8946022d9f
IdentifierUris          : {http://MyDemoWebApp}
HomePage                : http://www.contoso.com
Type                    : Application
ApplicationId           : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
AvailableToOtherTenants : False
AppPermissions          :
ReplyUrls               : {}

Een service-principal voor uw toepassing maken

De cmdlet New-AzureRmADServicePrincipal wordt gebruikt om de service-principal te maken.

$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId 00c01aaa-1603-49fc-b6df-b78c4e5138b4
Secret                : System.Security.SecureString
ServicePrincipalNames : {00c01aaa-1603-49fc-b6df-b78c4e5138b4, http://MyDemoWebApp}
ApplicationId         : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
AdfsId                :
Type                  : ServicePrincipal

U kunt nu de eigenschap $servicePrincipal.Secret rechtstreeks in Connect-AzureRmAccount gebruiken (zie 'U aanmelden met de service-principal hieronder'), maar u kunt deze SecureString ook converteren naar een tekenreeks met tekst zonder opmaak voor later gebruik:

$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)

U aanmelden met de service principal

U kunt u nu aanmelden als de nieuwe service-principal voor uw app met behulp van de appId die u hebt opgegeven en het automatisch gegenereerde wachtwoord. U hebt ook de tenant-id voor de service-principal nodig. Uw tenant-id wordt weergegeven als u zich bij Azure aanmeldt met uw persoonlijke referenties. U kunt zich aanmelden met een service-principal met behulp van de volgende opdrachten:

$cred = New-Object System.Management.Automation.PSCredential ("00c01aaa-1603-49fc-b6df-b78c4e5138b4", $servicePrincipal.Secret)
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId 00000000-0000-0000-0000-000000000000

Na een geslaagde aanmelding ziet de uitvoer er als volgt uit:

Environment           : AzureCloud
Account               : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
TenantId              : 00000000-0000-0000-0000-000000000000
SubscriptionId        :
SubscriptionName      :
CurrentStorageAccount :

Gefeliciteerd U kunt deze referenties gebruiken om uw app uit te voeren. De volgende stap bestaat eruit dat u de machtigingen van de service-principal gaat aanpassen.

Rollen beheren

Notitie

Toegangsbeheer op basis van rollen in Azure (RBAC) is een model voor het definiëren en beheren van rollen voor principals van gebruikers en voor service-principals. Aan rollen zijn machtigingensets gekoppeld, die bepalen welke resources een principal kan lezen, waar hij toegang tot heeft, waarvoor hij schrijfrechten heeft en welke hij kan beheren. Zie RBAC: ingebouwde rollen voor meer informatie over RBAC en rollen.

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

De standaardrol van een service-principal is die van Inzender. Op basis van het bereik van de interacties van uw app met de services van Azure-services is dit misschien niet de beste keuze, omdat de machtigingen van deze rol nogal uitgebreid zijn. De rol van Lezer is een beperktere rol en daardoor een goede keuze voor alleen-lezen apps. U kunt details weergeven over rolspecifieke machtigingen of aangepaste machtigingen maken via Azure Portal.

In dit voorbeeld voegen we de rol van Lezer toe aan ons eerdere voorbeeld en verwijderen we de rol Inzender:

New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : b24988ac-6180-42a0-ab88-20f7382dd24c
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal
Remove-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Contributor

De rollen die momenteel zijn toegewezen:

Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG
DisplayName        : MyDemoWebApp
SignInName         :
RoleDefinitionName : Reader
RoleDefinitionId   : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId           : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType         : ServicePrincipal

Andere Azure PowerShell-cmdlets voor rollenbeheer:

De referenties van de beveiligingsprincipal wijzigen

Het is een goede gewoonte om regelmatig de machtigingen te controleren en het wachtwoord te wijzigen. Misschien wilt u naarmate de app verandert, de beveiligingsreferenties ervan ook wel beheren of wijzigen. We kunnen bijvoorbeeld het wachtwoord van de service-principal wijzigen door een nieuw wachtwoord te maken en het oude te verwijderen.

Een nieuw wachtwoord voor de service-principal toevoegen

New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
Secret    : System.Security.SecureString
StartDate : 11/16/2018 12:38:23 AM
EndDate   : 11/16/2019 12:38:23 AM
KeyId     : 6f801c3e-6fcd-42b9-be8e-320b17ba1d36
Type      : Password

Een lijst met referenties voor de service-principal ophalen

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM ca9d4846-4972-4c70-b6f5-a4effa60b9bc Password

Het oude wachtwoord uit de service-principal verwijderen

Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId ca9d4846-4972-4c70-b6f5-a4effa60b9bc
Confirm
Are you sure you want to remove credential with keyId '6f801c3e-6fcd-42b9-be8e-320b17ba1d36' for
service principal objectId '698138e7-d7b6-4738-a866-b4e3081a69e4'.
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y

De lijst met referenties voor de service-principal verifiëren

Get-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password

Informatie over de service-principal verzamelen

$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00c01aaa-1603-49fc-b6df-b78c4e5138b4}
ApplicationId         : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
DisplayName           : MyDemoWebApp
Id                    : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type                  : ServicePrincipal