
Uma ferramenta de interface de linha de comando para gerenciar ativações de funções do Azure Privileged Identity Management (PIM) diretamente do seu terminal.
Uma ferramenta de interface de linha de comando para gerenciar ativações de funções do Azure Privileged Identity Management (PIM) diretamente do seu terminal.
Antes de usar o azpim, certifique-se de ter:
# Instalar a Azure CLI (se não estiver instalada)
# Veja: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli
# Fazer login no Azure
az login
# Verificar se está logado
az account show
# Usando npm
npm install -g azpim
# Usando pnpm
pnpm add -g azpim
# Usando yarn
yarn global add azpim
Após a instalação, o comando azpim estará disponível globalmente.
Se você usava o azp-cli anteriormente, suas predefinições estão armazenadas em ~/.config/azp-cli/ (ou %APPDATA%\azp-cli\ no Windows). Para migrar:
presets.json para o novo local: ~/.config/azpim/ (ou %APPDATA%\azpim\)npm uninstall -g azp-cli# Clonar o repositório
git clone https://github.com/tapanmeena/azpim.git
cd azpim
# Instalar dependências
pnpm install
# Compilar o projeto
pnpm build
# Vincular globalmente para desenvolvimento
npm link
# Após instalação global
azpim
# Ou com comandos específicos
azpim activate
azpim deactivate
azpim preset list
azpim update
# Modo de desenvolvimento (a partir do código fonte)
pnpm dev
Flags Globais:
--debug - Ativar log de depuração--version - Mostrar número da versãoVocê pode verificar se há uma versão mais recente disponível:
azpim update
# alias
azpim upgrade
Notas:
azpim update sai com código 0 quando atualizado, 2 quando uma atualização está disponível e 1 em caso de erro.--check-only - Apenas verificar e imprimir o status sem mostrar instruções de atualização.--output json retorna uma resposta estruturada adequada para scripts.azpim activate e azpim deactivate também mostrarão uma breve dica "atualização disponível" (apenas modo texto) no máximo uma vez por dia.AZPIM_NO_UPDATE_NOTIFIER=1 (ou AZPIM_DISABLE_UPDATE_CHECK=1).O cache de verificação de atualização é armazenado junto com as predefinições no diretório de configuração:
~/.config/azpim/update-check.json (ou $XDG_CONFIG_HOME/azpim/update-check.json)%APPDATA%\azpim\update-check.jsonUse flags para ativar ou desativar funções do PIM diretamente, sem passar pelo menu interativo, perfeito para scripts e fluxos de trabalho CI/CD.
# Ativar uma única função pelo nome (não interativo)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--duration-hours 2 \
--justification "Break-glass for incident" \
--output json
# Ativar múltiplas funções (repetir --role-name)
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--role-name "User Access Administrator"
# Se um nome de função corresponder a várias funções elegíveis (diferentes escopos),
# --non-interactive gerará erro a menos que você permita explicitamente ativar todas as correspondências
azpim activate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--allow-multiple
# Visualizar o que aconteceria sem enviar solicitações
azpim activate --non-interactive --dry-run \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Contributor" \
--output json
# Desativar funções específicas
azpim deactivate --non-interactive --yes \
--subscription-id <SUBSCRIPTION_GUID> \
--role-name "Owner" \
--justification "Task completed"
# Desativar em todas as assinaturas (omitir subscription-id)
azpim deactivate --non-interactive --yes \
--role-name "Contributor" \
--allow-multiple
Flags comuns (ativar/desativar):
--non-interactive - Desabilitar prompts interativos-y, --yes - Pular prompts de confirmação--subscription-id <id> - Assinatura de destino (opcional para desativar)--role-name <name> - Nome(s) da(s) função(ões) a serem direcionadas (pode ser repetido)--allow-multiple - Permitir múltiplas correspondências de funções--dry-run - Visualizar sem enviar--output <text|json> - Formato de saída (padrão: text)--quiet - Suprimir saída não essencialEspecífico para ativação:
--duration-hours <n> - Duração (1-8 horas, o padrão varia por função)--justification <text> - Justificativa para a ativaçãoEspecífico para desativação:
--justification <text> - Justificativa para a desativação (opcional)As predefinições permitem salvar suas rotinas diárias de ativação/desativação (assinatura + nomes de funções + duração + justificativa) e reutilizá-las com --preset <name>.
Por padrão, as predefinições são armazenadas em um arquivo de configuração por usuário:
~/.config/azpim/presets.json (ou $XDG_CONFIG_HOME/azpim/presets.json)%APPDATA%\azpim\presets.jsonSubstitua o local com:
AZPIM_PRESETS_PATH=/caminho/para/presets.jsonUma predefinição pode definir um ou ambos os blocos:
activate: subscriptionId, roleNames[], durationHours, justification, allowMultipledeactivate: subscriptionId (opcional), roleNames[], justification, allowMultiplejustification suporta templates simples:
${date} → YYYY-MM-DD${datetime} → Timestamp ISO${userPrincipalName} → resolvido do Microsoft Graph /me# Criar uma predefinição (assistente interativo)
azpim preset add daily-ops
# Criar uma predefinição com integração ao Azure (busca assinaturas/funções)
azpim preset add daily-ops --from-azure
# Editar uma predefinição (assistente interativo)
azpim preset edit daily-ops
# Listar todas as predefinições
azpim preset list
# Mostrar detalhes de uma predefinição
azpim preset show daily-ops
# Remover uma predefinição
azpim preset remove daily-ops
# Usar uma predefinição (flags ainda substituem valores da predefinição)
azpim activate --preset daily-ops --yes
# Execução não interativa usando a predefinição
azpim activate --preset daily-ops --non-interactive --yes --output json
# Desativar usando uma predefinição
azpim deactivate --preset daily-ops --non-interactive --yes
Ao criar uma predefinição via azpim preset add, você pode opcionalmente defini-la como padrão para activate e/ou deactivate.
azpim activate --non-interactive --yes pode funcionar sem especificar --subscription-id/--role-name.╔════════════════════════════════════════════════════╗
║ Azure PIM CLI - Gerenciador de Ativação de Funções ║
╚════════════════════════════════════════════════════╝
✔ Autenticação bem-sucedida
┌─ Informações do Usuário ──────────────────────────────────
│ Nome: John Doe
│ Email: [email protected]
└──────────────────────────────────────────────────────
✔ 3 assinatura(s) encontrada(s)
? O que você gostaria de fazer?
❯ ▶ Ativar Função(ões)
◼ Desativar Função(ões)
✕ Sair
Os favoritos permitem marcar assinaturas específicas para acesso rápido. Assinaturas favoritas são exibidas no topo das listas de assinaturas no menu interativo.
Por padrão, os favoritos são armazenados por usuário:
~/.config/azpim/users/<userId>/favorites.json%APPDATA%\azpim\users\<userId>\favorites.jsonSubstitua o local com:
AZPIM_FAVORITES_PATH=/caminho/para/favorites.json# Listar todos os favoritos
azpim favorites list
azpim fav list
# Adicionar uma assinatura aos favoritos
azpim favorites add <subscription-id>
# Adicionar mesmo que a assinatura não esteja no cache
azpim favorites add <subscription-id> --force
# Remover uma assinatura dos favoritos
azpim favorites remove <subscription-id>
# Limpar todos os favoritos
azpim favorites clear
# Exportar favoritos para um arquivo
azpim favorites export ./my-favorites.json
# Importar favoritos de um arquivo (substitui os existentes)
azpim favorites import ./my-favorites.json
# Importar favoritos e mesclar com os existentes
azpim favorites import ./my-favorites.json --merge
# Atualizar o cache de assinaturas
azpim favorites refresh
O azpim armazena automaticamente em cache as informações de assinatura para melhorar o tempo de inicialização. O cache tem um TTL (time-to-live) de 6 horas e é atualizado automaticamente quando expirado.
Os arquivos de cache são armazenados por usuário:
~/.config/azpim/users/<userId>/subscriptions-cache.json%APPDATA%\azpim\users\<userId>\subscriptions-cache.json# Forçar atualização do cache de assinaturas
azpim favorites refresh
# Executar em modo de desenvolvimento com recarga automática
pnpm dev
# Compilar o projeto TypeScript
pnpm build
# Executar a aplicação compilada
pnpm start
# Verificar lint do código
pnpm lint
Este repositório usa o formato Keep a Changelog em CHANGELOG.md.
Para melhores resultados, use Conventional Commits:
feat: ... (nova funcionalidade) → incremento minorfix: ... (correção de bug) → incremento patchchore: ..., docs: ..., refactor: ... (nenhum incremento a menos que seja breaking)Certifique-se de que CHANGELOG.md tenha entradas atualizadas sob Unreleased.
Execute um dos seguintes:
# Determina automaticamente a próxima versão a partir dos commits, atualiza CHANGELOG.md,
# incrementa package.json e cria uma tag git.
pnpm release
# Visualizar o que mudaria
pnpm release:dry
# Forçar um incremento específico, se necessário
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 # Ponto de entrada da CLI e definições de comandos
│ ├── core/ # Utilitários fundamentais (sem lógica de domínio)
│ │ ├── constants.ts # Valores mágicos e padrões compartilhados
│ │ ├── errors.ts # Utilitários unificados de tratamento de erros
│ │ ├── json-store.ts # Persistência genérica de arquivos JSON
│ │ ├── paths.ts # Resolução de caminhos de arquivo de configuração/dados
│ │ └── ui.ts # Interface do terminal (spinners, formatação, cores)
│ ├── azure/ # Wrappers do SDK do Azure
│ │ ├── auth.ts # Credencial da Azure CLI + pesquisa Graph /me
│ │ └── azure-pim.ts # API de ativação/desativação de funções PIM
│ ├── data/ # Persistência de dados local
│ │ ├── favorites.ts # Gerenciamento de favoritos
│ │ ├── presets.ts # Configuração e validação de predefinições
│ │ ├── subscription-cache.ts # Cache de assinaturas (TTL de 6 horas)
│ │ └── update-check.ts # Sistema de notificação de atualização
│ └── cli/ # Fluxos interativos e estrutura de comandos
│ ├── cli.ts # Loop do menu principal e helpers compartilhados
│ ├── command-handler.ts # Wrapper de comando reutilizável (auth, UI, erros)
│ ├── activate-flow.ts # Ativação de função (única + interativa)
│ ├── deactivate-flow.ts # Desativação de função (única + interativa)
│ ├── subscription-selector.ts # Pesquisa/seleção de assinatura com favoritos
│ ├── favorites-manager.ts # Menu interativo de gerenciamento de favoritos
│ └── presets-cli.ts # Assistentes de adicionar/editar/gerenciar predefinições
├── package.json
├── tsconfig.json
├── CHANGELOG.md
└── README.md
O código segue uma estrutura de módulos em camadas:
core/ — Utilitários sem dependências compartilhados em todo o projeto. json-store.ts fornece um padrão genérico de carregamento/salvamento usado por todos os arquivos de persistência de dados. errors.ts centraliza a extração de erros e o tratamento de erros em nível de comando. constants.ts elimina valores mágicos.azure/ — Wrappers finos ao redor dos SDKs do Azure (@azure/identity, @azure/arm-authorization) e uma chamada leve ao Microsoft Graph /me via fetch nativo. Sem lógica de UI.data/ — Persistência de arquivos local (favoritos, predefinições, cache de assinaturas, estado de atualização). Todos usam json-store para E/S de arquivos consistente.cli/ — Fluxos interativos voltados ao usuário e estrutura de comandos. fornece um wrapper que elimina código repetitivo (auth, configuração de UI, tratamento de erros) em todos os comandos do Commander. Os fluxos de ativação e desativação compartilham uma função de .Certifique-se de que a Azure CLI está instalada e acessível no seu PATH:
az --version
Certifique-se de que está logado na Azure CLI:
az login
Verifique se sua conta tem funções elegíveis para PIM:
az account show
Verifique se você tem as permissões necessárias no Azure AD
az login --refreshEste projeto está licenciado sob a Licença ISC.
Tapan Meena - [email protected]
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.
git checkout -b feature/minha-funcionalidade-incrivel)git commit -m 'Adiciona alguma funcionalidade incrível')git push origin feature/minha-funcionalidade-incrivel)| Comando | Alias | Descrição |
|---|
activate | a | Ativar uma função no Azure PIM (padrão) |
deactivate | d | Desativar uma função no Azure PIM |
preset | - | Gerenciar predefinições reutilizáveis |
favorites | fav | Gerenciar assinaturas favoritas |
check-update | update, upgrade | Verificar se há uma versão mais recente |
help | - | Exibir informações de ajuda |
| Comando | Descrição |
|---|
preset list | Listar todas as predefinições disponíveis |
preset show | Mostrar detalhes de uma predefinição específica |
preset add | Adicionar uma nova predefinição (assistente interativo) |
preset edit | Editar uma predefinição existente (assistente interativo) |
preset remove | Remover uma predefinição |
| Comando | Descrição |
|---|
favorites list | Listar todas as assinaturas favoritas |
favorites add | Adicionar uma assinatura aos favoritos |
favorites remove | Remover uma assinatura dos favoritos |
favorites clear | Limpar todos os favoritos |
favorites export | Exportar favoritos para um arquivo |
favorites import | Importar favoritos de um arquivo |
favorites refresh | Atualizar o cache de assinaturas |
command-handler.tswithCommandHandlerselectSubscriptionInteractivesubscription-selector.ts| Variável | Descrição |
|---|
AZPIM_PRESETS_PATH | Substituir o caminho do arquivo de predefinições |
AZPIM_FAVORITES_PATH | Substituir o caminho do arquivo de favoritos |
AZPIM_NO_UPDATE_NOTIFIER | Defina como 1 para desabilitar verificações automáticas de atualização |
AZPIM_DISABLE_UPDATE_CHECK | Alias para AZPIM_NO_UPDATE_NOTIFIER |