AWS Certified Cloud Practitioner

Post 14 of 25

56%

Complete

Cloud Architecture7 min read

AWS Cloud Practitioner #14: CloudTrail - Auditoría y Compliance

Domina CloudTrail para auditing, AWS Config para compliance, y aprende a rastrear todas las acciones en tu cuenta AWS.

🎯 Lo que Aprenderás Hoy

  • Explicar AWS CloudTrail y su propósito
  • Configurar event logging y retention
  • Usar AWS Config para compliance
  • Comprender governance y auditing
  • Responder "quién hizo qué y cuándo"

El Problema Real

plaintext
Lunes 9:00 AM - Production database eliminada
 
CTO: "¿Quién eliminó la database?"
Tú: "No sé, no tenemos logs"
 
CTO: "¿Cuándo pasó?"
Tú: "No sé"
 
CTO: "¿Desde qué IP?"
Tú: "No sé"
 
Resultado:
❌ Imposible identificar culpable
❌ No sabemos si fue error o ataque
❌ No podemos prevenir recurrencia
❌ Compliance audit = FAIL

Con CloudTrail:

plaintext
9:05 AM - Query CloudTrail
 
Resultado:
✅ User: juan@empresa.com
✅ Action: rds:DeleteDBInstance
✅ Time: 2025-11-16 08:47:32 UTC
✅ IP: 203.0.113.50
✅ User Agent: AWS Console
✅ Request ID: abc-123-def
 
Acción: Contactar Juan, revisar proceso, prevenir

AWS CloudTrail

¿Qué es? Servicio que registra TODAS las API calls en tu AWS account.

plaintext
CloudTrail logs:
✅ Quién (User/Role)
✅ Qué (Action)
✅ Cuándo (Timestamp)
✅ Dónde (Source IP, Region)
✅ Cómo (Console, CLI, SDK)
✅ Resultado (Success/Failure)
 
Eventos capturados:
- IAM actions (create user, change password)
- EC2 actions (launch, terminate instance)
- S3 actions (create bucket, delete object)
- RDS actions (create/delete database)
- TODO en AWS

Event Types

1. Management Events

plaintext
Control plane operations:
 
Ejemplos:
- CreateUser (IAM)
- RunInstances (EC2)
- CreateBucket (S3)
- CreateDBInstance (RDS)
 
Default: Logged automáticamente

2. Data Events

plaintext
Data plane operations (high volume):
 
Ejemplos:
- GetObject (S3)
- PutObject (S3)
- Invoke (Lambda)
 
Default: NO logged (demasiados events)
Habilitar: Manual, costo adicional

3. Insights Events

plaintext
Detección de actividad inusual:
 
Ejemplos:
- Spike en IAM actions
- Burst de EC2 launches
- Unusual API error rates
 
Machine learning detecta anomalías

CloudTrail Trail

¿Qué es? Configuración que define qué eventos loggear y dónde almacenarlos.

plaintext
Trail components:
- Event types (Management, Data)
- Regions (Single o All)
- S3 bucket (storage)
- CloudWatch Logs (monitoring)
- SNS topic (notifications)

Crear Trail:

bash
# Create S3 bucket para logs
aws s3 mb s3://mi-empresa-cloudtrail-logs
 
# Create trail
aws cloudtrail create-trail \
  --name company-trail \
  --s3-bucket-name mi-empresa-cloudtrail-logs \
  --is-multi-region-trail \
  --enable-log-file-validation
 
# Start logging
aws cloudtrail start-logging \
  --name company-trail
 
# Verify
aws cloudtrail get-trail-status \
  --name company-trail

Event Example

json
{
  "eventVersion": "1.08",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAI23HXH2EXAMPLE",
    "arn": "arn:aws:iam::123456789012:user/juan",
    "userName": "juan",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2025-11-16T08:45:12Z"
      }
    }
  },
  "eventTime": "2025-11-16T08:47:32Z",
  "eventSource": "rds.amazonaws.com",
  "eventName": "DeleteDBInstance",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "203.0.113.50",
  "userAgent": "console.amazonaws.com",
  "requestParameters": {
    "dBInstanceIdentifier": "production-db",
    "skipFinalSnapshot": true
  },
  "responseElements": {
    "dBInstanceStatus": "deleting"
  },
  "requestID": "abc-123-def-456",
  "eventID": "xyz-789-ghi-012",
  "readOnly": false,
  "eventType": "AwsApiCall",
  "recipientAccountId": "123456789012"
}

Use Cases

1. Security Analysis

plaintext
Pregunta: "¿Alguien modificó Security Groups?"
 
Query CloudTrail:
Event: AuthorizeSecurityGroupIngress
Filter: Last 24 hours
 
Resultado:
User: admin@empresa.com
Action: Added rule 0.0.0.0/0:22
Time: 2025-11-16 14:30:00
 
⚠️ Alerta: SSH abierto a internet
→ Investiga: ¿Intencional? ¿Legítimo?
→ Acción: Revierte si malicioso

2. Compliance Auditing

plaintext
Audit requirement:
"Mostrar quién accedió customer data en último mes"
 
CloudTrail query:
- Events: S3:GetObject
- Resource: s3://customer-data/*
- Time: Last 30 days
 
Export to report:
- Lista de users
- Access timestamps
- Cumple compliance ✅

3. Troubleshooting

plaintext
Problema: "EC2 instance no arranca"
 
CloudTrail shows:
Event: RunInstances
Error: "InsufficientInstanceCapacity"
Time: 10:30 AM
 
Root cause: AWS capacity issue
Action: Launch en otra AZ

4. Resource Lifecycle

plaintext
Pregunta: "¿Cuándo se creó este S3 bucket?"
 
CloudTrail:
Event: CreateBucket
Bucket: mi-bucket
User: terraform-role
Time: 2025-01-15 09:00:00
 
Contexto: Terraform deployment

AWS Config

¿Qué es? Servicio para track resource configuration changes y compliance.

plaintext
CloudTrail vs. Config:
 
CloudTrail:
- QUIÉN hizo QUÉ y CUÁNDO
- API call history
- "Juan deleted DB at 8:47 AM"
 
Config:
- CÓMO está configurado
- Resource configuration history
- "DB had Multi-AZ disabled"
- Compliance rules

Config Rules

plaintext
Reglas predefinidas o custom:
 
Ejemplos:
1. s3-bucket-public-read-prohibited
   → Alert si S3 bucket es público
 
2. ec2-instance-no-public-ip
   → Alert si EC2 tiene Public IP en prod
 
3. rds-multi-az-enabled
   → Alert si RDS NO tiene Multi-AZ
 
4. required-tags
   → Alert si resource NO tiene tags requeridos
 
Custom:
Lambda function que evalúa compliance

Configurar Rule:

bash
# Enable AWS Config
aws configservice put-configuration-recorder \
  --configuration-recorder name=default,roleARN=arn:aws:iam::123456789012:role/ConfigRole
 
# Start recording
aws configservice start-configuration-recorder \
  --configuration-recorder-name default
 
# Add rule: S3 bucket encryption
aws configservice put-config-rule \
  --config-rule '{
    "ConfigRuleName": "s3-bucket-encryption-enabled",
    "Source": {
      "Owner": "AWS",
      "SourceIdentifier": "S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED"
    }
  }'
 
# Query compliance
aws configservice describe-compliance-by-config-rule
 
# Output:
# Compliant: 15 buckets
# Non-Compliant: 3 buckets (sin encryption)

CloudWatch vs. CloudTrail vs. Config

AspectoCloudWatchCloudTrailConfig
PropósitoMonitoringAuditingCompliance
Qué monitoreaMetrics (CPU, memory)API callsResource config
Pregunta¿Está healthy?¿Quién hizo qué?¿Está compliant?
Use casePerformanceSecurity auditGovernance
EjemploCPU > 80%User deleted DBS3 bucket público

CloudTrail Best Practices

plaintext
1. Enable in ALL regions:
   ✅ Multi-region trail
   ✅ Captura events en todas las regiones
   ❌ NO solo region actual
 
2. Enable log file validation:
   ✅ Detecta si logs fueron modificados
   ✅ Cryptographic hash
   ✅ Integridad garantizada
 
3. Encrypt logs:
   ✅ S3 bucket encryption (SSE-KMS)
   ✅ Logs sensibles protegidos
 
4. Lifecycle logs:
   ✅ S3: Standard (30 días)
   ✅ S3 IA (31-90 días)
   ✅ Glacier (91-365 días)
   ✅ Delete (>365 días si compliance permite)
 
5. Send to CloudWatch Logs:
   ✅ Real-time monitoring
   ✅ Metric filters
   ✅ Alarms
 
6. Restrict access:
   ✅ S3 bucket policy: Solo CloudTrail puede write
   ✅ IAM: Solo security team puede read
   ✅ MFA delete para bucket
 
7. Notifications:
   ✅ SNS topic para critical events
   ✅ Alert si root account usado
   ✅ Alert si security group modificado

Compliance Standards

AWS ayuda a cumplir standards de compliance:

plaintext
PCI-DSS (Payment Card):
- CloudTrail: Audit accesos
- Config: Verify encryption enabled
- Guardar logs 1 año mínimo
 
HIPAA (Healthcare):
- CloudTrail: Track PHI access
- Config: Verify encryption
- Guardar logs según retention policy
 
GDPR (EU Privacy):
- CloudTrail: Data access audit
- Config: Data residency compliance
- Right to be forgotten (delete logs si requested)
 
SOC 2:
- CloudTrail: Audit trail completo
- Config: Security controls
- Logs immutability

Athena para Query CloudTrail

plaintext
CloudTrail logs en S3 → Difficult to search
 
Solución: Amazon Athena
SQL queries sobre S3 logs

Setup:

sql
-- Create table en Athena
CREATE EXTERNAL TABLE cloudtrail_logs (
  eventVersion STRING,
  userIdentity STRUCT<
    type: STRING,
    principalId: STRING,
    arn: STRING,
    userName: STRING
  >,
  eventTime STRING,
  eventName STRING,
  awsRegion STRING,
  sourceIPAddress STRING,
  userAgent STRING,
  requestParameters STRING,
  responseElements STRING
)
PARTITIONED BY (
  region STRING,
  year STRING,
  month STRING,
  day STRING
)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://mi-empresa-cloudtrail-logs/';
 
-- Query: ¿Quién lanzó EC2 instances hoy?
SELECT
  userIdentity.userName,
  eventTime,
  requestParameters
FROM cloudtrail_logs
WHERE eventName = 'RunInstances'
  AND year = '2025'
  AND month = '11'
  AND day = '16'
ORDER BY eventTime DESC;
 
-- Query: Acciones desde IP sospechosa
SELECT
  eventName,
  eventTime,
  userIdentity.userName
FROM cloudtrail_logs
WHERE sourceIPAddress = '198.51.100.50'
ORDER BY eventTime DESC;

📝 Preparación para el Examen

Puntos Clave

CloudTrail:

  • 📌 Logs API calls: Quién, qué, cuándo, dónde
  • 📌 Management events: Default (create, delete resources)
  • 📌 Data events: High volume (S3 GetObject), optional
  • 📌 Multi-region: Enable para todas las regiones
  • 📌 Log validation: Detecta tampering

Config:

  • 📌 Resource configuration: Tracking + compliance
  • 📌 Config Rules: Automated compliance checks
  • 📌 Remediation: Auto-fix non-compliant resources

Diferencias:

  • 📌 CloudTrail = WHO did WHAT
  • 📌 Config = HOW resources configured
  • 📌 CloudWatch = Performance metrics

Best Practices:

  • 📌 Enable CloudTrail en todas las accounts
  • 📌 Multi-region trail
  • 📌 Log file validation
  • 📌 Encrypt logs (KMS)
  • 📌 Lifecycle policies para retention

Preguntas de Práctica

Pregunta 1:

Una empresa necesita auditar todos los cambios a Security Groups. ¿Qué servicio usan?

A) CloudWatch B) CloudTrail C) VPC Flow Logs D) AWS Config

Success

Respuesta: B) CloudTrail

CloudTrail logs API calls, incluyendo modificaciones a Security Groups (AuthorizeSecurityGroupIngress, etc.).

D también es correcta para tracking configuration, pero CloudTrail es más específico para auditing API calls.

Pregunta 2:

¿Qué registra CloudTrail por default?

A) Data events (S3 GetObject) B) Management events (API calls) C) Ambos automáticamente D) Ninguno (debe habilitarse)

Success

Respuesta: B) Management events (API calls)

Management events se loggean por default. Data events NO (demasiados, costo adicional).


🎓 Resumen

  1. CloudTrail: Auditing - registra API calls (quién hizo qué)
  2. Config: Compliance - track resource configurations
  3. Multi-region: Enable trails en todas las regiones
  4. Retention: S3 lifecycle policies para logs
  5. Athena: Query logs con SQL

⏭️ Próximo Post

Post #15: AWS Pricing Models - On-Demand, Reserved, Savings Plans.


Tags: #AWS #CloudPractitioner #CloudTrail #Config #Auditing #Compliance #Governance #Certification

Written by Jhonny Lorenzo

Researcher at TrautsLab

Related Articles

Recent Articles

Comments