
Un outil en ligne de commande pour gérer les activations de rôles Azure Privileged Identity Management (PIM) directement depuis votre terminal.
Un outil en ligne de commande pour gérer les activations de rôles Azure Privileged Identity Management (PIM) directement depuis votre terminal.
Avant d'utiliser azpim, assurez-vous d'avoir :
# Installer Azure CLI (si non installé)
# Voir : https://docs.microsoft.com/fr-fr/cli/azure/install-azure-cli
# Se connecter à Azure
az login
# Vérifier que vous êtes connecté
az account show
# Avec npm
npm install -g azpim
# Avec pnpm
pnpm add -g azpim
# Avec yarn
yarn global add azpim
Après l'installation, la commande azpim sera disponible globalement.
Si vous utilisiez auparavant azp-cli, vos préréglages sont stockés dans ~/.config/azp-cli/ (ou %APPDATA%\azp-cli\ sous Windows). Pour migrer :
presets.json vers le nouvel emplacement : ~/.config/azpim/ (ou %APPDATA%\azpim\)npm uninstall -g azp-cli# Cloner le dépôt
git clone https://github.com/tapanmeena/azpim.git
cd azpim
# Installer les dépendances
pnpm install
# Compiler le projet
pnpm build
# Lier globalement pour le développement
npm link
# Après installation globale
azpim
# Ou avec des commandes spécifiques
azpim activate
azpim deactivate
azpim preset list
azpim update
# Mode développement (depuis les sources)
pnpm dev
Indicateurs globaux :
--debug - Activer les logs de débogage--version - Afficher le numéro de versionVous pouvez vérifier si une nouvelle version est disponible :
azpim update
# alias
azpim upgrade
Remarques :
azpim update se termine avec le code 0 si à jour, 2 si une mise à jour est disponible, et 1 en cas d'erreur.--check-only - Seulement vérifier et afficher l'état sans montrer les instructions de mise à niveau.--output json renvoie une réponse structurée adaptée aux scripts.azpim activate et azpim deactivate afficheront également un bref indicateur de mise à jour disponible (mode texte uniquement) au maximum une fois par jour.AZPIM_NO_UPDATE_NOTIFIER=1 (ou AZPIM_DISABLE_UPDATE_CHECK=1).Le cache de vérification des mises à jour est stocké avec les préréglages dans votre répertoire de configuration :
~/.config/azpim/update-check.json (ou $XDG_CONFIG_HOME/azpim/update-check.json)%APPDATA%\azpim\update-check.jsonUtilisez des indicateurs pour activer ou désactiver des rôles PIM directement sans passer par le menu interactif, parfait pour les scripts et les workflows CI/CD.
# Activer un seul rôle par nom (non interactif)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--duration-hours 2 \
--justification "Intervention d'urgence pour incident" \
--output json
# Activer plusieurs rôles (répéter --role-name)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--role-name "User Access Administrator"
# Si un nom de rôle correspond à plusieurs rôles éligibles (différentes portées),
# --non-interactive générera une erreur sauf si vous autorisez explicitement l'activation de toutes les correspondances
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--allow-multiple
# Aperçu de ce qui se passerait sans soumettre les demandes
azpim activate --non-interactive --dry-run \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--output json
# Désactiver des rôles spécifiques
azpim deactivate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--justification "Tâche terminée"
# Désactiver sur tous les abonnements (omettre subscription-id)
azpim deactivate --non-interactive --yes \
--role-name "Contributor" \
--allow-multiple
Indicateurs communs (activate/deactivate) :
--non-interactive - Désactiver les invites interactives-y, --yes - Ignorer les invites de confirmation--subscription-id <id> - Abonnement cible (optionnel pour deactivate)--role-name <name> - Nom(s) du rôle cible (peut être répété)--allow-multiple - Autoriser plusieurs correspondances de rôles--dry-run - Aperçu sans soumettre--output <text|json> - Format de sortie (défaut : text)--quiet - Supprimer les sorties non essentiellesSpécifiques à l'activation :
--duration-hours <n> - Durée (1-8 heures, défaut variable selon le rôle)--justification <text> - Justification pour l'activationSpécifiques à la désactivation :
--justification <text> - Justification pour la désactivation (optionnelle)Les préréglages vous permettent de sauvegarder vos routines d'activation/désactivation quotidiennes (abonnement + noms de rôles + durée + justification) et de les réutiliser avec --preset <nom>.
Par défaut, les préréglages sont stockés dans un fichier de configuration par utilisateur :
~/.config/azpim/presets.json (ou $XDG_CONFIG_HOME/azpim/presets.json)%APPDATA%\azpim\presets.jsonSurcharger l'emplacement avec :
AZPIM_PRESETS_PATH=/chemin/vers/presets.jsonUn préréglage peut définir un ou les deux blocs :
activate : subscriptionId, roleNames[], durationHours, justification, allowMultipledeactivate : subscriptionId (optionnel), roleNames[], justification, allowMultiplejustification prend en charge des modèles simples :
${date} → YYYY-MM-DD${datetime} → horodatage ISO${userPrincipalName} → résolu via Microsoft Graph /me# Créer un préréglage (assistant interactif)
azpim preset add daily-ops
# Créer un préréglage avec intégration Azure (récupère abonnements/rôles)
azpim preset add daily-ops --from-azure
# Modifier un préréglage (assistant interactif)
azpim preset edit daily-ops
# Lister tous les préréglages
azpim preset list
# Afficher les détails d'un préréglage
azpim preset show daily-ops
# Supprimer un préréglage
azpim preset remove daily-ops
# Utiliser un préréglage (les indicateurs remplacent toujours les valeurs du préréglage)
azpim activate --preset daily-ops --yes
# Exécution non interactive utilisant le préréglage
azpim activate --preset daily-ops --non-interactive --yes --output json
# Désactiver en utilisant un préréglage
azpim deactivate --preset daily-ops --non-interactive --yes
Lorsque vous créez un préréglage via azpim preset add, vous pouvez éventuellement le définir comme défaut pour activate et/ou deactivate.
azpim activate --non-interactive --yes peut fonctionner sans spécifier --subscription-id/--role-name.╔════════════════════════════════════════════════════╗
║ Azure PIM CLI - Gestionnaire d'activation ║
╚════════════════════════════════════════════════════╝
✔ Authentification réussie
┌─ Informations utilisateur ──────────────────────────
│ Nom : John Doe
│ Email : [email protected]
└──────────────────────────────────────────────────────
✔ 3 abonnement(s) trouvé(s)
? Que souhaitez-vous faire ?
❯ ▶ Activer un/des rôle(s)
◼ Désactiver un/des rôle(s)
✕ Quitter
Les favoris vous permettent de marquer des abonnements spécifiques pour un accès rapide. Les abonnements favoris sont affichés en haut des listes d'abonnements dans le menu interactif.
Par défaut, les favoris sont stockés par utilisateur :
~/.config/azpim/users/<userId>/favorites.json%APPDATA%\azpim\users\<userId>\favorites.jsonSurcharger l'emplacement avec :
AZPIM_FAVORITES_PATH=/chemin/vers/favorites.json# Lister tous les favoris
azpim favorites list
azpim fav list
# Ajouter un abonnement aux favoris
azpim favorites add <subscription-id>
# Ajouter même si l'abonnement n'est pas dans le cache
azpim favorites add <subscription-id> --force
# Supprimer un abonnement des favoris
azpim favorites remove <subscription-id>
# Effacer tous les favoris
azpim favorites clear
# Exporter les favoris vers un fichier
azpim favorites export ./my-favorites.json
# Importer les favoris depuis un fichier (remplace les existants)
azpim favorites import ./my-favorites.json
# Importer les favoris et fusionner avec les existants
azpim favorites import ./my-favorites.json --merge
# Actualiser le cache des abonnements
azpim favorites refresh
azpim met automatiquement en cache les informations d'abonnement pour améliorer le temps de démarrage. Le cache a une durée de vie (TTL) de 6 heures et est automatiquement actualisé à l'expiration.
Les fichiers de cache sont stockés par utilisateur :
~/.config/azpim/users/<userId>/subscriptions-cache.json%APPDATA%\azpim\users\<userId>\subscriptions-cache.json# Forcer l'actualisation du cache des abonnements
azpim favorites refresh
# Exécuter en mode développement avec rechargement à chaud
pnpm dev
# Compiler le projet TypeScript
pnpm build
# Exécuter l'application compilée
pnpm start
# Analyser le code source
pnpm lint
Ce dépôt utilise le format Keep a Changelog dans CHANGELOG.md.
Pour de meilleurs résultats, utilisez les Conventional Commits :
feat: ... (nouvelle fonctionnalité) → version mineurefix: ... (correction de bug) → version correctifchore: ..., docs: ..., refactor: ... (pas de version sauf breaking change)Assurez-vous que CHANGELOG.md contient des entrées à jour sous Unreleased.
Exécutez l'une des commandes suivantes :
# Détermine automatiquement la prochaine version à partir des commits, met à jour CHANGELOG.md,
# incrémente package.json et crée un tag git.
pnpm release
# Aperçu de ce qui changerait
pnpm release:dry
# Forcer une version spécifique si nécessaire
pnpm release -- --release-as patch
pnpm release -- --release-as minor
pnpm release -- --release-as major
git push --follow-tags
npm publish
# ou
pnpm publish
azpim/
├── src/
│ ├── index.ts # Point d'entrée CLI et définitions des commandes
│ ├── core/ # Utilitaires fondamentaux (pas de logique métier)
│ │ ├── constants.ts # Valeurs magiques partagées et valeurs par défaut
│ │ ├── errors.ts # Utilitaires unifiés de gestion d'erreurs
│ │ ├── json-store.ts # Persistance générique de fichiers JSON
│ │ ├── paths.ts # Résolution des chemins de fichiers de configuration/données
│ │ └── ui.ts # Interface terminal (spinners, formatage, couleurs)
│ ├── azure/ # Wrappers autour du SDK Azure
│ │ ├── auth.ts # Authentification Azure CLI + recherche Graph /me
│ │ └── azure-pim.ts # API d'activation/désactivation des rôles PIM
│ ├── data/ # Persistance locale des données
│ │ ├── favorites.ts # Gestion des favoris
│ │ ├── presets.ts # Configuration et validation des préréglages
│ │ ├── subscription-cache.ts # Cache des abonnements (durée de vie 6 heures)
│ │ └── update-check.ts # Système de notification de mise à jour
│ └── cli/ # Flux interactifs et échafaudage de commandes
│ ├── cli.ts # Boucle de menu principale et aides partagées
│ ├── command-handler.ts # Wrapper de commande réutilisable (authentification, UI, erreurs)
│ ├── activate-flow.ts # Activation de rôle (ponctuelle + interactive)
│ ├── deactivate-flow.ts # Désactivation de rôle (ponctuelle + interactive)
│ ├── subscription-selector.ts # Recherche/sélection d'abonnements avec favoris
│ ├── favorites-manager.ts # Menu interactif de gestion des favoris
│ └── presets-cli.ts # Assistants d'ajout/modification/gestion de préréglages
├── package.json
├── tsconfig.json
├── CHANGELOG.md
└── README.md
La base de code suit une structure modulaire en couches :
core/ — Utilitaires sans dépendance partagés dans tout le projet. json-store.ts fournit un modèle de chargement/sauvegarde générique utilisé par tous les fichiers de persistance de données. errors.ts centralise l'extraction des erreurs et la gestion des erreurs au niveau des commandes. constants.ts élimine les valeurs magiques.azure/ — Wrappers fins autour des SDK Azure (@azure/identity, @azure/arm-authorization) et un appel léger à Microsoft Graph /me via fetch natif. Aucune logique d'interface utilisateur.data/ — Persistance locale des fichiers (favoris, préréglages, cache des abonnements, état de mise à jour). Tous utilisent json-store pour des entrées/sorties fichier cohérentes.cli/ — Flux interactifs orientés utilisateur et échafaudage de commandes. fournit un wrapper qui élimine le code standard (authentification, configuration de l'interface utilisateur, gestion des erreurs) pour toutes les commandes Commander. Les flux d'activation et de désactivation partagent une fonction depuis .Assurez-vous qu'Azure CLI est installé et accessible dans votre PATH :
az --version
Assurez-vous d'être connecté à Azure CLI :
az login
Vérifiez que votre compte possède des rôles éligibles PIM :
az account show
Vérifiez que vous disposez des autorisations nécessaires dans Azure AD
az login --refreshCe projet est sous licence ISC.
Tapan Meena - [email protected]
Les contributions sont les bienvenues ! N'hésitez pas à soumettre une demande de tirage (Pull Request).
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)| Commande | Alias | Description |
|---|
activate | a | Activer un rôle dans Azure PIM (par défaut) |
deactivate | d | Désactiver un rôle dans Azure PIM |
preset | - | Gérer les préréglages réutilisables |
favorites | fav | Gérer les abonnements favoris |
check-update | update, upgrade | Vérifier la disponibilité d'une nouvelle version |
help | - | Afficher les informations d'aide |
| Commande | Description |
|---|
preset list | Lister tous les préréglages disponibles |
preset show | Afficher les détails d'un préréglage spécifique |
preset add | Ajouter un nouveau préréglage (assistant interactif) |
preset edit | Modifier un préréglage existant (assistant interactif) |
preset remove | Supprimer un préréglage |
| Commande | Description |
|---|
favorites list | Lister tous les abonnements favoris |
favorites add | Ajouter un abonnement aux favoris |
favorites remove | Supprimer un abonnement des favoris |
favorites clear | Effacer tous les favoris |
favorites export | Exporter les favoris vers un fichier |
favorites import | Importer les favoris depuis un fichier |
favorites refresh | Actualiser le cache des abonnements |
command-handler.tswithCommandHandlerselectSubscriptionInteractivesubscription-selector.ts| Variable | Description |
|---|
AZPIM_PRESETS_PATH | Surcharger le chemin du fichier de préréglages |
AZPIM_FAVORITES_PATH | Surcharger le chemin du fichier de favoris |
AZPIM_NO_UPDATE_NOTIFIER | Mettre à 1 pour désactiver les vérifications automatiques de mise à jour |
AZPIM_DISABLE_UPDATE_CHECK | Alias pour AZPIM_NO_UPDATE_NOTIFIER |