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.

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-rba.

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 principal de service, 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 remplir 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
    }
}

Étapes suivantes