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 : 00001111-aaaa-2222-bbbb-3333cccc4444
IdentifierUris : {http://MyDemoWebApp}
HomePage : http://www.contoso.com
Type : Application
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
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 00001111-aaaa-2222-bbbb-3333cccc4444
Secret : System.Security.SecureString
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, http://MyDemoWebApp}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
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 ("00001111-aaaa-2222-bbbb-3333cccc4444", $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 : 00001111-aaaa-2222-bbbb-3333cccc4444
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 : 00001111-aaaa-2222-bbbb-3333cccc4444
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 : 00001111-aaaa-2222-bbbb-3333cccc4444
ObjectId : 698138e7-d7b6-4738-a866-b4e3081a69e4
ObjectType : ServicePrincipal
Andere Azure PowerShell-cmdlets voor rollenbeheer:
- Get-AzureRmRoleDefinition
- New-AzureRmRoleDefinition
- Remove-AzureRmRoleDefinition
- Set-AzureRmRoleDefinition
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 : 00001111-aaaa-2222-bbbb-3333cccc4444
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 00001111-aaaa-2222-bbbb-3333cccc4444 Password
5/5/2016 4:55:27 PM 5/5/2017 4:55:27 PM 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Het oude wachtwoord uit de service-principal verwijderen
Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId 00001111-aaaa-2222-bbbb-3333cccc4444
Confirm
Are you sure you want to remove credential with keyId '00001111-aaaa-2222-bbbb-3333cccc4444' 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 00001111-aaaa-2222-bbbb-3333cccc4444 Password
Informatie over de service-principal verzamelen
$svcprincipal = Get-AzureRmADServicePrincipal -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
$svcprincipal | Select-Object -Property *
ServicePrincipalNames : {http://MyDemoWebApp, 00001111-aaaa-2222-bbbb-3333cccc4444}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : MyDemoWebApp
Id : 698138e7-d7b6-4738-a866-b4e3081a69e4
Type : ServicePrincipal