Pular para o conteúdo principal

Monitoramento de Alterações em App Registrations com Logic Apps e Notificação no Teams

Protegendo seu ambiente com notificações automáticas via Microsoft Teams

1. Introdução

No cenário atual de segurança corporativa, aplicações registradas no Azure Active Directory (App Registrations) são peças-chave no controle de acesso e identidade. Essas aplicações frequentemente possuem permissões críticas e, se alteradas sem controle, podem expor sua organização a sérios riscos.

Neste artigo, você aprenderá como criar uma solução automatizada e eficiente para monitorar alterações em App Registrations usando Azure Logic Apps, com envio de alertas para o Microsoft Teams. Ideal para profissionais de infraestrutura, segurança da informação e governança de TI.

2. Por que monitorar alterações em App Registrations?

Riscos de segurança

Modificações indevidas podem representar ameaças como:

  • Inclusão de permissões excessivas

  • Redirecionamento de URIs para endpoints maliciosos

  • Criação de credenciais clandestinas

  • Mudança na autenticação do app

  • Exclusão acidental ou maliciosa de apps críticos

Conformidade e auditoria

Muitas normas de compliance exigem:

  • Monitoramento contínuo de sistemas sensíveis

  • Trilhas de auditoria detalhadas

  • Capacidade de resposta rápida a incidentes

  • Evidências de controles ativos

Detecção rápida

Com um sistema automatizado você garante:

  • Investigação ágil

  • Restauração de alterações indevidas

  • Minimização de riscos e impactos

Casos de uso

  • Monitorar alterações fora do horário comercial

  • Validar mudanças em apps críticos

  • Verificar ações de administradores privilegiados

  • Auditar conformidade com processos de change management

3. Visão geral da solução

Componentes

  • Azure Logic Apps – Orquestra o fluxo

  • Azure Monitor (Log Analytics) – Armazena logs do Azure AD

  • KQL (Kusto Query Language) – Consulta os logs

  • Microsoft Teams – Canal de notificação

Fluxo de funcionamento

  1. Logic App roda em intervalos definidos (durante o horário comercial)

  2. Executa uma consulta KQL no Log Analytics

  3. Verifica se houve alterações em App Registrations

  4. Agrupa os dados

  5. Se houver alterações, envia uma notificação para o Teams com detalhes

Benefícios

  • Sem código

  • Serverless

  • Custo reduzido

  • Fácil manutenção

  • Integração nativa entre serviços do Azure

4. Pré-requisitos

Acessos necessários

  • Permissão para criar Logic Apps

  • Acesso ao Log Analytics com logs do Azure AD

  • Permissão para postar mensagens em canais do Microsoft Teams

Recursos exigidos

  • Workspace do Log Analytics configurado

  • Diagnóstico do Azure AD habilitado e enviando para Log Analytics

  • Conexão do Teams configurada no Logic Apps

Conhecimentos recomendados

  • Noções de Logic Apps

  • KQL básico

  • Navegação no portal Azure

5. Implementação passo a passo

Criando o Logic App

  1. No portal Azure, vá em Logic Apps > + Adicionar

  2. Preencha:

    • Nome: MonitorAppRegistrationsChanges

    • Grupo de recursos

    • Região

    • Tipo: Consumo

  3. Clique em Revisar + Criar e depois Criar

    Configurando o gatilho

    • Tipo: Recurrence

    • Intervalo: 55

    • Frequência: Minutos

    • Fuso horário: E. South America Standard Time

    • Horário comercial: 8h às 17h

    • Dias úteis: Segunda a sexta

    Recomenda-se 55 min para não sobrepor execuções anteriores

    Consulta KQL no Log Analytics

    1. Adicione a ação Run query and list results

    2. Configure o Log Analytics Workspace

    3. Use a seguinte consulta:

AuditLogs
| where TargetResources[0].type == "Application"
| extend Operation = OperationName
| extend AppName = tostring(TargetResources[0].displayName)
| extend Actor = tostring(InitiatedBy.user.userPrincipalName)
| project TimeGenerated, Operation, AppName, Actor, CorrelationId, Result
| sort by TimeGenerated desc

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

Adicione um For Each

Descrição: Itera sobre cada item retornado pela consulta.

Observação: Não há uso de filtros ou condições. Todos os resultados da consulta são processados e notificados.

Post message in a chat or channel

Conector: Microsoft Teams

Descrição: Envia uma mensagem no Teams para cada item iterado.

Formato sugerido da mensagem:

App Registration Atualizada

Data/Hora: @{items('For_each_1')?['TimeGenerated']}

Nome da Aplicação: @{items('For_each_1')?['AppName']}

App ID: @{items('For_each_1')?['AppId']}

 Modificado por: @{items('For_each_1')?['ModifiedBy']}

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

Considerações Finais

  • Este fluxo não aplica filtros lógicos nos resultados da consulta.

  • É recomendado adicionar uma condição (Condition) caso deseje restringir os resultados (ex: mudanças críticas, alterações fora do horário comercial etc.).

  • Ideal para auditorias e visibilidade rápida de alterações em aplicações registradas no Azure AD.









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