Avançado Cloud

Logging e auditoria na cloud — CloudTrail, Cloud Audit Logs, alertas de evento

Sem logging adequado, um ataque pode passar meses sem ser detectado. Auditoria na cloud não é opcional — é o mecanismo que diferencia uma detecção em horas de uma descoberta pós-dano. CloudTrail na AWS e Cloud Audit Logs no GCP registram cada ação de controle plano, e são a base para qualquer investigação forense.

AWS CloudTrail — o que registra e o que não registra

CloudTrail registra:
  - API calls de controle plano (quem criou, deletou, modificou recursos)
  - Console, CLI, SDK, serviços AWS
  - Ações de IAM, S3, EC2, Lambda, RDS, etc.

CloudTrail NÃO registra por padrão:
  - Data events (leitura/escrita de objetos S3, invocações Lambda)
  - Esses precisam ser habilitados explicitamente e geram custo adicional
# Criar uma trail multi-região com validação de integridade
aws cloudtrail create-trail \
  --name trilha-producao \
  --s3-bucket-name auditoria-logs-prod \
  --include-global-service-events \
  --is-multi-region-trail \
  --enable-log-file-validation

# Habilitar data events para S3
aws cloudtrail put-event-selectors \
  --trail-name trilha-producao \
  --event-selectors '[{
    "ReadWriteType": "All",
    "IncludeManagementEvents": true,
    "DataResources": [{
      "Type": "AWS::S3::Object",
      "Values": ["arn:aws:s3:::bucket-sensivel/"]
    }]
  }]'

Protegendo os logs de auditoria

Logs de CloudTrail precisam ser imutáveis. Um atacante que compromete uma conta vai tentar apagar evidências:

# Bucket de logs com Object Lock (imutabilidade via WORM)
aws s3api put-object-lock-configuration \
  --bucket auditoria-logs-prod \
  --object-lock-configuration '{
    "ObjectLockEnabled": "Enabled",
    "Rule": {
      "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 365 }
    }
  }'

# Log File Validation — detecta arquivos deletados ou corrompidos
aws cloudtrail validate-logs \
  --trail-arn arn:aws:cloudtrail:us-east-1:123456789:trail/trilha-producao \
  --start-time 2026-06-01T00:00:00Z

Alertas de evento com CloudWatch e EventBridge

Detecte ações críticas em tempo quase real:

# Métrica de filter — detecta uso de root account
aws logs put-metric-filter \
  --log-group-name CloudTrail/DefaultLogGroup \
  --filter-name RootAccountUsage \
  --filter-pattern '{ $.userIdentity.type = "Root" && $.userIdentity.invokedBy NOT EXISTS && $.eventType != "AwsServiceEvent" }' \
  --metric-transformations metricName=RootAccountUsage,metricNamespace=CloudTrailMetrics,metricValue=1

# Alarme no CloudWatch para a métrica acima
aws cloudwatch put-metric-alarm \
  --alarm-name RootAccountUsage \
  --metric-name RootAccountUsage \
  --namespace CloudTrailMetrics \
  --statistic Sum \
  --period 300 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --evaluation-periods 1 \
  --alarm-actions arn:aws:sns:us-east-1:123456789:alertas-seguranca

Eventos críticos que devem gerar alerta imediato:

- Uso de conta root
- Desativação do CloudTrail ou alteração de trail
- Mudanças em IAM (criação de usuário, attach de AdministratorAccess)
- Security group com ingress 0.0.0.0/0 criado
- Bucket S3 com Block Public Access desabilitado
- Criação de access key para usuário IAM
- Tentativas de login com MFA falhando repetidamente
- GuardDuty finding de alta severidade

GCP Cloud Audit Logs

No GCP, os logs de auditoria têm três categorias:

Admin Activity  → sempre ativo, gratuito — criação/exclusão de recursos
Data Access     → desativado por padrão, pago — leitura de dados
System Events   → ações automáticas da GCP — sempre ativo, gratuito
# Habilitar Data Access logs para Cloud Storage via gcloud
gcloud projects get-iam-policy meu-projeto --format=json > policy.json
# Editar policy.json: adicionar auditLogConfigs para storage.googleapis.com
gcloud projects set-iam-policy meu-projeto policy.json

# Criar alerta de log no GCP — exportar para Pub/Sub e processar
gcloud logging sinks create alertas-auditoria \
  pubsub.googleapis.com/projects/meu-projeto/topics/alertas-cloud \
  --log-filter='protoPayload.methodName="SetIamPolicy"'

Correlação e SIEM

Logs isolados não detectam ataques complexos. Envie para um SIEM:

AWS  → Kinesis Firehose → S3 → Athena ou SIEM (Splunk, Elastic)
GCP  → Log Sink → Pub/Sub → Dataflow → BigQuery ou SIEM
Azure → Diagnostic Settings → Event Hub → SIEM

Queries úteis (Athena sobre CloudTrail):
  SELECT userIdentity.arn, eventName, COUNT(*)
  FROM cloudtrail_logs
  WHERE errorCode IS NOT NULL
  GROUP BY 1, 2
  ORDER BY 3 DESC
  LIMIT 20;