1. Começar pela pergunta de investigação
Uma equipa de suporte recebe a suspeita de leitura indevida de ficheiros de reconciliação. A primeira pergunta é quais objetos foram lidos, por quem e em que período. O histórico CloudTrail padrão cobre eventos de gestão por Região durante 90 dias; não substitui a recolha dos data events necessários para GetObject. Uma pesquisa vazia numa fonte inadequada não fecha a investigação. Constrói uma matriz com categoria de evento, conta, Região, recurso, período e destino de retenção. Para uma chamada regional conhecida, começa por confirmar a Região consultada. Para acessos a objetos, confirma se a recolha existia no período relevante e que filtros estavam ativos. Regista lacunas com linguagem explícita, sem converter configuração atual em cobertura histórica.
2. Alterar selectors sem reduzir cobertura
Uma mudança para advanced selectors pode resolver a recolha de leituras sensíveis e perder eventos de gestão se esquecer a cobertura anterior. Os dois modos de selectors não ficam acumulados no mesmo trail. Guarda a configuração aprovada antes da mudança e expressa toda a intenção no conjunto novo. Ao nível dos selectors, corresponder a um deles basta para o evento ser selecionado; dentro de cada selector é necessário interpretar os campos e operadores concretos. Um filtro readOnly=false exclui leituras, mesmo que os recursos estejam corretos. No ensaio, produz uma leitura autorizada e uma alteração de gestão autorizada, confirma os registos no destino e mede o atraso. A aceitação precisa de verificar o comportamento, além do sucesso da API de configuração.
3. Correlacionar sem duplicar nem apagar perspetivas
Uma linha temporal precisa de distinguir eventTime e chegada ao SIEM. Entrega tardia não muda o momento indicado para a ação. Mantém tempos em UTC, identificadores e referências aos registos originais. Para a mesma cópia ingerida duas vezes, eventID permite identificar o evento individual. Porém, uma ação entre contas pode produzir eventos distintos com sharedEventID comum e recipientAccountId diferentes. Relaciona essas perspetivas sem as eliminar como se fossem bytes duplicados. O modelo Python abaixo usa dados fictícios para mostrar uma cópia repetida e duas perspetivas da mesma ação. Prevê três eventos únicos e duas perspetivas relacionadas. O exercício não valida um trail, assinaturas, campos opcionais ou todo o esquema CloudTrail; ensina apenas as chaves usadas na correlação.
4. Findings, sensores e ensaios
GuardDuty pode atualizar um finding existente quando observa atividade relacionada. Contar apenas IDs novos pode esconder um problema que continua; acompanha contagem, última observação e recursos. Um finding sintético recebido num ticket demonstra o percurso testado de integração, mas não exercita todos os sensores da frota. Para Runtime Monitoring, verifica cobertura por recurso e investiga estado Unhealthy, incluindo agente e endpoint VPC. A ativação global não demonstra entrega de eventos em cada instância. Confirma também suporte ao recurso: ECS Fargate e EKS Fargate não têm a mesma cobertura deste plano. Ao apresentar resultados, distingue integração testada, sensor operacional e ameaça investigada. São evidências complementares, com responsáveis e critérios de aceitação diferentes.
5. Supressão e estado de configuração
Reduzir ruído exige compreender o que deixa de ser visto. Findings suprimidos são arquivados e não seguem para integrações documentadas como EventBridge; também deixam de participar como sinais de attack sequences. Limita exceções a comportamentos conhecidos, com justificação e revisão. Para alterações de configuração, Daily no AWS Config representa o estado mais recente do período e pode não mostrar transições intermédias. Um agregador central oferece leitura dos dados das origens, sem conceder implantação de regras nessas contas. Define separadamente recolha, agregação, deteção e correção. Uma reunião operacional deve conseguir distinguir uma mudança realmente corrigida, um evento apenas filtrado e uma lacuna de gravação, porque cada situação pede uma ação e um owner diferentes.
6. Ler resultados de consultas com os seus limites
Advanced query do Config consulta estado atual, não é uma pesquisa histórica universal. Recursos eliminados e CIs ResourceNotRecorded não são devolvidos por esse mecanismo. Se o objetivo é investigar uma instância já eliminada, escolhe histórico e fontes que suportem essa pergunta. Há também um risco de interpretação em arrays: uma condição sobre o nome da regra e outra sobre compliance podem corresponder a elementos diferentes. Antes de afirmar que a regra A falhou, inspeciona o par nome/estado no mesmo elemento. No handover, entrega exemplos de consulta com pressupostos, cobertura e limitações, além de uma lista de comandos. O destinatário precisa de saber quando uma consulta vazia significa filtro errado, dado não gravado ou ausência efetivamente observada no âmbito válido.
# Original local correlation exercise, not a CloudTrail parser or verifier.
# No credentials, network calls, or AWS changes.
rows = [
{"eventID": "a", "eventTime": "2026-10-05T09:00:00Z", "recipientAccountId": "caller", "sharedEventID": "action-1"},
{"eventID": "b", "eventTime": "2026-10-05T09:00:00Z", "recipientAccountId": "owner", "sharedEventID": "action-1"},
{"eventID": "c", "eventTime": "2026-10-05T08:59:00Z", "recipientAccountId": "caller"},
]
rows.append(dict(rows[0]))
unique = {row["eventID"]: row for row in rows}
ordered = sorted(unique.values(), key=lambda row: (row["eventTime"], row["eventID"]))
perspectives = [row for row in unique.values() if row.get("sharedEventID") == "action-1"]
assert len(unique) == 3
assert [row["eventID"] for row in ordered] == ["c", "a", "b"]
assert {row["recipientAccountId"] for row in perspectives} == {"caller", "owner"}
print("unique=3 related_perspectives=2 order=c,a,b")
Uma leitura sensível falta no SIEM porque o selector só inclui escrita. O incidente de telemetria exige corrigir o filtro e declarar a janela sem cobertura.
Armadilhas comuns
Consulta vazia como ausência; API aceite como cobertura; sample como sensor; supressão como remediação; estado atual como histórico.
Tópicos relacionados: Deteção e evidência de segurança · Federação e contexto de sessão
Uma conclusão de segurança deve explicitar fonte, âmbito, período e limites da observação.
Referência: CloudTrail event history · SCS-C03