
Ein Kommandozeilen-Tool zum Verwalten von Azure Privileged Identity Management (PIM)-Rollenaktivierungen direkt von Ihrem Terminal aus.
Ein Kommandozeilen-Tool zur Verwaltung von Azure Privileged Identity Management (PIM)-Rollenaktivierungen direkt von Ihrem Terminal aus.
Stellen Sie vor der Verwendung von azpim Folgendes sicher:
# Azure CLI installieren (falls nicht installiert)
# Siehe: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli
# Bei Azure anmelden
az login
# Überprüfen, ob Sie angemeldet sind
az account show
# Mit npm
npm install -g azpim
# Mit pnpm
pnpm add -g azpim
# Mit yarn
yarn global add azpim
Nach der Installation steht der Befehl azpim global zur Verfügung.
Wenn Sie zuvor azp-cli verwendet haben, befinden sich Ihre Presets in ~/.config/azp-cli/ (bzw. %APPDATA%\azp-cli\ unter Windows). So migrieren Sie:
presets.json in das neue Verzeichnis: ~/.config/azpim/ (bzw. %APPDATA%\azpim\)npm uninstall -g azp-cli# Repository klonen
git clone https://github.com/tapanmeena/azpim.git
cd azpim
# Abhängigkeiten installieren
pnpm install
# Projekt erstellen
pnpm build
# Global für die Entwicklung verknüpfen
npm link
# Nach globaler Installation
azpim
# Oder mit spezifischen Befehlen
azpim activate
azpim deactivate
azpim preset list
azpim update
# Entwicklungsmodus (aus dem Quellcode)
pnpm dev
Globale Flags:
--debug – Debug-Logging aktivieren--version – Versionsnummer anzeigenSie können prüfen, ob eine neuere Version verfügbar ist:
azpim update
# Alias
azpim upgrade
Hinweise:
azpim update beendet sich mit Code 0, wenn aktuell, mit 2, wenn ein Update verfügbar ist, und mit 1 bei Fehler.--check-only – Nur Status prüfen und anzeigen, ohne Upgrade-Anweisungen.--output json liefert eine strukturierte Antwort, die für Skripte geeignet ist.azpim activate und azpim deactivate ebenfalls einen kurzen "Update verfügbar"-Hinweis (nur Textmodus) höchstens einmal pro Tag an.AZPIM_NO_UPDATE_NOTIFIER=1 (oder AZPIM_DISABLE_UPDATE_CHECK=1).Der Update-Check-Cache wird zusammen mit den Presets in Ihrem Konfigurationsverzeichnis gespeichert:
~/.config/azpim/update-check.json (oder $XDG_CONFIG_HOME/azpim/update-check.json)%APPDATA%\azpim\update-check.jsonVerwenden Sie Flags, um PIM-Rollen direkt ohne das interaktive Menü zu aktivieren oder zu deaktivieren – ideal für Skripterstellung und CI/CD-Workflows.
# Einzelne Rolle nach Namen aktivieren (nicht-interaktiv)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--duration-hours 2 \
--justification "Break-glass für Vorfall" \
--output json
# Mehrere Rollen aktivieren (--role-name wiederholen)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--role-name "User Access Administrator"
# Wenn ein Rollenname mehreren berechtigten Rollen (unterschiedliche Bereiche) entspricht,
# führt --non-interactive zu einem Fehler, es sei denn, Sie erlauben explizit die Aktivierung aller Übereinstimmungen
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--allow-multiple
# Vorschau, was passieren würde, ohne Anfragen zu senden
azpim activate --non-interactive --dry-run \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--output json
# Bestimmte Rollen deaktivieren
azpim deactivate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--justification "Aufgabe erledigt"
# Über alle Abonnements hinweg deaktivieren (subscription-id weglassen)
azpim deactivate --non-interactive --yes \
--role-name "Contributor" \
--allow-multiple
Gemeinsame Flags (aktivieren/deaktivieren):
--non-interactive – Interaktive Eingabeaufforderungen deaktivieren-y, --yes – Bestätigungsaufforderungen überspringen--subscription-id <id> – Zielabonnement (optional bei Deaktivierung)--role-name <name> – Zielrollenname(n) (kann wiederholt werden)--allow-multiple – Mehrere Rollenübereinstimmungen zulassen--dry-run – Vorschau ohne Ausführung--output <text|json> – Ausgabeformat (Standard: text)--quiet – Nicht wesentliche Ausgabe unterdrückenAktivierungsspezifisch:
--duration-hours <n> – Dauer (1–8 Stunden, Standard variiert je nach Rolle)--justification <text> – Begründung für die AktivierungDeaktivierungsspezifisch:
--justification <text> – Begründung für die Deaktivierung (optional)Presets ermöglichen es Ihnen, Ihre täglichen Aktivierungs-/Deaktivierungsroutinen (Abonnement + Rollennamen + Dauer + Begründung) zu speichern und mit --preset <name> wiederzuverwenden.
Standardmäßig werden Presets in einer benutzerspezifischen Konfigurationsdatei gespeichert:
~/.config/azpim/presets.json (oder $XDG_CONFIG_HOME/azpim/presets.json)%APPDATA%\azpim\presets.jsonÜberschreiben Sie den Speicherort mit:
AZPIM_PRESETS_PATH=/pfad/zu/presets.jsonEin Preset kann einen oder beide Blöcke definieren:
activate: subscriptionId, roleNames[], durationHours, justification, allowMultipledeactivate: subscriptionId (optional), roleNames[], justification, allowMultiplejustification unterstützt einfache Vorlagen:
${date} → YYYY-MM-DD${datetime} → ISO-Zeitstempel${userPrincipalName} – aufgelöst über Microsoft Graph /me# Preset erstellen (interaktiver Assistent)
azpim preset add daily-ops
# Preset mit Azure-Integration erstellen (holt Abonnements/Rollen)
azpim preset add daily-ops --from-azure
# Preset bearbeiten (interaktiver Assistent)
azpim preset edit daily-ops
# Alle Presets auflisten
azpim preset list
# Details eines Presets anzeigen
azpim preset show daily-ops
# Preset entfernen
azpim preset remove daily-ops
# Preset verwenden (Flags überschreiben weiterhin Preset-Werte)
azpim activate --preset daily-ops --yes
# Nicht-interaktiver Lauf mit dem Preset
azpim activate --preset daily-ops --non-interactive --yes --output json
# Deaktivierung mit einem Preset
azpim deactivate --preset daily-ops --non-interactive --yes
Wenn Sie ein Preset über azpim preset add erstellen, können Sie es optional als Standard für activate und/oder deactivate festlegen.
azpim activate --non-interactive --yes funktionieren, ohne --subscription-id/--role-name anzugeben.╔════════════════════════════════════════════════════╗
║ Azure PIM CLI - Rollenaktivierungsmanager ║
╚════════════════════════════════════════════════════╝
✔ Authentifizierung erfolgreich
┌─ Benutzerinformationen ─────────────────────────────
│ Name: Max Mustermann
│ E-Mail: [email protected]
└──────────────────────────────────────────────────────
✔ 3 Abonnement(s) gefunden
? Was möchten Sie tun?
❯ ▶ Rolle(n) aktivieren
◼ Rolle(n) deaktivieren
✕ Beenden
Favoriten ermöglichen es Ihnen, bestimmte Abonnements für den schnellen Zugriff zu markieren. Favoriten-Abonnements werden im interaktiven Menü oben in der Abonnementliste angezeigt.
Standardmäßig werden Favoriten benutzerspezifisch gespeichert:
~/.config/azpim/users/<userId>/favorites.json%APPDATA%\azpim\users\<userId>\favorites.jsonÜberschreiben Sie den Speicherort mit:
AZPIM_FAVORITES_PATH=/pfad/zu/favorites.json# Alle Favoriten auflisten
azpim favorites list
azpim fav list
# Abonnement zu Favoriten hinzufügen
azpim favorites add <subscription-id>
# Hinzufügen, auch wenn das Abonnement nicht im Cache ist
azpim favorites add <subscription-id> --force
# Abonnement aus Favoriten entfernen
azpim favorites remove <subscription-id>
# Alle Favoriten löschen
azpim favorites clear
# Favoriten in eine Datei exportieren
azpim favorites export ./my-favorites.json
# Favoriten aus einer Datei importieren (ersetzt vorhandene)
azpim favorites import ./my-favorites.json
# Favoriten importieren und mit vorhandenen zusammenführen
azpim favorites import ./my-favorites.json --merge
# Abonnement-Cache aktualisieren
azpim favorites refresh
azpim speichert Abonnementinformationen automatisch zwischen, um die Startzeit zu verbessern. Der Cache hat eine TTL (Time-to-Live) von 6 Stunden und wird bei Ablauf automatisch aktualisiert.
Cache-Dateien werden benutzerspezifisch gespeichert:
~/.config/azpim/users/<userId>/subscriptions-cache.json%APPDATA%\azpim\users\<userId>\subscriptions-cache.json# Cache des Abonnement-Cache erzwingen
azpim favorites refresh
# Im Entwicklungsmodus mit Hot-Reload ausführen
pnpm dev
# TypeScript-Projekt erstellen
pnpm build
# Erstellte Anwendung ausführen
pnpm start
# Codebasis linten
pnpm lint
Dieses Repository verwendet das Keep a Changelog-Format in CHANGELOG.md.
Für beste Ergebnisse verwenden Sie Conventional Commits:
feat: ... (neue Funktion) → Minor-Bumpfix: ... (Fehlerbehebung) → Patch-Bumpchore: ..., docs: ..., refactor: ... (kein Bump, es sei denn, es ist ein Breaking Change)Stellen Sie sicher, dass CHANGELOG.md aktuelle Einträge unter Unreleased enthält.
Führen Sie einen der folgenden Befehle aus:
# Ermittelt automatisch die nächste Version aus Commits, aktualisiert CHANGELOG.md,
# erhöht die Version in package.json und erstellt einen Git-Tag.
pnpm release
# Vorschau, was sich ändern würde
pnpm release:dry
# Erzwingen eines bestimmten Bumps, falls erforderlich
pnpm release -- --release-as patch
pnpm release -- --release-as minor
pnpm release -- --release-as major
git push --follow-tags
npm publish
# oder
pnpm publish
azpim/
├── src/
│ ├── index.ts # CLI-Einstiegspunkt und Befehlsdefinitionen
│ ├── core/ # Grundlegende Hilfsprogramme (keine Domänenlogik)
│ │ ├── constants.ts # Gemeinsame magische Werte und Standardwerte
│ │ ├── errors.ts # Einheitliche Fehlerbehandlung
│ │ ├── json-store.ts # Generische JSON-Datei-Persistenz
│ │ ├── paths.ts # Auflösung von Konfigurations-/Daten-Dateipfaden
│ │ └── ui.ts # Terminal-UI (Spinner, Formatierung, Farben)
│ ├── azure/ # Azure SDK-Wrapper
│ │ ├── auth.ts # Azure CLI-Anmeldeinformationen + Graph-/me-Abfrage
│ │ └── azure-pim.ts # PIM-Rollenaktivierungs-/Deaktivierungs-API
│ ├── data/ # Lokale Datenpersistenz
│ │ ├── favorites.ts # Favoritenverwaltung
│ │ ├── presets.ts # Preset-Konfiguration und -Validierung
│ │ ├── subscription-cache.ts # Abonnement-Caching (6 Stunden TTL)
│ │ └── update-check.ts # Update-Benachrichtigungssystem
│ └── cli/ # Interaktive Abläufe und Befehlsgerüste
│ ├── cli.ts # Hauptmenü-Schleife und gemeinsame Helfer
│ ├── command-handler.ts # Wiederverwendbarer Befehls-Wrapper (Auth, UI, Fehler)
│ ├── activate-flow.ts # Rollenaktivierung (one-shot + interaktiv)
│ ├── deactivate-flow.ts # Rollendeaktivierung (one-shot + interaktiv)
│ ├── subscription-selector.ts # Abonnementsuche/-auswahl mit Favoriten
│ ├── favorites-manager.ts # Interaktives Favoritenverwaltungsmenü
│ └── presets-cli.ts # Assistenten zum Hinzufügen/Bearbeiten/Verwalten von Presets
├── package.json
├── tsconfig.json
├── CHANGELOG.md
└── README.md
Die Codebasis folgt einer geschichteten Modulstruktur:
core/ – Null-Abhängigkeits-Hilfsprogramme, die im gesamten Projekt gemeinsam genutzt werden. json-store.ts bietet ein generisches Lade-/Speichermuster, das von allen Datenpersistenzdateien verwendet wird. errors.ts zentralisiert die Fehlererkennung und die Fehlerbehandlung auf BefehlsEbene. constants.ts eliminiert magische Werte.azure/ – Dünne Wrapper um Azure SDKs (@azure/identity, @azure/arm-authorization) und einen leichten Microsoft Graph /me-Aufruf über natives fetch. Keine UI-Logik.data/ – Lokale Dateipersistenz (Favoriten, Presets, Abonnement-Cache, Update-Status). Alle verwenden json-store für konsistentes Datei-I/O.cli/ – Benutzerorientierte interaktive Abläufe und Befehlsgerüste. stellt einen -Wrapper bereit, der Boilerplate (Auth, UI-Einrichtung, Fehlerbehandlung) für alle Commander-Befehle eliminiert. Aktivierungs- und Deaktivierungsabläufe teilen sich eine -Funktion aus .Stellen Sie sicher, dass die Azure CLI installiert und im PATH verfügbar ist:
az --version
Stellen Sie sicher, dass Sie bei der Azure CLI angemeldet sind:
az login
Überprüfen Sie, ob Ihr Konto über PIM-berechtigte Rollen verfügt:
az account show
Prüfen Sie, ob Sie die erforderlichen Berechtigungen in Azure AD haben
az login --refreshDieses Projekt ist unter der ISC-Lizenz lizenziert.
Tapan Meena – [email protected]
Beiträge sind willkommen! Bitte zögern Sie nicht, einen Pull-Request zu erstellen.
git checkout -b feature/amazing-feature)git commit -m 'Füge eine tolle Funktion hinzu')git push origin feature/amazing-feature)| Befehl | Alias | Beschreibung |
|---|
activate | a | Aktivieren einer Rolle in Azure PIM (Standard) |
deactivate | d | Deaktivieren einer Rolle in Azure PIM |
preset | - | Verwaltung wiederverwendbarer Presets |
favorites | fav | Verwaltung von Favoriten-Abonnements |
check-update | update, upgrade | Prüfen auf eine neuere Version |
help | - | Hilfeinformationen anzeigen |
| Befehl | Beschreibung |
|---|
preset list | Alle verfügbaren Presets auflisten |
preset show | Details eines bestimmten Presets anzeigen |
preset add | Neues Preset hinzufügen (interaktiver Assistent) |
preset edit | Vorhandenes Preset bearbeiten (interaktiver Assistent) |
preset remove | Preset entfernen |
| Befehl | Beschreibung |
|---|
favorites list | Alle Favoriten-Abonnements auflisten |
favorites add | Abonnement zu Favoriten hinzufügen |
favorites remove | Abonnement aus Favoriten entfernen |
favorites clear | Alle Favoriten löschen |
favorites export | Favoriten in eine Datei exportieren |
favorites import | Favoriten aus einer Datei importieren |
favorites refresh | Abonnement-Cache aktualisieren |
command-handler.tswithCommandHandlerselectSubscriptionInteractivesubscription-selector.ts| Variable | Beschreibung |
|---|
AZPIM_PRESETS_PATH | Überschreibt den Pfad der Preset-Datei |
AZPIM_FAVORITES_PATH | Überschreibt den Pfad der Favoriten-Datei |
AZPIM_NO_UPDATE_NOTIFIER | Auf 1 setzen, um automatische Update-Prüfungen zu deaktivieren |
AZPIM_DISABLE_UPDATE_CHECK | Alias für AZPIM_NO_UPDATE_NOTIFIER |