Azure, PowerShell et les certificats de gestion
Lorsque l’on débute avec le couple PowerShell et Windows Azure, les documentations de Technet ou MSDN ne sont pas encore de nature à clarifier les choses. J’aimerais donc éclaircir un peu le sujet en pensant aux IT, ou administrateurs systèmes, qui ont besoin de tester et mettre en production des scripts d’automatisation, voire des runbooks pour Orchestrator.
Dans cet article j’indiquais comment installer le module Azure pour PowerShell. La seconde étape, avant de pouvoir utiliser le module, est d’installer un certificat qui vous permettra de vous authentifier sur votre abonnement Azure. Pour ce faire, quatre actions sont nécessaires :
- Créer le certificat et sa clé privée
- Installer le certificat sur votre abonnement Azure, dans le cloud
- Installer le certificat et sa clé privée sur le système local qui exécute PowerShell
- Déclarer dans PowerShell l’abonnement Azure, et le certificat à utiliser avec sa clé privée
Il en va de même pour d’autres outils d’automatisation d’Azure, comme System Center 2012 SP1 Orchestrator. Si l’on se débrouille bien, un seul certificat peut servir pour ces différents usages.
Il y a donc trois méthodes pour arriver à la même fin.
- Demander à Azure de générer une paire clé privée + certificat et l’importer depuis PowerShell
- Créer une paire clé privée + certificat autosigné grâce à l’outil makecert et la gérer soi-même
- Utiliser sa PKI d’entreprise pour générer une paire clé privée + certificat et la gérer soi-même
La première méthode a l’avantage d’être simple et rapide et de ne pas demander de connaissances particulières en PKI. Par contre, elle ne fonctionne que pour PowerShell (pas pour d’autres produits comme Orchestrator ou App Controller), et doit être répétée sur chaque machine à partir de laquelle on doit utiliser PowerShell pour accéder à Azure. Ce qui multiplie les certificats et ne donne pas une maîtrise complète du procédé.
La deuxième et la troisième méthode sont équivalentes, à ceci près qu’un certificat émis par une autorité de confiance est toujours préférable à un certificat autosigné. Leur avantage est de permettre la maîtrise complète du certificat par l’administrateur. En effet ce dernier dispose de sa clé privée exportable dans un fichier .pfx et de son certificat, il peut donc le réutiliser sur plusieurs machines et plusieurs produits de management d’Azure comme System Center Orchestrator et App Controller.
Certificat généré par Azure
Ce n’est pas la meilleure méthode, mais elle peut dépaner si vous utilisez une nouvelle machine et que vous n’avez pas votre pfx sous la main. Dans une session PowerShell, chargez le module Azure :
Import-Module "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1"
Puis exécutez la commande :
Get-AzurePublishSettingsFile
Cette commande ouvre votre navigateur pour le téléchargement du certificat généré par Windows Azure :
Téléchargez le fichier (son extension est .publishsettings), puis, dans PowerShell, importez ce fichier pour créer un nouvel abonnement :
Import-AzurePublishSettingsFile fichier.publishsettings
Pour vérifier que l’abonnement est créé, vous pouvez utiliser la commande :
Get-AzureSubscription
Puis testez, par exemple avec la commande :
Get-AzureVM
Dans la console web de Windows Azure, vous pouvez constater que le certificat a été automatiquement ajouté dans Settings – Management Certificates :
Eventuellement vous pouvez conserver le fichier .pusblishsettings et le ré-importer sur d’autres systèmes. Mais cela ne sera valable que pour PowerShell. En effet pour d’autres outils il faudra un pfx (certificat + clé privée), mais la clé privée du certificat importé par cette méthode n’est pas exportable vers un pfx. D’où la préférence pour les deux méthodes qui suivent.
Certificat autosigné avec makecert
Il s’agit de la méthode documentée ici :
https://msdn.microsoft.com/en-us/library/windowsazure/gg551722.aspx
Je n’entrerai donc pas trop dans le détail. Il suffit de récupérer makecert.exe dans les outils de développement de Windows, et d’exécuter une commande du type :
makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
Cette commande crée la paire de clés, le certificat, et les stocke dans votre magasin personnel de certificats. Au passage elle crée également le fichier .cer du certificat, à conserver.
Pour conserver le certificat et sa clé privée et ainsi les réutiliser sur d’autres systèmes, voire d’autres applications, il suffit d’exporter le certificat depuis la console certmgr.msc, avec sa clé privée, dans un fichier .pfx.
Pour la suite, il faut envoyer le certificat dans votre abonnement Windows Azure, puis l’importer dans PowerShell. Ces manipulations sont les mêmes pour la 3ème méthode ci-dessous, je vous renvoie donc à la section “Utilisation du certificat avec Windows Azure” ci-dessous.
Certificat d’une PKI d’entreprise
Création du certificat
Voici finalement la méthode la plus adaptée à un environnement d’entreprise, du moment que vous les postes clients sont dans un domaine et qu’une PKI (Certificate Service) est en place.
Tout d’abord il faut demander et récupérer un certificat de type User :
Lancer certmgr.msc.
Dans la partie gauche, cliquer à droite sur Personal et choisir All Tasks – Request New Certificate.
Dans l’assistant : <Next>, puis choisir <Active Directory Enrollment Policy> <Next>
Dans la liste des modèles de certificats, cocher <User> puis cliquer sur <Enroll>
<Finish>
Puis il faut exporter le certificat, une fois avec sa clé privée (fichier .pfx), et une fois sans sa clé privée (fichier .cer).
Il faut donc faire cette manipulation deux fois, avec et sans la clé privée.
Il reste alors à utiliser ce nouveau certificat avec Windows Azure et PowerShell.
Utilisation du certificat avec Windows Azure
La première chose à faire est d’envoyer le certificat dans Windows Azure : Dans la console Azure, aller dans Settings – Management Certificates, cliquer sur Upload, et envoyer le fichier .cer.
Du côté de PowerShell, il faut créer l’abonnement en l’associant avec le certificat. Pour ce faire il faut disposer de l’identifiant de votre abonnement. Celui-ci a la forme d’un GUID et se trouve dans le portail d’administration de Windows Azure.
Il faut également disposer du thumbprint (empreinte) du certificat. Pour cela, ouvrir ses propriétés depuis la console certmgr.msc, et, dans l’onglet Details, afficher le thumbprint :
Sélectionner et copier sa valeur. Attention avant d’utiliser cette valeur dans PowerShell, il est préférable de la coller dans notepad par exemple, et de supprimer les espaces entre les valeurs d’octets en hexa.
il suffit alors, dans PowerShell, d’exécuter ceci, après avoir inséré l’ID d’abonnement, le thumbprint du certificat, et remplacé ‘mysub’ par le nom de l’abonnement désiré.
# Chargement du module Azure
Import-Module "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1"
# ID de l'abonnement Azure
$subid = "ca8358b6-1ae3-4ccd-860e-82c9dc9a9539"
# Thumbrint du certificat
$thumbprint = "8F6B76DE2F6A93DF73A78C512D8BAA23C17690EE"
# Certificat
$cert = Get-Item Cert:\CurrentUser\My\$thumbprint
# Initialisation de l'abonnement
Set-AzureSubscription -SubscriptionName mysub -Certificate $cert `
-SubscriptionId $subid
# Test
Select-AzureSubscription -SubscriptionName msysub
Get-AzureVM
Une fois l’abonnement créé et testé, vous êtes prêts à utiliser PowerShell pour automatiser vos traitements dans Windows Azure.
Consultez l’aide de Set-AzureSubscription, pour des options permettant par exemple de spécifier un compte de stockage par défaut, l’abonnement par défaut si vous en avez plusieurs, ou d’exporter un abonnement vers un fichier XML.