Créer un principal de service Azure avec Azure PowerShell
Avertissement
Le module AzureRM PowerShell a été officiellement déconseillé à compter du 29 février 2024. Les utilisateurs sont invités à migrer d’AzureRM vers le module Az PowerShell afin de s’assurer d’une prise en charge et des mises à jour continues.
Bien que le module AzureRM puisse toujours fonctionner, il ne fait plus l’objet d’une maintenance ou d’un support, et son utilisation se fait donc à la discrétion et au risque de l’utilisateur. Consultez nos ressources sur la migration pour obtenir des conseils sur la transition vers le module Az.
Si vous prévoyez de gérer votre application ou service avec Azure PowerShell, vous devez l’exécuter avec un principal de service Microsoft Entra plutôt qu’avec vos informations d’identification personnelles. Cet article vous explique pas à pas comment créer un principal de sécurité avec Azure PowerShell.
Notes
Vous pouvez également créer un principal du service par l’intermédiaire du portail Azure. Pour plus d’informations, consultez Utiliser le portail pour créer une application et un principal du service Active Directory pouvant accéder aux ressources.
Qu’est-ce qu’un « principal du service » ?
Un principal du service Azure est une identité de sécurité utilisée par les applications, les services et les outils d’automatisation créés par l’utilisateur pour accéder à des ressources Azure spécifiques. Il équivaut un peu à une identité d’utilisateur (nom d’utilisateur et mot de passe ou certificat) avec un rôle spécifique et des autorisations étroitement contrôlées. Un principal du service doit uniquement effectuer des opérations spécifiques, contrairement à une identité d’utilisateur générale. Il améliore la sécurité si vous lui octroyez seulement le niveau d’autorisation minimal nécessaire pour effectuer ses tâches de gestion.
Vérifier votre propre niveau d’autorisation
Tout d’abord, vous devez avoir les autorisations suffisantes dans votre instance Microsoft Entra ID et votre abonnement Azure. Vous devez être en mesure de créer une application dans Active Directory et d’affecter un rôle au principal du service.
Le moyen le plus simple de vous assurer que votre compte dispose des autorisations appropriées est d’utiliser le portail. Consultez Vérifier l’autorisation requise dans le portail.
Créer un principal du service pour votre application
Une fois que vous êtes connecté à votre compte Azure, vous pouvez créer le principal de service. Vous devez identifier votre application déployée par l’une des informations suivantes :
- Le nom unique de votre application déployée (par exemple, « MyDemoWebApp » dans les exemples suivants)
- L’ID de l’application, le GUID unique associé à votre application, service ou objet déployé
Obtenir des informations sur votre application
Vous pouvez utiliser la cmdlet Get-AzureRmADApplication
pour obtenir des informations à propos de votre application.
Get-AzureRmADApplication -DisplayNameStartWith MyDemoWebApp
DisplayName : MyDemoWebApp
ObjectId : 775f64cd-0ec8-4b9b-b69a-8b8946022d9f
IdentifierUris : {http://MyDemoWebApp}
HomePage : http://www.contoso.com
Type : Application
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
AvailableToOtherTenants : False
AppPermissions :
ReplyUrls : {}
Créer un principal du service pour votre application
Utilisez l’applet de commande New-AzureRmADServicePrincipal
pour créer le principal du service.
$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
Vous pouvez alors utiliser directement la propriété $servicePrincipal.Secret dans Connect-AzureRmAccount (voir « Connexion à l’aide du principal de service » ci-dessous), ou convertir la chaîne SecureString en chaîne de texte brut pour une utilisation ultérieure :
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($servicePrincipal.Secret)
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($BSTR)
Se connecter en tant que principal du service
Vous pouvez maintenant vous connecter en tant que nouveau principal du service pour votre application en utilisant la valeur appId que vous avez renseignée, et la valeur password générée automatiquement. Vous allez également avoir besoin de l’ID de locataire pour le principal de service. Votre ID de locataire s’affiche lorsque vous vous connectez à Azure avec vos informations d’identification personnelles. Pour vous connecter avec un principal du service, utilisez les commandes suivantes :
$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
Lorsque la connexion aboutit, la sortie est semblable à ce qui suit :
Environment : AzureCloud
Account : 00001111-aaaa-2222-bbbb-3333cccc4444
TenantId : 00000000-0000-0000-0000-000000000000
SubscriptionId :
SubscriptionName :
CurrentStorageAccount :
Félicitations ! Vous pouvez utiliser ces informations d’identification pour exécuter votre application. Ensuite, modifiez les autorisations du principal du service.
Gestion des rôles
Notes
Le contrôle d’accès en fonction du rôle (RBAC) dans Azure est un modèle utilisé pour définir et gérer les rôles des principaux de l’utilisateur et du service. Les rôles sont associés à des ensembles d’autorisations, qui déterminent les ressources qu’un principal peut lire, écrire ou gérer, ou auxquelles il peut accéder. Pour plus d’informations sur le contrôle d’accès en fonction du rôle et sur les différents rôles, consultez Rôles intégrés pour le contrôle d’accès en fonction du rôle Azure.
Azure PowerShell fournit les applets de commande suivantes pour gérer les attributions de rôle :
Un principal du service a le rôle Contributor (Collaborateur) par défaut. En raison des autorisations générales qu’il inclut, ce rôle n’est pas forcément le meilleur choix en fonction de l’étendue des interactions de votre application avec les services Azure. Le rôle Reader (Lecteur) étant plus restrictif, il peut être un bon choix pour les applications en lecture seule. Vous pouvez afficher les détails des autorisations propres à chaque rôle ou créer des autorisations personnalisées par le biais du portail Azure.
Dans cet exemple, nous ajoutons le rôle Reader à notre exemple précédent, et nous supprimons le rôle Contributor :
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
Pour afficher les rôles actuellement attribués :
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
Autres applets de commande Azure PowerShell pour la gestion des rôles :
- Get-AzureRmRoleDefinition
- New-AzureRmRoleDefinition
- Remove-AzureRmRoleDefinition
- Set-AzureRmRoleDefinition
Changer les informations d’identification du principal de sécurité
Nous vous recommandons de vérifier les autorisations et de mettre à jour le mot de passe régulièrement. Vous pouvez également gérer et modifier les informations d’identification de sécurité à mesure que votre application évolue. Par exemple, changez le mot de passe du principal du service en remplaçant le mot de passe existant par un nouveau mot de passe de votre choix.
Ajouter un nouveau mot de passe pour le principal du service
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
Obtenir la liste des informations d’identification pour le principal du service
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 ca9d4846-4972-4c70-b6f5-a4effa60b9bc Password
Supprimer l’ancien mot de passe du principal du service
Remove-AzureRmADSpCredential -ServicePrincipalName http://MyDemoWebApp -KeyId ca9d4846-4972-4c70-b6f5-a4effa60b9bc
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
Vérifier la liste des informations d’identification pour le principal du service
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
Obtenir des informations sur le principal du service
$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