
Uno strumento da interfaccia a riga di comando per gestire le attivazioni dei ruoli di Azure Privileged Identity Management (PIM) direttamente dal tuo terminale.
Uno strumento a riga di comando per gestire le attivazioni dei ruoli di Azure Privileged Identity Management (PIM) direttamente dal tuo terminale.
Prima di utilizzare azpim, assicurati di avere:
# Installa l'interfaccia a riga di comando di Azure (se non installata)
# Vedi: https://docs.microsoft.com/it-it/cli/azure/install-azure-cli
# Accedi ad Azure
az login
# Verifica di aver effettuato l'accesso
az account show
# Usando npm
npm install -g azpim
# Usando pnpm
pnpm add -g azpim
# Usando yarn
yarn global add azpim
Dopo l'installazione, il comando azpim sarà disponibile globalmente.
Se in precedenza utilizzavi azp-cli, i tuoi preset sono memorizzati in ~/.config/azp-cli/ (o %APPDATA%\azp-cli\ su Windows). Per migrare:
presets.json nella nuova posizione: ~/.config/azpim/ (o %APPDATA%\azpim\)npm uninstall -g azp-cli# Clona il repository
git clone https://github.com/tapanmeena/azpim.git
cd azpim
# Installa le dipendenze
pnpm install
# Compila il progetto
pnpm build
# Collega globalmente per lo sviluppo
npm link
# Dopo l'installazione globale
azpim
# Oppure con comandi specifici
azpim activate
azpim deactivate
azpim preset list
azpim update
# Modalità sviluppo (dal sorgente)
pnpm dev
Flag globali:
--debug - Abilita la registrazione di debug--version - Mostra il numero di versionePuoi verificare se è disponibile una versione più recente:
azpim update
# alias
azpim upgrade
Note:
azpim update termina con codice 0 se aggiornato, 2 se è disponibile un aggiornamento e 1 in caso di errore.--check-only - Controlla e stampa solo lo stato senza mostrare le istruzioni di aggiornamento.--output json restituisce una risposta strutturata adatta agli script.azpim activate e azpim deactivate mostreranno anche un breve suggerimento "aggiornamento disponibile" (solo in modalità testo) al massimo una volta al giorno.AZPIM_NO_UPDATE_NOTIFIER=1 (o AZPIM_DISABLE_UPDATE_CHECK=1).La cache del controllo aggiornamenti è memorizzata insieme ai preset nella directory di configurazione:
~/.config/azpim/update-check.json (o $XDG_CONFIG_HOME/azpim/update-check.json)%APPDATA%\azpim\update-check.jsonUsa i flag per attivare o disattivare i ruoli PIM direttamente senza passare attraverso il menu interattivo, perfetto per script e flussi di lavoro CI/CD.
# Attiva un singolo ruolo per nome (non interattivo)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--duration-hours 2 \
--justification "Break-glass per incidente" \
--output json
# Attiva più ruoli (ripeti --role-name)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--role-name "User Access Administrator"
# Se un nome ruolo corrisponde a più ruoli idonei (ambiti diversi),
# --non-interactive darà errore a meno che non si consenta esplicitamente l'attivazione di tutte le corrispondenze
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--allow-multiple
# Anteprima di cosa accadrebbe senza inviare richieste
azpim activate --non-interactive --dry-run \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--output json
# Disattiva ruoli specifici
azpim deactivate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--justification "Attività completata"
# Disattiva su tutte le sottoscrizioni (ometti subscription-id)
azpim deactivate --non-interactive --yes \
--role-name "Contributor" \
--allow-multiple
Flag comuni (attivazione/disattivazione):
--non-interactive - Disabilita i prompt interattivi-y, --yes - Salta i prompt di conferma--subscription-id <id> - Sottoscrizione di destinazione (opzionale per la disattivazione)--role-name <nome> - Nome/i del ruolo da destinare (ripetibile)--allow-multiple - Consente corrispondenze multiple di ruoli--dry-run - Anteprima senza inviare--output <text|json> - Formato di output (predefinito: text)--quiet - Sopprime output non essenzialiSpecifici per l'attivazione:
--duration-hours <n> - Durata (1-8 ore, predefinito varia per ruolo)--justification <testo> - Motivazione per l'attivazioneSpecifici per la disattivazione:
--justification <testo> - Motivazione per la disattivazione (opzionale)I preset ti permettono di salvare le tue routine quotidiane di attivazione/disattivazione (sottoscrizione + nomi ruoli + durata + motivazione) e riutilizzarle con --preset <nome>.
Per impostazione predefinita, i preset sono memorizzati in un file di configurazione per utente:
~/.config/azpim/presets.json (o $XDG_CONFIG_HOME/azpim/presets.json)%APPDATA%\azpim\presets.jsonSovrascrivi la posizione con:
AZPIM_PRESETS_PATH=/percorso/del/presets.jsonUn preset può definire uno o entrambi i blocchi:
activate: subscriptionId, roleNames[], durationHours, justification, allowMultipledeactivate: subscriptionId (opzionale), roleNames[], justification, allowMultiplejustification supporta semplici template:
${date} → YYYY-MM-DD${datetime} → timestamp ISO${userPrincipalName} → risolto da Microsoft Graph /me# Crea un preset (procedura guidata interattiva)
azpim preset add daily-ops
# Crea un preset con integrazione Azure (recupera sottoscrizioni/ruoli)
azpim preset add daily-ops --from-azure
# Modifica un preset (procedura guidata interattiva)
azpim preset edit daily-ops
# Elenca tutti i preset
azpim preset list
# Mostra i dettagli di un preset
azpim preset show daily-ops
# Rimuovi un preset
azpim preset remove daily-ops
# Usa un preset (i flag sovrascrivono comunque i valori del preset)
azpim activate --preset daily-ops --yes
# Esecuzione non interattiva usando il preset
azpim activate --preset daily-ops --non-interactive --yes --output json
# Disattiva usando un preset
azpim deactivate --preset daily-ops --non-interactive --yes
Quando crei un preset tramite azpim preset add, puoi opzionalmente impostarlo come predefinito per activate e/o deactivate.
azpim activate --non-interactive --yes può funzionare senza specificare --subscription-id/--role-name.╔════════════════════════════════════════════════════╗
║ Azure PIM CLI - Gestore attivazione ruoli ║
╚════════════════════════════════════════════════════╝
✔ Autenticazione riuscita
┌─ Informazioni utente ────────────────────────────────
│ Nome: Mario Rossi
│ Email: [email protected]
└──────────────────────────────────────────────────────
✔ Trovate 3 sottoscrizione(i)
? Cosa desideri fare?
❯ ▶ Attiva ruolo(i)
◼ Disattiva ruolo(i)
✕ Esci
I preferiti ti consentono di contrassegnare sottoscrizioni specifiche per un accesso rapido. Le sottoscrizioni preferite vengono visualizzate all'inizio degli elenchi delle sottoscrizioni nel menu interattivo.
Per impostazione predefinita, i preferiti sono memorizzati per utente:
~/.config/azpim/users/<userId>/favorites.json%APPDATA%\azpim\users\<userId>\favorites.jsonSovrascrivi la posizione con:
AZPIM_FAVORITES_PATH=/percorso/del/favorites.json# Elenca tutti i preferiti
azpim favorites list
azpim fav list
# Aggiungi una sottoscrizione ai preferiti
azpim favorites add <subscription-id>
# Aggiungi anche se la sottoscrizione non è in cache
azpim favorites add <subscription-id> --force
# Rimuovi una sottoscrizione dai preferiti
azpim favorites remove <subscription-id>
# Cancella tutti i preferiti
azpim favorites clear
# Esporta i preferiti in un file
azpim favorites export ./my-favorites.json
# Importa i preferiti da un file (sostituisce quelli esistenti)
azpim favorites import ./my-favorites.json
# Importa i preferiti e unisci con quelli esistenti
azpim favorites import ./my-favorites.json --merge
# Aggiorna la cache delle sottoscrizioni
azpim favorites refresh
azpim memorizza automaticamente nella cache le informazioni sulle sottoscrizioni per migliorare i tempi di avvio. La cache ha un TTL (time-to-live) di 6 ore e viene aggiornata automaticamente alla scadenza.
I file della cache sono memorizzati per utente:
~/.config/azpim/users/<userId>/subscriptions-cache.json%APPDATA%\azpim\users\<userId>\subscriptions-cache.json# Forza l'aggiornamento della cache delle sottoscrizioni
azpim favorites refresh
# Esegui in modalità sviluppo con ricarica a caldo
pnpm dev
# Compila il progetto TypeScript
pnpm build
# Esegui l'applicazione compilata
pnpm start
# Lint del codice
pnpm lint
Questo repository utilizza il formato Keep a Changelog in CHANGELOG.md.
Per ottenere i migliori risultati, utilizza i Conventional Commits:
feat: ... (nuova funzionalità) → incremento minorfix: ... (correzione bug) → incremento patchchore: ..., docs: ..., refactor: ... (nessun incremento a meno che non sia breaking)Assicurati che CHANGELOG.md contenga voci aggiornate sotto Unreleased.
Esegui uno dei seguenti comandi:
# Determina automaticamente la versione successiva dai commit, aggiorna CHANGELOG.md,
# incrementa package.json e crea un tag git.
pnpm release
# Anteprima di cosa cambierebbe
pnpm release:dry
# Forza un incremento specifico se necessario
pnpm release -- --release-as patch
pnpm release -- --release-as minor
pnpm release -- --release-as major
git push --follow-tags
npm publish
# oppure
pnpm publish
azpim/
├── src/
│ ├── index.ts # Punto di ingresso CLI e definizioni dei comandi
│ ├── core/ # Utilità fondamentali (nessuna logica di dominio)
│ │ ├── constants.ts # Valori magici e predefiniti condivisi
│ │ ├── errors.ts # Utilità unificate per la gestione degli errori
│ │ ├── json-store.ts # Persistenza generica di file JSON
│ │ ├── paths.ts # Risoluzione dei percorsi dei file di configurazione/dati
│ │ └── ui.ts # Interfaccia utente terminale (spinner, formattazione, colori)
│ ├── azure/ # Wrapper dell'SDK Azure
│ │ ├── auth.ts # Credenziali CLI Azure + ricerca Graph /me
│ │ └── azure-pim.ts # API di attivazione/disattivazione ruolo PIM
│ ├── data/ # Persistenza locale dei dati
│ │ ├── favorites.ts # Gestione preferiti
│ │ ├── presets.ts # Configurazione e validazione dei preset
│ │ ├── subscription-cache.ts # Cache delle sottoscrizioni (TTL 6 ore)
│ │ └── update-check.ts # Sistema di notifica aggiornamenti
│ └── cli/ # Flussi interattivi e scaffolding dei comandi
│ ├── cli.ts # Ciclo principale del menu e helper condivisi
│ ├── command-handler.ts # Wrapper comandi riutilizzabile (autenticazione, UI, errori)
│ ├── activate-flow.ts # Attivazione ruolo (one-shot + interattivo)
│ ├── deactivate-flow.ts # Disattivazione ruolo (one-shot + interattivo)
│ ├── subscription-selector.ts # Ricerca/selezione sottoscrizione con preferiti
│ ├── favorites-manager.ts # Menu interattivo di gestione preferiti
│ └── presets-cli.ts # Procedure guidate per aggiungere/modificare/gestire preset
├── package.json
├── tsconfig.json
├── CHANGELOG.md
└── README.md
Il codebase segue una struttura modulare a livelli:
core/ — Utilità a zero dipendenze condivise in tutto il progetto. json-store.ts fornisce un pattern generico di carico/salvataggio utilizzato da tutti i file di persistenza dei dati. errors.ts centralizza l'estrazione degli errori e la gestione degli errori a livello di comando. constants.ts elimina i valori magici.azure/ — Wrapper sottili intorno agli SDK Azure (@azure/identity, @azure/arm-authorization) e una chiamata leggera a Microsoft Graph /me tramite fetch nativo. Nessuna logica UI.data/ — Persistenza locale dei file (preferiti, preset, cache delle sottoscrizioni, stato aggiornamenti). Tutti utilizzano json-store per I/O file coerente.cli/ — Flussi interattivi orientati all'utente e scaffolding dei comandi. fornisce un wrapper che elimina il codice boilerplate (autenticazione, configurazione UI, gestione errori) in tutti i comandi Commander. I flussi di attivazione e disattivazione condividono una funzione da .Assicurati che l'interfaccia a riga di comando di Azure sia installata e accessibile nel tuo PATH:
az --version
Assicurati di aver effettuato l'accesso all'interfaccia a riga di comando di Azure:
az login
Verifica che il tuo account abbia ruoli idonei per PIM:
az account show
Controlla di avere le autorizzazioni necessarie in Azure AD
az login --refreshQuesto progetto è concesso in licenza con la licenza ISC.
Tapan Meena - [email protected]
I contributi sono benvenuti! Sentiti libero di inviare una Pull Request.
git checkout -b feature/funzionalità-straordinaria)git commit -m 'Aggiungi una funzionalità straordinaria')git push origin feature/funzionalità-straordinaria)| Comando | Alias | Descrizione |
|---|
activate | a | Attiva un ruolo in Azure PIM (predefinito) |
deactivate | d | Disattiva un ruolo in Azure PIM |
preset | - | Gestisce preset riutilizzabili |
favorites | fav | Gestisce le sottoscrizioni preferite |
check-update | update, upgrade | Controlla la disponibilità di una nuova versione |
help | - | Mostra le informazioni di aiuto |
| Comando | Descrizione |
|---|
preset list | Elenca tutti i preset disponibili |
preset show | Mostra i dettagli di un preset specifico |
preset add | Aggiungi un nuovo preset (procedura guidata interattiva) |
preset edit | Modifica un preset esistente (procedura guidata interattiva) |
preset remove | Rimuovi un preset |
| Comando | Descrizione |
|---|
favorites list | Elenca tutte le sottoscrizioni preferite |
favorites add | Aggiungi una sottoscrizione ai preferiti |
favorites remove | Rimuovi una sottoscrizione dai preferiti |
favorites clear | Cancella tutti i preferiti |
favorites export | Esporta i preferiti in un file |
favorites import | Importa i preferiti da un file |
favorites refresh | Aggiorna la cache delle sottoscrizioni |
command-handler.tswithCommandHandlerselectSubscriptionInteractivesubscription-selector.ts| Variabile | Descrizione |
|---|
AZPIM_PRESETS_PATH | Percorso alternativo per il file dei preset |
AZPIM_FAVORITES_PATH | Percorso alternativo per il file dei preferiti |
AZPIM_NO_UPDATE_NOTIFIER | Imposta a 1 per disabilitare i controlli automatici di aggiornamento |
AZPIM_DISABLE_UPDATE_CHECK | Alias per AZPIM_NO_UPDATE_NOTIFIER |