Pular para o conteúdo principal

Auditoria de Usuários Ativos no Azure AD com Último Login e Tipo de Conta

Durante a gestão de ambientes em nuvem, é comum nos depararmos com contas de usuários que permanecem ativas, mesmo sem uso recente. Isso impacta diretamente no consumo de licenças e na postura de segurança da organização.

Pensando nisso, desenvolvi um script em PowerShell utilizando o Microsoft Graph para facilitar auditorias de contas ativas no Azure AD, trazendo informações importantes como:

  • Nome do usuário

  • E-mail (UPN)

  • Departamento e cargo

  • Data de criação da conta

  • Último login registrado

  • Tipo de conta (nuvem ou sincronizada com AD local)

    O que o script faz?

    - Conecta-se ao Microsoft Graph com as permissões necessárias
    - Busca todos os usuários internos ativos (tipo "Member")
    - Verifica a última data de login registrada
    - Informa se a conta é nuvem (Cloud Only) ou sincronizada (On-Premises)
    - Exporta os dados para um relatório CSV

================================================================
# Script para auditoria de usuários ativos no Azure AD
Write-Host "Conectando ao Microsoft Graph..." -ForegroundColor Cyan
Connect-MgGraph -Scopes "User.Read.All", "AuditLog.Read.All"

Write-Host "Buscando usuários ativos internos..." -ForegroundColor Cyan
$usuarios = Get-MgUser -All -Property "DisplayName,UserPrincipalName,UserType,AccountEnabled,Department,JobTitle,CreatedDateTime,SignInActivity,OnPremisesSyncEnabled" |
    Where-Object {
        $_.AccountEnabled -eq $true -and
        $_.UserType -eq "Member"
    }

$resultados = $usuarios | Select-Object `
    @{Name='Nome';Expression={$_.DisplayName}},
    @{Name='UserPrincipal';Expression={$_.UserPrincipalName}},
    @{Name='Departamento';Expression={$_.Department}},
    @{Name='Cargo';Expression={$_.JobTitle}},
    @{Name='CriadoEm';Expression={$_.CreatedDateTime.ToString("yyyy-MM-dd")}},
    @{Name='UltimoAcesso';Expression={
        if ($_.SignInActivity.LastSignInDateTime) {
            ([datetime]$_.SignInActivity.LastSignInDateTime).ToString("yyyy-MM-dd HH:mm:ss")
        } else {
            "Sem login registrado"
        }
    }},
    @{Name='TipoConta';Expression={
        if ($_.OnPremisesSyncEnabled -eq $true) {
            "Sincronizado (AD Local)"
        } else {
            "Nuvem (Cloud Only)"
        }
    }}

# Exporta para CSV
$arquivo = "Auditoria_Usuarios_AzureAD.csv"
Write-Host "Exportando relatório para $arquivo..." -ForegroundColor Green
$resultados | Export-Csv -Path $arquivo -NoTypeInformation -Encoding UTF8

Write-Host "Concluído! Relatório salvo em: $arquivo" -ForegroundColor Green

================================================================

Por que isso é importante?

Fazer esse tipo de auditoria permite:

  • Reduzir custos com licenças não utilizadas

  • Melhorar a segurança, identificando contas obsoletas

  • Tomar decisões assertivas sobre desativação ou revalidação de acessos

 Dica Extra

🔐 Para utilizar o script, é necessário ter o Microsoft Graph PowerShell SDK instalado e permissões de leitura de usuários e logs de auditoria.


Comentários

Postagens mais visitadas deste blog

Otimize Custos e Segurança: Auditoria Fácil de Usuários e Licenças no Azure DevOps

Por que criei este script de auditoria para o Azure DevOps? Em meu trabalho diário com equipes que utilizam o Azure DevOps, percebi que muitos gestores e administradores enfrentam um desafio comum: controlar quem realmente está usando o ambiente, qual tipo de licença está ativa e, principalmente, quando foi a última vez que cada usuário acessou a plataforma. Em ambientes com múltiplas organizações e centenas de usuários, controlar quem realmente utiliza repositórios, pipelines e boards pode gerar uma economia significativa. Tudo isso de forma segura, sem modificar nada no ambiente, garantindo que a auditoria seja apenas informativa. Essa auditoria é essencial para manter a segurança, controlar custos e garantir conformidade. Pensando nisso, criei um script de auditoria que: O que o script verifica? Para cada usuário com licença Basic , o script checa: Commits em repositórios Git Execução de builds no Azure Pipelines Atividades nos Boards (work items modificados) Se o...

Auditoria no Azure AD: o risco oculto das caixas compartilhadas

Durante o planejamento de uma auditoria de contas no Azure AD, me deparei com um desafio importante: ao listar usuários Cloud-Only, percebi que caixas compartilhadas do Exchange Online também são exibidas como contas de usuário comuns no diretório . O problema: Shared Mailboxes que "parecem" usuários Quando criamos uma caixa compartilhada (Shared Mailbox) no Microsoft 365, o sistema cria automaticamente uma conta de usuário associada, com UPN e tudo. Mesmo após a conversão da caixa para o tipo "compartilhada", essa conta permanece visível no Azure AD e continua se comportando como uma conta Cloud-Only. Ou seja, se você estiver rodando um script ou fazendo uma auditoria manual para identificar contas inativas ou que devem ser excluídas, corre o risco de excluir acidentalmente uma caixa de e-mail ativa e compartilhada com outros times . A solução: auditoria com checagem de tipo de caixa Para evitar esse tipo de erro, desenvolvi um script em PowerShell que: Identi...