Pular para o conteúdo principal

Auditoria de Usuários no Azure AD: Script Prático para Gestão e Segurança da Sua Empresa

 Olá, pessoal!

Gerenciar usuários no Azure Active Directory é uma tarefa que demanda atenção constante — especialmente quando falamos de auditoria e governança de acessos. Para ajudar times de TI e gestores a terem uma visão clara da estrutura de usuários e suas relações de gerenciamento, desenvolvi um script em PowerShell para auditoria que gera um relatório completo em Excel, sem modificar nada no ambiente.

Por que realizar auditorias periódicas no Azure AD?

- Visibilidade: Saber quem está ativo, quem possui licença, quem gerencia quem.

- Segurança: Identificar contas sem gestor, que podem representar riscos ou erros administrativos.

- Organização: Ter relatórios rápidos para decisões e validações em auditorias internas.

O que o script faz?

  • Lista todos os usuários ativos do tipo 'Member' (exclui contas guest e desativadas).

  • Identifica usuários que possuem gestor e aqueles que não têm.

  • Mapeia gestores que possuem subordinados ativos.

  • Coleta dados importantes como nome, UPN, departamento, status da conta e status de licença.

  • Gera um arquivo Excel com várias abas para fácil análise:

    • Usuários com manager

    • Usuários sem manager

    • Managers com subordinados

    • Resumo gráfico e tabelas para insights rápidos

Como o script ajuda seu time?

- Disponibilizar essa ferramenta para seu time é garantir uma auditoria rápida, segura e prática, sem risco de alterar dados no ambiente.

- O arquivo é gerado localmente com timestamp para controle histórico.

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

Import-Module ImportExcel

Connect-AzureAD


$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"

$excelPath = "AuditoriaUsuarios_$timestamp.xlsx"


# Arrays para armazenar dados

$comManager = @()

$semManager = @()

$managersComSubordinados = @()


$usuarios = Get-AzureADUser -All $true | Where-Object {

    $_.UserType -eq 'Member' -and $_.AccountEnabled -eq $true -and $_.UserPrincipalName -notlike "*#EXT#*"

}


foreach ($user in $usuarios) {

    $manager = Get-AzureADUserManager -ObjectId $user.ObjectId -ErrorAction SilentlyContinue

    $licenciado = (Get-AzureADUserLicenseDetail -ObjectId $user.ObjectId -ErrorAction SilentlyContinue).Count -gt 0

    $statusLicenca = if ($licenciado) { "Licensed" } else { "Unlicensed" }

    $statusConta = if ($user.AccountEnabled) { "Active" } else { "Disabled" }


    if ($manager) {

        $comManager += [PSCustomObject]@{

            Nome            = $user.DisplayName

            UPN             = $user.UserPrincipalName

            Departamento    = $user.Department

            'Manager Nome'  = $manager.DisplayName

            'Manager UPN'   = $manager.UserPrincipalName

            'Status Conta'  = $statusConta

            'Status Licença'= $statusLicenca

        }

    } else {

        $semManager += [PSCustomObject]@{

            Nome            = $user.DisplayName

            UPN             = $user.UserPrincipalName

            Departamento    = $user.Department

            'Manager Nome'  = "N/A"

            'Manager UPN'   = "N/A"

            'Status Conta'  = $statusConta

            'Status Licença'= $statusLicenca

        }

    }


    $subordinados = Get-AzureADUserDirectReport -ObjectId $user.ObjectId -ErrorAction SilentlyContinue

    if ($subordinados.Count -gt 0) {

        $managersComSubordinados += [PSCustomObject]@{

            NomeManager        = $user.DisplayName

            UPNManager         = $user.UserPrincipalName

            Departamento       = $user.Department

            StatusConta        = $statusConta

            StatusLicenca      = $statusLicenca

            QtdSubordinados    = $subordinados.Count

            'Nomes Subordinados' = ($subordinados | Select-Object -ExpandProperty DisplayName) -join ", "

            'UPNs Subordinados'  = ($subordinados | Select-Object -ExpandProperty UserPrincipalName) -join ", "

        }

    }

}


# Exporta para Excel (com múltiplas abas)

# ...

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

Agora que você já tem o script pronto para rodar, é hora de colocar em prática essa auditoria no seu ambiente Azure AD. Manter o controle sobre usuários, gestores e licenças ajuda a garantir a segurança e a eficiência da sua infraestrutura.

Lembre-se: auditorias regulares são a base para uma governança forte e para evitar surpresas no futuro. Use essa ferramenta sempre que precisar e compartilhe com seu time para facilitar o trabalho de todos.

Se gostou, deixe seu comentário, compartilhe este artigo e fique ligado para mais conteúdos práticos que facilitam o dia a dia do profissional de TI.



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 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...

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...