Créer un principal du service Azure avec Azure PowerShell

Les outils automatisés qui utilisent les services Azure doivent toujours avoir des autorisations restreintes. Plutôt que de faire se connecter des applications en tant qu’utilisateur entièrement privilégié, Azure offre des principaux du service.

Un principal de service Azure est une identité créée pour une utilisation avec les applications, des services hébergés et des outils automatisés permettant d’accéder aux ressources Azure. Cet accès est limité par les rôles assignés au principal du service, ce qui vous permet de contrôler quelles ressources sont accessibles et à quel niveau. Pour des raisons de sécurité, il est toujours recommandé d’utiliser les principaux du service avec des outils automatisés, plutôt que de leur permettre de se connecter avec une identité d’utilisateur.

Cet article vous explique les étapes à suivre pour créer un principal du service, obtenir des informations à son sujet et le réinitialiser avec Azure PowerShell.

Avertissement

Lorsque vous créez un principal de service avec la commande New-AzADServicePrincipal, la sortie contient les informations d’identification que vous devez protéger. Vous pouvez aussi utiliser des identités managées pour éviter d’avoir à utiliser les informations d’identification.

Créer un principal du service

Créez un principal de service avec l’applet de commande New-AzADServicePrincipal. Lorsque vous créez un principal de service, vous choisissez le type d’authentification de connexion qu’il utilise.

Important

À compter de la version 7.x du module Az PowerShell, New-AzADServicePrincipal n’attribue plus par défaut le rôle Contributeur au principal de service. Pour attribuer un rôle spécifique à un principal de service, consultez Étapes pour ajouter une attribution de rôle.

Notes

Si votre compte ne dispose pas d’autorisations pour créer un principal de service, New-AzADServicePrincipal retourne un message d’erreur contenant « Privilèges insuffisants pour effectuer l’opération ». Contactez votre administrateur Azure Active Directory pour créer un principal de service.

Il existe deux types d’authentification disponibles pour les principaux de service : L’authentification basée sur un mot de passe et l’authentification basée sur un certificat.

L’authentification basée sur un mot de passe

Important

Le rôle par défaut Contributeur est attribué à un principal de service d’authentification par mot de passe. Ce rôle dispose des autorisations complètes de lecture et d’écriture dans un compte Azure. Pour plus d’informations sur la gestion des attributions de rôles, consultez Gérer les rôles du principal du service.

Sans autres paramètres d’authentification, l’authentification par mot de passe est utilisée et un mot de passe aléatoire est créé. Si vous souhaitez une authentification basée sur un mot de passe, cette méthode est recommandée.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

L’objet retourné contient la propriété PasswordCredentials.SecretText qui inclut le mot de passe généré. Veillez à stocker cette valeur dans un endroit sécurisé pour vous authentifier auprès du principal de service. Sa valeur ne s’affichera pas dans la console. Si vous perdez le mot de passe, effectuez une réinitialisation des informations d’identification du principal de service.

Le code suivant vous permet d’exporter le secret :

$sp.PasswordCredentials.SecretText

L’objet retourné par New-AzADServicePrincipal contient les membres Id et DisplayName, qui peuvent être utilisés pour se connecter au principal de service.

Important

La connexion au principal de service nécessite l’ID du locataire dans lequel le principal de service a été créé. Pour obtenir le locataire qui était actif au moment de la création du principal de service, exécutez la commande suivante immédiatement après avoir créé le principal de service :

(Get-AzContext).Tenant.Id

Authentification par certificat

Important

Aucun rôle par défaut n’est attribué lors de la création d’un principal de service d’authentification par certificat. Pour plus d’informations sur la gestion des attributions de rôles, consultez Gérer les rôles du principal du service.

Les principaux de service qui utilisent l’authentification par certificat sont créés avec le paramètre CertValue. Ce paramètre accepte la chaîne ASCII codée en base64 du certificat public. Celui-ci est représenté par un fichier PEM, ou par un fichier CRT ou CER avec texte encodé. Les encodages binaires du certificat public ne sont pas pris en charge. Ces instructions supposent que vous disposez déjà d’un certificat.

$cert = <public certificate as base64-encoded string>
$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName -CertValue $cert

L’objet retourné par New-AzADServicePrincipal contient les propriétés Id et DisplayName, qui peuvent être utilisées pour se connecter au principal de service. Les clients qui se connectent au principal de service ont également besoin d’accéder à la clé privée du certificat.

Important

La connexion au principal de service nécessite l’ID du locataire dans lequel le principal de service a été créé. Pour obtenir le locataire qui était actif au moment de la création du principal de service, exécutez la commande suivante immédiatement après avoir créé le principal de service :

(Get-AzContext).Tenant.Id

Obtenir un principal de service existant

Vous pouvez récupérer la liste des principaux de service du locataire actif à l’aide de Get-AzADServicePrincipal. Par défaut, cette commande retourne tous les principaux de service d’un locataire. Pour les grandes organisations, la génération des résultats peut prendre beaucoup de temps. Pour cette raison, il est recommandé d’utiliser l’un des arguments de filtrage côté serveur facultatifs :

  • DisplayNameBeginsWith demande les principaux de service ayant un préfixe qui correspond à la valeur fournie. Le nom d’affichage d’un principal de service correspond à la valeur définie avec DisplayName lors de la création.
  • DisplayName demande une correspondance exacte du nom du principal de service.

Gérer les rôles du principal du service

Azure PowerShell fournit les applets de commande suivantes pour gérer les attributions de rôles :

Pour plus d’informations sur les rôles et le contrôle d’accès en fonction du rôle, consultez RBAC : rôles intégrés pour les ressources Azure.

L’exemple suivant ajoute le rôle Lecteur et supprime le rôle Contributeur :

New-AzRoleAssignment -ApplicationId <service principal application ID> -RoleDefinitionName 'Reader'
Remove-AzRoleAssignment -ObjectId <service principal object ID> -RoleDefinitionName 'Contributor'

Important

Les applets de commande d’attribution de rôle n’acceptent pas l’ID d’objet du principal de service. Elles acceptent l’ID d’application associé, qui est généré au moment de la création. Pour obtenir l’ID d’application d’un principal de service, utilisez Get-AzADServicePrincipal.

Notes

Si votre compte ne dispose pas d’autorisations pour attribuer un rôle, un message d’erreur vous indique que votre compte « n’est pas autorisé à effectuer l’action 'Microsoft.Authorization/roleAssignments/write' ». Contactez votre administrateur Azure Active Directory pour gérer les rôles.

L’ajout d’un rôle ne restreint pas les autorisations précédemment assignées. Lors de la restriction des autorisations du principal du service, le rôle de Contributeur dot être supprimé.

Les modifications peuvent être vérifiées en répertoriant les rôles attribués :

Get-AzRoleAssignment -ServicePrincipalName ServicePrincipalName

Se connecter en tant que principal du service

Testez les informations d’identification et les autorisations du nouveau principal du service en vous connectant. Pour vous connecter à un principal de service, vous avez besoin de la valeur applicationId qui lui est associée, ainsi que du locataire dans lequel il a été créé.

Pour vous connecter avec un principal du service utilisant un mot de passe :

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

L’authentification par certificat nécessite qu’Azure PowerShell puisse récupérer des informations à partir d’un magasin de certificats local en se basant sur l’empreinte numérique du certificat.

Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>

Pour obtenir des instructions sur l’importation d’un certificat dans un magasin d’informations d’identification accessible par PowerShell, consultez Se connecter avec Azure PowerShell.

Réinitialiser les informations d’identification

Si vous avez oublié les informations d’identification d’un principal de service, utilisez New-AzADSpCredential pour ajouter de nouvelles informations d’identification avec un mot de passe aléatoire. Cette applet de commande ne prend pas en charge les informations d’identification définies par l’utilisateur lors de la réinitialisation du mot de passe.

Important

Avant d’attribuer de nouvelles informations d’identification, vous pouvez supprimer les informations d’identification existantes afin d’empêcher qu’elles soient utilisées pour la connexion. Pour ce faire, utilisez l’applet de commande Remove-AzADSpCredential :

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

Dépannage

Si vous recevez le message d’erreur : « New-AzADServicePrincipal : Un autre objet avec la même valeur pour la propriété identifierUris existe déjà » , vérifiez qu’un principal de service portant le même nom n’existe pas déjà.

Get-AzAdServicePrincipal -DisplayName ServicePrincipalName

Si le principal de service existant n’est plus nécessaire, vous pouvez le supprimer en utilisant l’exemple suivant.

Remove-AzAdServicePrincipal -DisplayName ServicePrincipalName

Cette erreur peut également se produire si vous avez déjà créé un principal de service pour une application Azure Active Directory. Si vous supprimez le principal de service, l’application est toujours disponible. Cette application vous empêche de créer un autre principal de service portant le même nom.

Vous pouvez utiliser l’exemple suivant pour vérifier qu’une application Azure Active Directory portant le même nom n’existe pas :

Get-AzADApplication -DisplayName ServicePrincipalName

Si une application portant le même nom n’est plus nécessaire, vous pouvez la supprimer en utilisant l’exemple suivant.

Remove-AzADApplication -DisplayName ServicePrincipalName

Sinon, donnez un autre nom au nouveau principal de service que vous essayez de créer.