Última revisión: mayo de 2026
Crea los servicios de AWS del examen SCS-C03 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al finalizar este laboratorio, habrá aprovisionado, con Terraform simple, los cuatro primitivos de seguridad que toda cuenta de AWS debería tener desde el primer día: una clave KMS administrada por el cliente con rotación automática, un IAM Access Analyzer que escanea en busca de acceso público o entre cuentas no intencionado, GuardDuty activado con fuentes de inteligencia de amenazas y un bucket centralizado de registros de auditoría al que escriben otras cargas de trabajo. Esta es la base segura por defecto de SCS-C03.
Cada recurso es Terraform simple; el mismo código funciona sin modificaciones en OpenTofu. Sin variables, sin módulos. Simplemente copie los fragmentos en un único main.tf, ejecute terraform init y luego terraform apply paso a paso.
>= 1.5 u OpenTofu >= 1.6.us-east-1.Tres de los cuatro servicios aquí son gratuitos para cuentas nuevas; uno tiene un costo real:
Si mantiene esta base en funcionamiento en una cuenta real, espere pagar aproximadamente $5–15/mes en total. Barato para la visibilidad que le proporciona. Destruya después del laboratorio si prefiere no hacerlo.
Inicio estándar. SCS-C03 es agnóstico al proveedor y a la región en su alcance, pero una línea base segura debe aplicarse por región — GuardDuty y Access Analyzer son servicios regionales. La mayoría de los equipos eligen una región principal (p. ej., us-east-1) para la línea base y la replican a través de Terraform por región a medida que la cuenta se expande.
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-scs-c03"
ManagedBy = "terraform"
}
}
}
data "aws_caller_identity" "current" {}SCS-C03 evalúa la diferencia entre las claves KMS administradas por AWS (gratuitas, rotación automática, sin política de clave que usted controle) y las claves administradas por el cliente ($1/mes, usted es propietario de la política, usted controla la rotación, usted obtiene visibilidad de auditoría de cada llamada Encrypt/Decrypt a través de CloudTrail). La producción siempre debe optar por las administradas por el cliente.
Habilitamos la rotación anual (enable_key_rotation = true) y escribimos una política de clave que otorga al usuario root de la cuenta la capacidad de administrar la clave (el valor predeterminado de AWS para cualquier clave administrada por el cliente) y concede explícitamente al servicio IAM Access Analyzer permiso para evaluar la política de la clave. El alias hace que la clave sea referenciable por un nombre legible para humanos en el código posterior en lugar de por UUID — SCS-C03 evalúa esta convención de nombres como un requisito previo de auditoría de CloudTrail.
resource "aws_kms_key" "app_data" {
description = "Customer-managed key for application data encryption."
enable_key_rotation = true
deletion_window_in_days = 30
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Sid = "EnableRootAccountAdmin"
Effect = "Allow"
Principal = { AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root" }
Action = "kms:*"
Resource = "*"
},
{
Sid = "AllowAccessAnalyzerToDescribe"
Effect = "Allow"
Principal = { Service = "access-analyzer.amazonaws.com" }
Action = ["kms:DescribeKey", "kms:GetKeyPolicy"]
Resource = "*"
},
]
})
}
resource "aws_kms_alias" "app_data" {
name = "alias/certlabpro-scs-c03-app-data"
target_key_id = aws_kms_key.app_data.id
}Access Analyzer evalúa continuamente las políticas basadas en recursos (políticas de bucket S3, políticas de clave KMS, políticas de confianza de roles IAM, permisos de Lambda, políticas de cola SQS, políticas de rotación de Secrets Manager y más) y muestra un hallazgo cada vez que detecta un recurso accesible desde fuera de su cuenta o límite de confianza. El dominio de Detección de Amenazas y Respuesta a Incidentes de SCS-C03 evalúa este patrón exacto: los hallazgos de Access Analyzer son la señal canónica para “este bucket ahora es público”.
type = "ACCOUNT" limita el analizador a su cuenta; type = "ORGANIZATION" requiere AWS Organizations y lo limita a toda la organización (la respuesta de múltiples cuentas de SCS-C03). De cualquier manera, siempre es gratuito y no requiere configuración una vez habilitado.
resource "aws_accessanalyzer_analyzer" "main" {
analyzer_name = "certlabpro-scs-c03"
type = "ACCOUNT"
}GuardDuty es el servicio de detección de amenazas administrado por AWS. Analiza continuamente los registros de CloudTrail, los registros de flujo de VPC y los registros de DNS contra las fuentes de inteligencia de amenazas de AWS — listas publicadas de IPs conocidas como maliciosas, dominios de cripto-minería, infraestructura de comando y control, y patrones de comportamiento de cuenta sospechosos. Los hallazgos se etiquetan con severidad (Baja / Media / Alta) y un tipo analizable por máquina como Recon:EC2/PortProbeUnprotectedPort.
Habilitamos el detector con una frecuencia de publicación de 15 minutos (más rápida que la predeterminada de 6 horas; las preguntas de SCS-C03 sobre MTTR casi siempre asumen publicaciones frecuentes). Los complementos de protección basados en IAM (MALWARE_PROTECTION_FOR_EC2, S3_DATA_EVENTS, etc.) tienen un costo adicional y están fuera del alcance de esta línea base; actívelos por carga de trabajo en producción.
Los hallazgos se publican en EventBridge automáticamente — así es como se conecta la automatización descendente (notificaciones de Slack, correlación de Security Hub, Lambdas de remediación automática). SCS-C03 evalúa repetidamente esta cadena de hallazgos → EventBridge → respuesta. No configuramos el flujo descendente aquí, pero en el momento en que finaliza el Paso 4, GuardDuty comienza a publicar.
resource "aws_guardduty_detector" "main" {
enable = true
finding_publishing_frequency = "FIFTEEN_MINUTES"
}Cada pregunta de Registro y Monitoreo de Seguridad de SCS-C03 espera que tenga un bucket centralizado, cifrado y de tipo 'solo escritura' al que otras herramientas de seguridad — CloudTrail, registros de flujo de VPC, registros de acceso de ELB, exportaciones de GuardDuty, grabadores de Config — escriban. El bucket está cifrado con la clave KMS administrada por el cliente del Paso 2, el acceso público está completamente bloqueado y una política de bucket impone que cualquier objeto escrito debe pasar por la clave del Paso 2 (no se aceptan escrituras en texto sin cifrar).
Utilizamos la configuración de propiedad bucket-owner-enforced (el modo con ACLs deshabilitadas, recomendado por AWS desde 2023) — este es uno de los atributos de endurecimiento de S3 más probados en SCS-C03 porque elimina una clase completa de configuraciones incorrectas de ACL entre cuentas.
Con el bucket en su lugar, la línea base está completa: KMS para claves de cifrado, Access Analyzer para exposición no intencionada, GuardDuty para detección de amenazas y un bucket de auditoría para todo lo que necesita ser retenido para revisión de cumplimiento. Cada escenario de múltiples servicios de SCS-C03 espera que tenga estos cuatro; las preguntas más avanzadas añaden Security Hub, Config, Inspector o Macie además de esta base.
resource "aws_s3_bucket" "audit_logs" {
bucket_prefix = "certlabpro-scs-c03-audit-"
}
resource "aws_s3_bucket_public_access_block" "audit_logs" {
bucket = aws_s3_bucket.audit_logs.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_ownership_controls" "audit_logs" {
bucket = aws_s3_bucket.audit_logs.id
rule {
object_ownership = "BucketOwnerEnforced"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "audit_logs" {
bucket = aws_s3_bucket.audit_logs.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = aws_kms_key.app_data.arn
}
bucket_key_enabled = true # cuts KMS request costs ~99% on bulk writes
}
}
resource "aws_s3_bucket_versioning" "audit_logs" {
bucket = aws_s3_bucket.audit_logs.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_policy" "audit_logs_require_kms" {
bucket = aws_s3_bucket.audit_logs.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Sid = "DenyUnencryptedWrites"
Effect = "Deny"
Principal = "*"
Action = "s3:PutObject"
Resource = "${aws_s3_bucket.audit_logs.arn}/*"
Condition = {
StringNotEquals = {
"s3:x-amz-server-side-encryption" = "aws:kms"
}
}
}]
})
}terraform destroy elimina todo en este laboratorio. Dos notas:
deletion_window_in_days = 30, lo que significa que destroy la programa para eliminación en 30 días — no se elimina inmediatamente (este es el patrón de seguridad prescrito por SCS-C03; la eliminación de KMS es irreversible). Durante los 30 días, puede cancelar la eliminación a través de la consola. Para eliminarla realmente, también debe esperar a que pase el período. AWS sigue cobrando $1/mes durante este período.force_destroy = false — si ha recopilado registros en él, vacíelo antes de destruirlo (aws s3 rm s3://<bucket> --recursive).SCS-C03 cubre más terreno del que un solo laboratorio puede abarcar — AWS Config (evaluación continua de cumplimiento), Security Hub (agregación centralizada de hallazgos), Macie (descubrimiento de PII en S3), Inspector (escaneo de vulnerabilidades de EC2/Lambda), Detective (investigación de amenazas), WAF + Shield (protección de borde), Network Firewall, Network Access Analyzer, Cognito (identidad de usuario), Secrets Manager + Systems Manager Parameter Store, ACM (TLS), Firewall Manager (aplicación de políticas multi-cuenta) y todo el espacio de claves de hardware de CloudHSM.
Nos ceñimos a los cuatro primitivos mencionados anteriormente porque son la base fundamental sobre la que se construye todo lo demás. Las reglas de Config escriben hallazgos en Security Hub, que los correlaciona con los hallazgos de GuardDuty, los cuales apuntan a recursos protegidos por claves KMS, con problemas de políticas detectados por Access Analyzer — y todo ello aterriza en el bucket de auditoría para su revisión de cumplimiento. Primero construya los cimientos; luego añada el resto según lo exija el perfil de riesgo de la carga de trabajo.
Para una cobertura servicio por servicio, consulte las secciones Buscar, Manual y Editorial de esta página de certificación. Un laboratorio de seguimiento que añada Security Hub + Config + la cadena de remediación automática de GuardDuty a EventBridge sería un paso natural a seguir.