Monitoramento do Acesso Condicional
As políticas de acesso condicional são fundamentais para implementar Zero Trust, mas falhas na aplicação dessas políticas podem indicar:
- Configurações incorretas nas políticas
- Tentativas de evasão de controles de segurança
- Problemas técnicos na aplicação das políticas
- Necessidade de ajustes nos critérios para melhor usabilidade
Monitorar falhas no acesso condicional é crucial para manter o equilíbrio entre segurança e produtividade.
Consulta de Logs de Sign-in
Para identificar falhas recentes de políticas de acesso condicional:
# Conectar ao Microsoft Graph
Connect-MgGraph -Scopes "AuditLog.Read.All"
# Data de início da consulta (últimos 7 dias)
$startDate = (Get-Date).AddDays(-7).ToString("yyyy-MM-dd")
# Consultar logs de sign-in com falhas de acesso condicional
$filter = "createdDateTime ge $startDate and status/errorCode eq 53000"
$signInLogs = Get-MgAuditLogSignIn -Filter $filter -Top 100
# Analisar resultados
$conditionalAccessFailures = @()
foreach ($log in $signInLogs) {
foreach ($caResult in $log.ConditionalAccessStatus) {
if ($caResult -eq "failure") {
$failureInfo = [PSCustomObject]@{
UserPrincipalName = $log.UserPrincipalName
AppDisplayName = $log.AppDisplayName
ClientAppUsed = $log.ClientAppUsed
DeviceDetail = $log.DeviceDetail.DisplayName
IPAddress = $log.IPAddress
Location = $log.Location.City
PolicyIds = ($log.AppliedConditionalAccessPolicies | Where-Object { $_.Result -eq "failure" }).Id -join ", "
PolicyNames = ($log.AppliedConditionalAccessPolicies | Where-Object { $_.Result -eq "failure" }).DisplayName -join ", "
Timestamp = $log.CreatedDateTime
}
$conditionalAccessFailures += $failureInfo
}
}
}
# Exibir resultados
$conditionalAccessFailures | Format-Table UserPrincipalName, AppDisplayName, PolicyNames, Timestamp -AutoSize
Análise em Log Analytics
Para análise mais detalhada usando KQL em Log Analytics:
// Falhas de acesso condicional nos últimos 7 dias
SigninLogs
| where TimeGenerated > ago(7d)
| where ResultType == 53000
| extend CAStatus = tostring(ConditionalAccessStatus)
| where CAStatus == "failure"
| extend CAResults = todynamic(ConditionalAccessPolicies)
| mvexpand CAResults
| extend
CAResultDetail = tostring(CAResults.result),
CAPolicyName = tostring(CAResults.displayName),
CAPolicyId = tostring(CAResults.id)
| where CAResultDetail == "failure"
| project
TimeGenerated,
UserPrincipalName,
AppDisplayName,
ClientAppUsed,
DeviceDetail,
IPAddress,
Location,
CAPolicyName,
CAResultDetail
| order by TimeGenerated desc
Diagnóstico de Problemas Comuns
Para analisar os motivos mais comuns de falhas:
// Agregação por política e motivo da falha
SigninLogs
| where TimeGenerated > ago(7d)
| where ResultType == 53000
| extend CAResults = todynamic(ConditionalAccessPolicies)
| mvexpand CAResults
| extend
CAResultDetail = tostring(CAResults.result),
CAPolicyName = tostring(CAResults.displayName)
| where CAResultDetail == "failure"
| summarize Count = count() by CAPolicyName, AppDisplayName
| sort by Count desc
Remediação e Ajustes
Para ajustar políticas com problemas frequentes:
# Conectar ao Microsoft Graph com permissões adequadas
Connect-MgGraph -Scopes "Policy.Read.All", "Policy.ReadWrite.ConditionalAccess"
# ID da política a ser ajustada
$policyId = "00000000-0000-0000-0000-000000000000"
# Obter a política atual
$policy = Get-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId $policyId
# Exemplo: Adicionar exceção para uma aplicação específica
$policy.Conditions.Applications.ExcludeApplications += "app-id-to-exclude"
# Atualizar a política
Update-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId $policyId -BodyParameter $policy
Considerações para Revisão de Políticas
Ao revisar e ajustar políticas de acesso condicional, considere:
- Análise de Impacto: Quais utilizadores ou grupos são mais afetados pelas falhas?
- Padrões Temporais: As falhas ocorrem em horários específicos ou localizações?
- Aplicações Problemáticas: Quais aplicações apresentam mais falhas de conformidade?
- Dispositivos: Existem tipos específicos de dispositivos que falham consistentemente?
- MFA: Se a política exige MFA, os utilizadores têm métodos de autenticação registrados?
Melhores Práticas
- Implemente políticas em modo de relatório antes da aplicação efetiva
- Configure notificações para picos de falhas em políticas críticas
- Documente exceções e suas justificativas de negócio
- Revise periodicamente as exceções para verificar se ainda são necessárias
- Crie dashboards de monitoramento para visualizar tendências de falhas
- Forneça um canal claro para utilizadores relatarem problemas legítimos com políticas