Een Azure-service-principal maken met Azure PowerShellCreate an Azure service principal with Azure PowerShell

Als u van plan bent om uw app of service met Azure PowerShell te beheren, moet u deze uitvoeren met behulp van een AAD-service-principal (Azure Active Directory) in plaats van met uw eigen referenties.If you plan to manage your app or service with Azure PowerShell, you should run it under an Azure Active Directory (AAD) service principal, rather than your own credentials. In dit onderwerp wordt stapsgewijs uitgelegd hoe u met Azure PowerShell een beveiligingsprincipal maakt.This topic steps you through creating a security principal with Azure PowerShell.

Notitie

U kunt ook een service-principal maken via Azure Portal.You can also create a service principal through the Azure portal. Lees Portal gebruiken voor het maken van een Active Directory-toepassing en -service-principal die toegang hebben tot resources voor meer informatie.Read Use portal to create Active Directory application and service principal that can access resources for more details.

Wat is een service-principal?What is a '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.An Azure service principal is a security identity used by user-created apps, services, and automation tools to access specific 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.Think of it as a 'user identity' (username and password or certificate) with a specific role, and tightly controlled permissions. Anders dan een algemene gebruikers-id, hoeft een service-principal slechts enkele specifieke handelingen uit te kunnen voeren.It only needs to be able to do specific things, unlike a general user identity. De beveiliging verbetert erdoor als u er net voldoende machtigingen aan verleent om de beheertaken te kunnen uitvoeren.It improves security if you only grant it the minimum permissions level needed to perform its management tasks.

Uw eigen machtigingsniveau controlerenVerify your own permission level

In de eerste plaats moet u over voldoende machtigingen beschikken in uw Azure Active Directory en uw Azure-abonnement.First, you must have sufficient permissions in both your Azure Active Directory and your Azure subscription. Meer specifiek moet u een app in de Active Directory kunnen maken en een rol kunnen toewijzen aan de service-principal.Specifically, you must be able to create an app in the Active Directory, and assign a role to the service principal.

De eenvoudigste manier om te controleren of uw account over de juiste machtigingen beschikt, verloopt via de portal.The easiest way to check whether your account has adequate permissions is through the portal. Zie Check required permission in portal (Vereiste machtigingen controleren in de portal).See Check required permission in portal.

Een service-principal voor uw app makenCreate a service principal for your app

U kunt de service-principal maken nadat u zich hebt aangemeld bij uw Azure-account.Once you are signed into your Azure account, you can create the service principal. U moet met een van de volgende methoden de door u geïmplementeerde app kunnen identificeren:You must have one of the following ways to identify your deployed app:

  • de unieke naam van de door u geïmplementeerde app, zoals 'MyDemoWebApp' in de volgende voorbeelden ofThe unique name of your deployed app, such as "MyDemoWebApp" in the following examples, or
  • de toepassings-id, de unieke GUID die is gekoppeld aan de door u geïmplementeerde app of service, of het door u geïmplementeerde objectthe Application ID, the unique GUID associated with your deployed app, service, or object

Informatie over uw toepassing verzamelenGet information about your application

De cmdlet Get-AzureRmADApplication kan worden gebruikt om informatie over uw toepassing te achterhalen.The Get-AzureRmADApplication cmdlet can be used to discover information about your application.

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 makenCreate a service principal for your application

De cmdlet New-AzureRmADServicePrincipal wordt gebruikt om de service-principal te maken.The New-AzureRmADServicePrincipal cmdlet is used to create the service principal.

Add-Type -Assembly System.Web
$password = [System.Web.Security.Membership]::GeneratePassword(16,3)
$securePassword = ConvertTo-SecureString -Force -AsPlainText -String $password
New-AzureRmADServicePrincipal -ApplicationId 00c01aaa-1603-49fc-b6df-b78c4e5138b4 -Password $securePassword
DisplayName                    Type                           ObjectId
-----------                    ----                           --------
MyDemoWebApp                   ServicePrincipal               698138e7-d7b6-4738-a866-b4e3081a69e4

Informatie over de service-principal verzamelenGet information about the service principal

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

U aanmelden met de service principalSign in using the service principal

U kunt u nu aanmelden als de nieuwe service-principal voor uw app met behulp van de appId en het wachtwoord die u hebt opgegeven.You can now sign in as the new service principal for your app using the appId and password you provided. U moet de tenant-id voor uw account opgeven.You need to supply the Tenant Id for your account. Uw tenant-id wordt weergegeven als u zich bij Azure met uw persoonlijke referenties aanmeldt.Your Tenant Id is displayed when you sign into Azure with your personal credentials.

$cred = Get-Credential -UserName $svcprincipal.ApplicationId -Message "Enter Password"
Connect-AzureRmAccount -Credential $cred -ServicePrincipal -TenantId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Voer deze opdracht uit vanuit een nieuwe PowerShell-sessie.Run this command from a new PowerShell session. Als de aanmelding is gelukt, krijgt u uitvoer te zien die er ongeveer als volgt uitziet:After a successfully signing on you see output something like this:

Environment           : AzureCloud
Account               : 00c01aaa-1603-49fc-b6df-b78c4e5138b4
TenantId              : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SubscriptionId        :
SubscriptionName      :
CurrentStorageAccount :

Gefeliciteerd.Congratulations! U kunt deze referenties gebruiken om uw app uit te voeren.You can use these credentials to run your app. De volgende stap bestaat eruit dat u de machtigingen van de service-principal gaat aanpassen.Next, you need to adjust the permissions of the service principal.

Rollen beherenManaging roles

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.Azure Role-Based Access Control (RBAC) is a model for defining and managing roles for user and 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.Roles have sets of permissions associated with them, which determine the resources a principal can read, access, write, or manage. Zie RBAC: ingebouwde rollen voor meer informatie over RBAC en rollen.For more information on RBAC and roles, see RBAC: Built-in roles.

Azure PowerShell biedt de volgende cmdlets voor het beheren van roltoewijzingen:Azure PowerShell provides the following cmdlets to manage role assignments:

De standaardrol van een service-principal is die van Inzender.The default role for a service principal is Contributor. 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.It may not be the best choice depending on the scope of your app's interactions with Azure services, given its broad permissions. De rol van Lezer is een beperktere rol en daardoor een goede keuze voor alleen-lezen apps.The Reader role is more restrictive and can be a good choice for read-only apps. U kunt details weergeven over rolspecifieke machtigingen of aangepaste machtigingen maken via Azure Portal.You can view details on role-specific permissions or create custom ones through the Azure portal.

In dit voorbeeld voegen we de rol van Lezer toe aan ons eerdere voorbeeld en verwijderen we de rol Inzender:In this example, we add the Reader role to our prior example, and delete the Contributor one:

New-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4 -RoleDefinitionName Reader
RoleAssignmentId   : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/818892f2-d075-46a1-a3a2-3a4e1a12fcd5
Scope              : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/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:To view the current roles assigned:

Get-AzureRmRoleAssignment -ResourceGroupName myRG -ObjectId 698138e7-d7b6-4738-a866-b4e3081a69e4
RoleAssignmentId   : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/myRG/providers/Microsoft.Authorization/roleAssignments/0906bbd8-9982-4c03-8dae-aeaae8b13f9e
Scope              : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/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:Other Azure PowerShell cmdlets for role management:

De referenties van de beveiligingsprincipal wijzigenChange the credentials of the security principal

Het is een goede gewoonte om regelmatig de machtigingen te controleren en het wachtwoord te wijzigen.It's a good security practice to review the permissions and update the password regularly. Misschien wilt u naarmate de app verandert, de beveiligingsreferenties ervan ook wel beheren of wijzigen.You may also want to manage and modify the security credentials as your app changes. We kunnen bijvoorbeeld het wachtwoord van de service-principal wijzigen door een nieuw wachtwoord te maken en het oude te verwijderen.For example, we can change the password of the service principal by creating a new password and removing the old one.

Een nieuw wachtwoord voor de service-principal toevoegenAdd a new password for the service principal

$password = [System.Web.Security.Membership]::GeneratePassword(16,3)
New-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -Password $password
StartDate           EndDate             KeyId                                Type
---------           -------             -----                                ----
3/8/2017 5:58:24 PM 3/8/2018 5:58:24 PM 6f801c3e-6fcd-42b9-be8e-320b17ba1d36 Password

Een lijst met referenties voor de service-principal ophalenGet a list of credentials for the service principal

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 verwijderenRemove the old password from the service principal

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ërenVerify the list of credentials for the service principal

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