Lorsque vous devez automatiser des tâches dans Azure à l’aide de scripts et d’outils, envisagez-vous d’utiliser des comptes de service ou des principaux services Azure ? Il n’est pas rare que certains créent simplement un nouveau compte de service, lui attribuent tous les rôles d’administrateur souhaités et l’excluent de l’authentification multi-facteur (MFA).
I know what you’re thinking – “that is a horrible idea”. Of course, it is! And for sure, your IT Sec will give you a lot of grief if you did all that.
Mais quelle est l’alternative ? Comment pouvez-vous utiliser une autorisation privilégiée à portée limitée qui ne nécessite pas d’être exclue de l’authentification multi-facteur (MFA) ? Vous avez de la chance, car c’est ce que cet article va vous apprendre.
Dans cet article, vous apprendrez ce qu’est un principal de service Azure. Vous apprendrez comment créer des principaux de service avec différents types d’informations d’identification, tels que des mots de passe, des clés secrètes et des certificats.
Il existe de nombreux outils pour créer des principaux de service Azure, notamment l’utilisation du portail Azure, du centre d’administration Azure Active Directory, de Azure AD PowerShell, de Azure CLI et de Azure PowerShell. L’outil qui sera au centre de cet article est Azure PowerShell.
Toujours intéressé ? Continuez à lire et commençons !
Exigences
Étant donné qu’il s’agit d’un article d’apprentissage par la pratique, voici quelques prérequis pour que vous puissiez suivre.
- Accès à un abonnement Azure. Il serait préférable que vous travailliez sur un locataire de test. Si vous n’en avez pas, vous pouvez vous inscrire à un essai gratuit.
- Accès à un ordinateur exécutant Windows 10 avec PowerShell 5.1.
- Le module PowerShell Azure (Azure PowerShell module) doit être installé.
Azure Service Principal vs Service Account
Les outils et scripts d’automatisation nécessitent souvent un accès administratif ou privilégié. Par exemple, la création de comptes de stockage ou le démarrage et l’arrêt de machines virtuelles selon une planification. Et la plupart des administrateurs utilisent probablement un compte utilisateur entièrement privilégié (appelé compte de service) pour configurer les exigences de connexion des scripts.
A service account is essentially a privileged user account used to authenticate using a username and password. And, if used with automation, a service account is most likely excluded from any conditional access policies or multi-factor authentication.
D’autre part, un principal de service Azure peut être configuré pour utiliser un nom d’utilisateur et un mot de passe ou un certificat pour l’authentification. Pensez-y comme une identité utilisateur sans utilisateur, mais plutôt une identité pour une application.
Un principal de service Azure peut être assigné avec un accès suffisant à un unique et spécifique ressource Azure. Par exemple, vous pouvez créer un principal de service Azure qui a un accès basé sur les rôles à un abonnement entier ou à une seule machine virtuelle Azure.
Considérations principales pour la création de principaux Azure Service
Avant de créer un principal de service Azure, vous devez connaître les détails de base sur lesquels vous devez planifier. Ces détails peuvent sembler simples. Ils faciliteront cependant la création d’un principal de service Azure de manière aussi efficace et aussi simple que possible.
Le nom d’affichage. Tout commence par un nom et un principal de service Azure doit avoir un nom. Il n’y a pas de règle ici, mais votre organisation pourrait avoir une convention de nommage préétablie.
- Le type d’informations d’identification à utiliser. Vous pouvez choisir de créer un principal de service Azure qui utilisera un mot de passe ou un certificat pour l’authentification. Cela ne signifie pas que vous ne pouvez choisir qu’une seule option, vous pouvez utiliser les deux.
Pour les principaux de service, le nom d’utilisateur et le mot de passe sont plus appropriésment appelés identifiant d’application et clé secrète.
- La période de validité des informations d’identification. Que vous attribuiez un mot de passe ou une information d’identification de certificat, vous devez définir une date de début et une date de fin pour sa validité. La durée de validité d’une information d’identification dépend généralement de la fréquence à laquelle vous êtes prêt à faire tourner / renouveler les certificats et les mots de passe.
- La portée d’accès. Créez-vous un principal de service Azure qui aura accès à un abonnement, un groupe de ressources ou des ressources sélectionnées?
- Le rôle. Il existe plusieurs rôles disponibles, tels que Contributeur, Reader et Owner, pour n’en citer que quelques-uns. Vous devez définir quel rôle est « suffisamment » du principal de service.
Création d’un principal de service Azure avec une clé secrète attribuée automatiquement
Le cœur de la création d’un nouveau principal de service dans Azure est la cmdlet New-AzAdServicePrincipal
. Dans cet exemple, un nouveau principal de service sera créé avec les valeurs suivantes :
DisplayName : AzVM_Reader
Scope : AzVM1 (Machine virtuelle)
Rôle : Lecteur
Mot de passe : <attribué automatiquement>
Validité des informations d’identification : 1 an
Obtention de l’ID de la portée cible (Machine virtuelle)
Comme vous pouvez le voir, la portée de ce nouveau principal de service est uniquement pour la machine virtuelle nommée AzVM1. Cependant, le paramètre -Scope
n’accepte pas seulement le nom, mais l’ID complet de la ressource. Ainsi, dans cet exemple, la première chose à faire est d’obtenir l’ID de la machine virtuelle AzVM1. Pour cela, utilisez le code ci-dessous.
Lorsque vous exécutez le code ci-dessus dans PowerShell, vous devriez voir la liste des noms et des ID des machines virtuelles, similaire à la capture d’écran ci-dessous.

Création du principal de service Azure avec une clé secrète
Maintenant que vous avez l’ID de la portée cible, qui est l’ID de la machine virtuelle AzVM1, vous pouvez utiliser la commande ci-dessous pour créer le nouveau principal de service qui a le rôle de lecteur. Les propriétés du nouveau principal de service seront stockées dans la variable $sp
.
En conséquence de la commande ci-dessus, le principal de service a été créé avec les valeurs suivantes.

Décryptage de la clé secrète
Maintenant, vous avez l’ApplicationID et le Secret, qui est le nom d’utilisateur et le mot de passe du principal de service. Cependant, la valeur du Secret est affichée comme System.Security.SecureString. Vous souhaitez connaître le secret. Pour cela, utilisez la commande ci-dessous pour convertir le secret en texte brut.
La commande ci-dessus convertit la valeur de chaîne sécurisée de $sp.Secret
en texte brut. Consultez l’image ci-dessous pour référence.

Vérification de l’attribution du rôle du principal de service Azure
Comment savez-vous que cela a fonctionné ? Vous pouvez vérifier la liste de contrôle d’accès des ressources en utilisant le portail Azure. Par exemple, dans l’image ci-dessous, vous pouvez voir que le principal de service AzVM_Reader a maintenant un accès Reader à la machine virtuelle AzVM1.

Vous pouvez également utiliser la commande Get-AzRoleAssignment -ObjectID $sp.id
pour obtenir les attributions de rôle du principal de service Azure. Consultez la capture d’écran ci-dessous à titre d’exemple.

Création d’un principal de service Azure avec mot de passe
Si vous souhaitez avoir plus de contrôle sur le mot de passe ou la clé secrète attribué(e) à votre principal de service Azure, utilisez le paramètre -PasswordCredential
lors de la création du principal de service. Cela est particulièrement utile si le mot de passe doit respecter des exigences de complexité.
Dans cet exemple, le nouveau principal de service Azure sera créé avec les valeurs suivantes :
DisplayName : ATA_RG_Contributor
Scope : ATA (ResourceGroup)
Rôle: Contributeur
Mot de passe: 20 caractères de long avec 6 caractères non alphanumériques
Validité des identifiants: 5 ans
Obtention de l’ID de la portée cible (groupe de ressources)
La portée de ce nouveau principal de service couvre l’ensemble du groupe de ressources nommé ATA. La première chose à obtenir est l’ID du groupe de ressources ATA. Pour ce faire, utilisez le code ci-dessous en veillant à changer la valeur du paramètre -Name
par le nom de votre groupe de ressources.
Ensuite, vous devriez voir l’ID de groupe de ressources qui est maintenant stocké dans la variable $Scope
.

Génération de la chaîne de mot de passe
La prochaine étape consiste à générer le mot de passe qui suit la complexité 20 caractères de long avec 6 caractères non alphanumériques. Pour cela, vous pouvez utiliser la méthode statique .NET GeneratePassword()
.
Dans le code ci-dessus GeneratePassword(20, 6)
, la première valeur représente la longueur du mot de passe et la deuxième valeur représente le nombre de caractères non alphanumériques à inclure. Le résultat est affiché dans la capture d’écran ci-dessous.

GeneratePassword()
static methodCréation de l’objet d’identification du mot de passe
Maintenant que vous avez la chaîne de mot de passe, la prochaine étape consiste à créer l’objet Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential
. Cet objet contiendra la chaîne de mot de passe stockée dans la variable $password
et une période de validité de 5 ans. Copiez le code ci-dessous et exécutez-le dans votre session Azure PowerShell.
L’exécution du code ci-dessus dans PowerShell stockera l’objet de credential dans la variable $PasswordCredential
. Le résultat attendu sera similaire à celui indiqué ci-dessous.

Création du Principal de service avec mot de passe
Vous disposez maintenant des valeurs des paramètres requises pour créer le principal de service Azure. Le code ci-dessous créera le principal de service avec le nom d’affichage ATA_RG_Contributor et en utilisant le mot de passe stocké dans la variable $PasswordCredential
.
Après l’exécution du code, le nouveau principal de service devrait être créé et les propriétés seront stockées dans la variable $sp
. Voici un exemple de résultat ci-dessous.

Attribution du rôle et de l’étendue
Le principal de service Azure a été créé dans la section précédente, mais sans Rôle et Étendue. Cela est dû au fait que les paramètres -Role
et -Scope
ne peuvent pas être utilisés conjointement avec le paramètre -PasswordCredential
. Cela signifie qu’une étape supplémentaire est nécessaire pour attribuer le rôle et l’étendue au principal de service.
Le code ci-dessous utilise la cmdlet New-AzRoleAssignment
pour attribuer la portée et le rôle du principal de service Azure.
La capture d’écran ci-dessous montre le résultat attendu une fois que le rôle et la portée ont été attribués au principal de service Azure.

Assurez-vous toujours de sauvegarder le mot de passe du principal de service, car il n’y a aucun moyen de le récupérer si vous n’avez pas pu le sauvegarder ou si vous l’avez oublié.
Connexion à Azure avec un mot de passe de principal de service
Maintenant, pour utiliser le principal de service. Au lieu de vous connecter à Azure PowerShell avec un compte utilisateur, le code ci-dessous utilise plutôt les informations d’identification du principal de service.
Après avoir exécuté le code ci-dessus, vous devriez être connecté à Azure PowerShell en utilisant le principal de service ATA_RG_Contributor et les informations d’identification du mot de passe.

Création d’un principal de service Azure avec un certificat
En plus des informations d’identification du mot de passe, un principal de service Azure peut également avoir des informations d’identification basées sur un certificat. Le certificat associé peut être délivré par une autorité de certification ou auto-signé.
Dans cet exemple, le nouveau principal de service Azure sera créé avec les valeurs suivantes:
Nom d’affichage: VSE3_SUB_OWNER
Portée: VSE3 (Abonnement)
Rôle: Propriétaire
Validité du certificat: 2 ans
Obtention de l’ID de la portée cible (abonnement)
La portée de ce nouveau principal de service couvre l’abonnement Azure nommé VSE3. La première chose à obtenir est l’ID de l’abonnement VSE3. Pour cela, utilisez le code ci-dessous en veillant à modifier la valeur du paramètre -SubscriptionName
par le nom de votre groupe de ressources.
Ensuite, spécifiez le nom du nouveau principal de service Azure et du certificat auto-signé à créer.
Création du certificat auto-signé
Le code ci-dessous crée le mot de passe auto-signé dans le magasin de certificats personnels avec le nom CN=VSE3_SUB_OWNER. La validité du certificat est fixée à deux ans. Les propriétés du certificat sont enregistrées dans la variable $cert
.
La capture d’écran ci-dessous montre que le certificat a été créé.

Si vous souhaitez voir le nouveau certificat dans une vue plus familière (GUI), vous pouvez le trouver dans la console Certificats (certmgr.mmc). Référez-vous à l’image ci-dessous montrant le certificat.

Ensuite, obtenez la valeur encodée en Base64 du certificat auto-signé et enregistrez-la dans la variable $keyValue
.
Création du Principal de Service avec Certificat
Maintenant que le certificat est créé, l’étape suivante consiste à créer le nouveau principal de service Azure. Le code ci-dessous créera le principal de service Azure qui utilisera le certificat auto-signé comme justificatif d’identité. La période de validité des justificatifs coïncide avec la période de validité du certificat.
Vous obtiendrez une sortie similaire, comme indiqué dans l’image ci-dessous.

Attribution du rôle et de la portée
Le principal de service Azure a été créé, mais aucun rôle et portée n’a encore été attribué. Cela signifie qu’une étape supplémentaire est nécessaire pour attribuer le rôle et la portée au principal de service.
Le code ci-dessous utilise la commande New-AzRoleAssignment
pour attribuer le rôle de propriétaire à l’abonnement VSE3 du principal de service.
Lorsque le code est exécuté, la capture d’écran ci-dessous montre la confirmation que l’attribution du rôle est effectuée.

Connexion à Azure avec un certificat de principal de service
Maintenant que vous avez créé le principal de service avec une identification basée sur un certificat. Cela signifie que vous pouvez l’utiliser pour vous connecter à Azure sans utiliser de mot de passe. Au lieu de cela, vous utiliserez le certificat disponible sur votre ordinateur comme méthode d’authentification.
Dans cet exemple, le nom d’affichage du principal de service est VSE3_SUB_OWNER, et le nom du certificat est CN=VSE3_SUB_OWNER. Le code ci-dessous obtiendra l’empreinte du certificat à partir du magasin de certificats personnels et l’utilisera comme identifiant de connexion.
La capture d’écran ci-dessous montre qu’en utilisant le code ci-dessus, la connexion à Azure PowerShell a réussi en utilisant uniquement les ID de l’application, locataire et empreinte du certificat.

Conclusion
Les principaux de service Azure sont les principaux de sécurité à prendre en compte lors de la création de justificatifs pour les tâches d’automatisation et les outils qui accèdent aux ressources Azure. La portée et le rôle à appliquer peuvent être choisis pour donner des autorisations d’accès « juste ce qu’il faut ».
Dans cet article, vous avez appris comment créer des principaux de service Azure en utilisant uniquement PowerShell. Les principaux de service Azure peuvent avoir un mot de passe, une clé secrète ou des informations d’identification basées sur un certificat. Chacun de ces types d’informations d’identification a ses avantages et ses scénarios d’utilisation applicables.
Les principaux de service avec un mot de passe ou une clé secrète sont plus portables mais sont considérés comme moins sécurisés car les informations d’identification peuvent être partagées en texte brut. En revanche, les informations d’identification basées sur un certificat sont l’option la plus sécurisée mais nécessitent un peu plus d’efforts pour les maintenir.
Les techniques que vous avez apprises dans cet article couvrent seulement les bases pour vous permettre de commencer à utiliser les principaux de service Azure dans votre automatisation. Il existe de nombreuses autres façons de configurer les principaux de service Azure, comme ajouter, supprimer et réinitialiser des informations d’identification. C’est à vous de les découvrir au fur et à mesure.
Merci de votre lecture !
Ressources supplémentaires d’apprentissage
Voici quelques ressources qui pourraient vous être utiles en complément de cet article.
- Connect-AzAccount : Votre passerelle vers Azure avec PowerShell
- Connect-AzAccount : Votre passerelle vers Azure avec PowerShell
- Comment générer un mot de passe aléatoire avec PowerShell
- Qu’est-ce que le contrôle d’accès basé sur les rôles d’Azure (Azure RBAC) ?
- Démystification des principaux services Azure AD
- Comment créer un principal de service Azure via l’interface de ligne de commande Azure CLI 2.0
- Comment contrôler l’accès aux services Office 365 avec MFA
Source:
https://adamtheautomator.com/azure-service-principal/