AWS Certified Cloud Practitioner
Post 14 of 25
56%
Complete
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.
Recommended Prerequisites
For the best learning experience, we recommend reading these posts first:
🎯 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
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 = FAILCon CloudTrail:
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, prevenirAWS CloudTrail
¿Qué es? Servicio que registra TODAS las API calls en tu AWS account.
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 AWSEvent Types
1. Management Events
Control plane operations:
Ejemplos:
- CreateUser (IAM)
- RunInstances (EC2)
- CreateBucket (S3)
- CreateDBInstance (RDS)
Default: Logged automáticamente2. Data Events
Data plane operations (high volume):
Ejemplos:
- GetObject (S3)
- PutObject (S3)
- Invoke (Lambda)
Default: NO logged (demasiados events)
Habilitar: Manual, costo adicional3. Insights Events
Detección de actividad inusual:
Ejemplos:
- Spike en IAM actions
- Burst de EC2 launches
- Unusual API error rates
Machine learning detecta anomalíasCloudTrail Trail
¿Qué es? Configuración que define qué eventos loggear y dónde almacenarlos.
Trail components:
- Event types (Management, Data)
- Regions (Single o All)
- S3 bucket (storage)
- CloudWatch Logs (monitoring)
- SNS topic (notifications)Crear Trail:
# 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-trailEvent Example
{
"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
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 malicioso2. Compliance Auditing
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
Problema: "EC2 instance no arranca"
CloudTrail shows:
Event: RunInstances
Error: "InsufficientInstanceCapacity"
Time: 10:30 AM
Root cause: AWS capacity issue
Action: Launch en otra AZ4. Resource Lifecycle
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 deploymentAWS Config
¿Qué es? Servicio para track resource configuration changes y compliance.
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 rulesConfig Rules
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 complianceConfigurar Rule:
# 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
| Aspecto | CloudWatch | CloudTrail | Config |
|---|---|---|---|
| Propósito | Monitoring | Auditing | Compliance |
| Qué monitorea | Metrics (CPU, memory) | API calls | Resource config |
| Pregunta | ¿Está healthy? | ¿Quién hizo qué? | ¿Está compliant? |
| Use case | Performance | Security audit | Governance |
| Ejemplo | CPU > 80% | User deleted DB | S3 bucket público |
CloudTrail Best Practices
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 modificadoCompliance Standards
AWS ayuda a cumplir standards de compliance:
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 immutabilityAthena para Query CloudTrail
CloudTrail logs en S3 → Difficult to search
Solución: Amazon Athena
SQL queries sobre S3 logsSetup:
-- 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
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)
Respuesta: B) Management events (API calls)
Management events se loggean por default. Data events NO (demasiados, costo adicional).
🎓 Resumen
- CloudTrail: Auditing - registra API calls (quién hizo qué)
- Config: Compliance - track resource configurations
- Multi-region: Enable trails en todas las regiones
- Retention: S3 lifecycle policies para logs
- 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
Related Articles
AWS Cloud Practitioner #5: Shared Responsibility Model - ¿Quién es Responsable de Qué?
Comprende el modelo de responsabilidad compartida de AWS: qué gestiona AWS (security OF the cloud) vs. qué gestionas tú (security IN the cloud).
AWS Cloud Practitioner #23: AWS Organizations - Multi-Account Management
Aprende AWS Organizations: gestión de múltiples cuentas, OUs, SCPs, billing consolidado y governance.
AWS Cloud Practitioner #1: De Servidores Físicos a la Nube
Aprende qué es cloud computing y las diferencias entre IaaS, PaaS y SaaS con una metodología bottom-up que construye tu conocimiento paso a paso.
AWS Cloud Practitioner #2: Infraestructura Global AWS - Regions, AZs y Edge Locations
Descubre cómo AWS distribuye su infraestructura globalmente y aprende a elegir la región correcta para tus aplicaciones usando metodología bottom-up.