
Ferramenta de CLI para auditar a postura de segurança do Azure, RBAC, NSGs, armazenamento, identidade e criptografia.
Uma ferramenta CLI leve, em estilo de produção, que audita as configurações de segurança do Azure e evidencia configurações incorretas comuns — espelhando o que o Microsoft Defender for Cloud verifica internamente.
| ID | Categoria | Verificação | Gravidade |
|---|---|---|---|
| AZ-001 | RBAC | Proprietário / Colaborador atribuído no escopo da assinatura | CRITICAL |
| AZ-002 | RBAC | Proprietário / Colaborador atribuído no escopo do grupo de recursos | HIGH |
| AZ-003 | Rede | NSG com regra de permissão de entrada 0.0.0.0/0 | HIGH |
| AZ-004 | Armazenamento | Conta de armazenamento com acesso público a blobs habilitado | HIGH |
| AZ-005 | Identidade | Usuário do Entra ID sem MFA registrado | HIGH |
| AZ-006 | Identidade | Principal de serviço com permissões de Proprietário / Colaborador | HIGH |
| AZ-007 | Criptografia | Disco gerenciado sem configuração explícita de criptografia | MEDIUM |
| AZ-008 | Criptografia | Key Vault exposto à rede pública sem restrições de firewall | HIGH |
| AZ-009 | Monitoramento | Retenção do log de atividades abaixo de 90 dias | MEDIUM |
| AZ-010 | Monitoramento | Microsoft Defender for Cloud não habilitado em tipos de recursos-chave | HIGH |
| AZ-011 | Monitoramento | Key Vault sem log de diagnóstico habilitado | MEDIUM |
| AZ-012 | Computação | Máquina Virtual com IP público diretamente anexado | MEDIUM |
| AZ-013 | Computação | Máquina Virtual sem extensão de proteção de endpoint | MEDIUM |
| AZ-014 | Computação | Disco do sistema operacional da Máquina Virtual sem Azure Disk Encryption (ADE) | MEDIUM |
| AZ-015 | Rede | Porta RDP 3389 exposta à internet via NSG | CRITICAL |
| AZ-016 | Rede | Porta SSH 22 exposta à internet via NSG | CRITICAL |
| AZ-017 | Armazenamento | Conta de armazenamento permitindo tráfego não-HTTPS | HIGH |
| AZ-018 | Armazenamento | Conta de armazenamento permitindo versões legadas de TLS (abaixo de 1.2) | MEDIUM |
| AZ-019 | Identidade |
az login (CLI do Azure)AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_IDReader na assinaturaUserAuthenticationMethod.Read.AllApplication.Read.AllAs verificações de identidade (AZ-005, AZ-019) são ignoradas sem erros se as permissões da API do Graph não estiverem disponíveis — o restante da auditoria é executado sem ser afetado.
pip install -e .
# Full audit — all checks, all severities
azure-auditor
# Target a specific subscription
azure-auditor --subscription <subscription-id>
# Show only HIGH and CRITICAL findings
azure-auditor --severity HIGH
# Save JSON report to a specific directory
azure-auditor --output-dir ./reports
# Terminal output only
azure-auditor --no-json
# Verbose logging
azure-auditor --verbose
Ou sem instalar:
PYTHONPATH=src python -m azure_security_auditor.cli --subscription <id>
Terminal — Tabela formatada com Rich, ordenada por gravidade (CRITICAL primeiro):
╭──────────────────────────────────────────────────────────────────╮
│ Azure Security Posture Audit │
│ Subscription: My Production Subscription │
│ ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │
│ Run at: 2026-07-12T10:00:00Z │
│ Findings: 12 total (2 CRITICAL 6 HIGH 4 MEDIUM 0 LOW) │
╰──────────────────────────────────────────────────────────────────╯
Severity Check ID Check Resource Detail
✖ CRITICAL AZ-015 RDP Port 3389 Exposed to Internet... /subscriptions/. ...
✖ CRITICAL AZ-001 Owner Role Assigned at Subscription... <principal-id> ...
■ HIGH AZ-010 Defender for Cloud Not Enabled — VMs /subscriptions/. ...
...
JSON — Gravado em reports/azure_audit_<subscription>_<timestamp>.json.
src/
azure_security_auditor/
cli.py # argparse entrypoint
engine.py # ThreadPoolExecutor orchestrator
models.py # Finding, AuditResult, Severity
checks/
rbac.py # AZ-001, AZ-002
network.py # AZ-003, AZ-015, AZ-016
storage.py # AZ-004, AZ-017, AZ-018
identity.py # AZ-005, AZ-019
service_principals.py # AZ-006
encryption.py # AZ-007, AZ-008, AZ-020
monitoring.py # AZ-009, AZ-010, AZ-011
compute.py # AZ-012, AZ-013, AZ-014
reporters/
terminal.py # Rich table output
json_reporter.py # JSON file output
Usa DefaultAzureCredential — tenta na ordem:
AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID)az login)export AZURE_CLIENT_ID="<app-id>"
export AZURE_CLIENT_SECRET="<secret>"
export AZURE_TENANT_ID="<tenant-id>"
azure-auditor --subscription <subscription-id>
| Contas de usuário convidado presentes no locatário do Entra ID |
| LOW |
| AZ-020 | Criptografia | Key Vault sem exclusão temporária ou proteção contra purga | MEDIUM |