Démarrage rapide : Créer un principal de service Azure pour Ansible
Dans ce guide de démarrage rapide, vous allez créer un principal de service Azure avec Azure CLI ou Azure PowerShell et vous authentifier auprès d’Azure à partir d’Ansible.
Dans cet article, vous apprendrez comment :
- Créer un principal du service Azure à l’aide d’Azure CLI
- Créer un principal de service Azure avec Azure PowerShell
- Affecter un rôle au principal de service Azure
- Récupérer des informations essentielles auprès du principal de service
- Définir des variables d’environnement pour permettre à Ansible de récupérer les valeurs du principal de service
- Tester le principal de service
Prérequis
- Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Installer Ansible. Pour cela, choisissez l’une des options suivantes :
- Installez et configurez Ansible sur une machine virtuelle Linux
- Configurez Azure Cloud Shell.
Créer un principal du service Azure
Un principal de service Azure vous donne un compte dédié pour gérer les ressources Azure avec Ansible.
Exécutez le code suivant pour créer un principal de service Azure :
az ad sp create-for-rbac --name ansible \
--role Contributor \
--scopes /subscriptions/<subscription_id>
Remarque
Stockez le mot de passe de la sortie dans un emplacement sécurisé.
Affecter un rôle au principal de service Azure
Par défaut, les principaux de service ne disposent pas des droits d’accès nécessaires pour gérer des ressources dans Azure.
Exécutez la commande suivante pour affecter le rôle Contributeur au principal de service :
az role assignment create --assignee <appID> \
--role Contributor \
--scope /subscriptions/<subscription_id>
Remplacez <appID>
par la valeur obtenue dans la sortie de la commande az ad sp create-for-rbac
.
Remarque
Pour améliorer la sécurité, modifiez l’étendue de l’attribution de rôle en utilisant un groupe de ressources plutôt qu’un abonnement.
Obtenir les informations du principal de service Azure
Pour vous authentifier auprès d'Azure avec un service principal, vous avez besoin des informations suivantes :
- SubscriptionID
- ApplicationId du principal de service
- Mot de passe du principal de service
- TenantID
Exécutez les commandes suivantes pour obtenir les informations du principal de service :
az account show --query '{tenantId:tenantId,subscriptionid:id}';
az ad sp list --display-name ansible --query '{clientId:[0].appId}'
S’authentifier auprès d’Azure avec le principal de service
Exécutez les commandes suivantes pour renseigner les variables d'environnement requises sur le serveur Ansible :
export AZURE_SUBSCRIPTION_ID=<SubscriptionID>
export AZURE_CLIENT_ID=<ApplicationId>
export AZURE_SECRET=<Password>
export AZURE_TENANT=<TenantID>
Remplacez <SubscriptionID>
, <ApplicationId>
, <Password>
et <TenantID>
par les valeurs de votre compte de principal de service.
Tester les autorisations du principal de service
Exécutez la commande suivante pour créer un groupe de ressources Azure :
ansible localhost -m azure_rm_resourcegroup -a "name=<resource_group_name> location=<resource_group_location>"
Remplacez <resource_group_name>
et <resource_group_location>
par les valeurs de votre nouveau groupe de ressources.
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
"changed": true,
"contains_resources": false,
"state": {
"id": "/subscriptions/<subscriptionID>/resourceGroups/azcli-test",
"location": "eastus",
"name": "azcli-test",
"provisioning_state": "Succeeded",
"tags": null
}
}
Exécutez la commande suivante pour supprimer le groupe de ressources Azure :
ansible localhost -m azure_rm_resourcegroup -a "name=<resource_group_name> state=absent force_delete_nonempty=yes"
Remplacez <resource_group_name>
par le nom de votre groupe de ressources.
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
"changed": true,
"contains_resources": false,
"state": {
"id": "/subscriptions/subscriptionID>/resourceGroups/azcli-test",
"location": "eastus",
"name": "azcli-test",
"provisioning_state": "Succeeded",
"status": "Deleted",
"tags": null
}
}