Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der SCS-C03-Prüfung mit reinem Terraform — ein Block nach dem anderen, jeweils abgestimmt auf eine Prüfungsdomäne. Derselbe Code funktioniert auch mit OpenTofu.
Am Ende dieses Labs haben Sie mit einfachem Terraform die vier Sicherheitsgrundlagen bereitgestellt, die jedes AWS-Konto vom ersten Tag an haben sollte – einen kundenverwalteten KMS-Schlüssel mit automatischer Rotation, einen IAM Access Analyzer, der nach unbeabsichtigtem kontenübergreifendem oder öffentlichem Zugriff scannt, GuardDuty, das mit Bedrohungsdatenfeeds aktiviert ist, und einen zentralisierten Audit-Log-Bucket, in den andere Workloads schreiben. Dies ist die SCS-C03 secure-by-default-Grundlage.
Jede Ressource ist einfaches Terraform – derselbe Code funktioniert ohne Änderungen mit OpenTofu. Keine Variablen, keine Module. Fügen Sie die Snippets in eine einzige main.tf ein, führen Sie terraform init aus und dann terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.us-east-1.Drei der vier hier genannten Dienste sind für neue Konten kostenlos; einer hat eine tatsächliche Rechnung:
Wenn Sie diese Grundlage in einem realen Konto weiter betreiben, rechnen Sie mit Gesamtkosten von etwa 5–15 $/Monat. Günstig für die Transparenz, die es Ihnen bietet. Zerstören Sie es nach dem Lab, wenn Sie es nicht möchten.
Standard-Eröffnung. SCS-C03 ist anbieter- und regionenunabhängig im Umfang, aber eine sichere Grundlage muss pro Region angewendet werden – GuardDuty und Access Analyzer sind regionale Dienste. Die meisten Teams wählen eine primäre Region (z.B. us-east-1) für die Grundlage und replizieren diese über Terraform pro Region, wenn das Konto wächst.
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 testet den Unterschied zwischen AWS-verwalteten KMS-Schlüsseln (kostenlos, automatische Rotation, keine Schlüsselrichtlinie, die Sie kontrollieren) und kundenverwalteten Schlüsseln (1 $/Monat, Sie besitzen die Richtlinie, Sie kontrollieren die Rotation, Sie erhalten Audit-Transparenz bei jedem Encrypt/Decrypt-Aufruf über CloudTrail). In der Produktion sollte immer auf kundenverwaltete Schlüssel zurückgegriffen werden.
Wir aktivieren die jährliche Rotation (enable_key_rotation = true) und schreiben eine Schlüsselrichtlinie, die dem Kontostamm die Möglichkeit gibt, den Schlüssel zu verwalten (die AWS-Standardeinstellung für jeden kundenverwalteten Schlüssel) und explizit dem IAM Access Analyzer-Dienst die Berechtigung erteilt, die Schlüsselrichtlinie zu bewerten. Der Alias ermöglicht es, den Schlüssel in nachfolgendem Code unter einem menschenlesbaren Namen anstatt einer UUID zu referenzieren – SCS-C03 testet diese Namenskonvention als CloudTrail-Audit-Voraussetzung.
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 bewertet kontinuierlich ressourcenbasierte Richtlinien (S3-Bucket-Richtlinien, KMS-Schlüsselrichtlinien, IAM-Rollen-Vertrauensrichtlinien, Lambda-Berechtigungen, SQS-Warteschlangenrichtlinien, Secrets Manager-Rotationsrichtlinien und mehr) und meldet einen Befund, sobald eine Ressource erkannt wird, die von außerhalb Ihres Kontos oder Ihrer Vertrauensgrenze zugänglich ist. Das SCS-C03-Thema Bedrohungserkennung und Vorfallreaktion testet genau dieses Muster – Access Analyzer-Befunde sind das kanonische Signal für „dieser Bucket ist jetzt öffentlich“.
type = "ACCOUNT" begrenzt den Analyzer auf Ihr Konto; type = "ORGANIZATION" erfordert AWS Organizations und erstreckt sich über die gesamte Organisation (die SCS-C03 Multi-Konto-Antwort). In jedem Fall ist es nach der Aktivierung immer kostenlos und ohne Konfiguration.
resource "aws_accessanalyzer_analyzer" "main" {
analyzer_name = "certlabpro-scs-c03"
type = "ACCOUNT"
}GuardDuty ist der verwaltete Bedrohungserkennungsdienst von AWS. Er analysiert kontinuierlich CloudTrail-, VPC Flow Logs- und DNS-Protokolle anhand der Bedrohungsdatenfeeds von AWS – veröffentlichte Listen bekanntermaßen schlechter IPs, Krypto-Mining-Domains, Command-and-Control-Infrastrukturen und verdächtiger Kontoverhaltensmuster. Befunde werden mit Schweregrad (Niedrig / Mittel / Hoch) und einem maschinenlesbaren Typ wie Recon:EC2/PortProbeUnprotectedPort versehen.
Wir aktivieren den Detektor mit einer Veröffentlichungsfrequenz von 15 Minuten (schneller als der 6-Stunden-Standard; SCS-C03-Fragen zu MTTR gehen fast immer von häufiger Veröffentlichung aus). Die IAM-basierten Schutz-Plugins (MALWARE_PROTECTION_FOR_EC2, S3_DATA_EVENTS usw.) kosten extra und sind für diese Baseline nicht relevant; aktivieren Sie sie pro Workload in der Produktion.
Befunde werden automatisch in EventBridge veröffentlicht – so wird die nachgelagerte Automatisierung (Slack-Benachrichtigungen, Security Hub-Korrelation, automatische Remediation-Lambdas) integriert. SCS-C03 testet diese Kette von Befunde → EventBridge → Reaktion wiederholt. Wir verbinden die nachgelagerte Kette hier nicht, aber sobald Schritt 4 abgeschlossen ist, beginnt GuardDuty mit der Veröffentlichung.
resource "aws_guardduty_detector" "main" {
enable = true
finding_publishing_frequency = "FIFTEEN_MINUTES"
}Jede SCS-C03-Frage zum Thema Sicherheitsprotokollierung und -überwachung erwartet, dass Sie einen zentralisierten, verschlüsselten, nur einmal beschreibbaren Bucket haben, in den andere Sicherheitstools – CloudTrail, VPC Flow Logs, ELB-Zugriffsprotokolle, GuardDuty-Exporte, Config-Rekorder – schreiben. Der Bucket ist mit dem kundenverwalteten KMS-Schlüssel aus Schritt 2 verschlüsselt, der öffentliche Zugriff ist vollständig blockiert, und eine Bucket-Richtlinie erzwingt, dass jedes geschriebene Objekt durch den Schlüssel aus Schritt 2 erfolgen muss (unverschlüsselte Schreibvorgänge werden nicht akzeptiert).
Wir verwenden die Einstellung bucket-owner-enforced für die Eigentumsrechte (der ACLs-deaktivierte Modus, seit 2023 von AWS empfohlen) – dies ist eines der am häufigsten getesteten S3-Härtungsattribute auf SCS-C03, da es eine ganze Klasse von kontenübergreifenden ACL-Fehlkonfigurationen eliminiert.
Mit dem eingerichteten Bucket ist die Grundlage vollständig: KMS für Verschlüsselungsschlüssel, Access Analyzer für unbeabsichtigte Exposition, GuardDuty für die Bedrohungserkennung und ein Audit-Bucket für alles, was zur Compliance-Überprüfung aufbewahrt werden muss. Jedes SCS-C03-Multiservice-Szenario erwartet, dass Sie diese vier haben; die fortgeschritteneren Fragen fügen Security Hub, Config, Inspector oder Macie zu dieser Basis hinzu.
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 entfernt alles in diesem Lab. Zwei Hinweise:
deletion_window_in_days = 30, was bedeutet, dass destroy ihn für die Löschung in 30 Tagen plant – er wird nicht sofort entfernt (dies ist das von SCS-C03 vorgeschriebene Sicherheitsschema; die KMS-Löschung ist irreversibel). Während der 30 Tage können Sie die Löschung über die Konsole abbrechen. Um den Schlüssel tatsächlich zu löschen, müssen Sie auch die Wartezeit abwarten. AWS berechnet in dieser Zeit weiterhin 1 $/Monat.force_destroy = false – wenn Sie Protokolle darin gesammelt haben, leeren Sie ihn vor der Zerstörung (aws s3 rm s3://<bucket> --recursive).SCS-C03 deckt mehr Bereiche ab, als ein einzelnes Lab umfassen kann – AWS Config (kontinuierliche Compliance-Bewertung), Security Hub (zentralisierte Aggregation von Befunden), Macie (S3 PII-Erkennung), Inspector (EC2/Lambda-Schwachstellenscans), Detective (Bedrohungsuntersuchung), WAF + Shield (Edge-Schutz), Network Firewall, Network Access Analyzer, Cognito (Benutzeridentität), Secrets Manager + Systems Manager Parameter Store, ACM (TLS), Firewall Manager (Multi-Account-Richtliniendurchsetzung) und der gesamte CloudHSM-Hardware-Key-Bereich.
Wir konzentrieren uns auf die oben genannten vier Grundlagen, da sie die Basis vom ersten Tag an bilden, auf der alles andere aufbaut. Config-Regeln schreiben Befunde in Security Hub, das sie mit GuardDuty-Befunden korreliert, die auf durch KMS-Schlüssel geschützte Ressourcen verweisen, wobei Richtlinienprobleme von Access Analyzer erkannt werden – und all dies landet im Audit-Bucket zur Compliance-Überprüfung. Bauen Sie zuerst das Fundament; ergänzen Sie den Rest, je nachdem, welches Risikoprofil der Workload erfordert.
Für eine servicebezogene Abdeckung siehe die Abschnitte Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite. Ein Folge-Lab, das Security Hub + Config + die GuardDuty-zu-EventBridge-Kette zur automatischen Behebung hinzufügt, wäre ein natürlicher nächster Schritt.