נבדק לאחרונה: מאי 2026
בנו את שירותי AWS של בחינת SCS-C03 עם Terraform פשוט — בלוק אחד בכל פעם, כאשר כל אחד מהם מקושר בחזרה לתחום במבחן. אותו הקוד עובד גם ב-OpenTofu.
עד סוף מעבדה זו תצרו, באמצעות Terraform פשוט, את ארבעת ה-פרימיטיבים הביטחוניים שכל חשבון AWS צריך שיהיו לו מהיום הראשון — מפתח KMS מנוהל על ידי הלקוח עם רוטציה אוטומטית, IAM Access Analyzer הסורק גישת צולבת או ציבורית בלתי מכוונת, GuardDuty מופעל עם פידים של מודיעין איומים, ו-Bucket מרכזי ליומני ביקורת שאליו כותבות עומסי עבודה אחרים. זהו קו הבסיס מאובטח כברירת מחדל של SCS-C03.
כל משאב הוא Terraform פשוט — אותו קוד עובד ללא שינוי ב-OpenTofu. אין משתנים, אין מודולים. זרקו את המקטעים לקובץ main.tf אחד, הריצו terraform init, ולאחר מכן terraform apply צעד אחר צעד.
>= 1.5 או OpenTofu >= 1.6.us-east-1.שלושה מתוך ארבעת השירותים כאן הם חינם עבור חשבונות חדשים; אחד מהם כרוך בחיוב ממשי:
אם תשמרו על קו בסיס זה פועל בחשבון אמיתי, צפו לשלם בסביבות $5–15 לחודש בסך הכל. זול יחסית לנראות שהוא מספק לכם. הרסו לאחר המעבדה אם אתם מעדיפים שלא.
פתיחה סטנדרטית. SCS-C03 הוא אגנוסטי לספק ולאזור בהיקפו, אך קו בסיס מאובטח צריך להיות מיושם לכל אזור — GuardDuty ו-Access Analyzer הם שירותים אזוריים. רוב הצוותים בוחרים אזור ראשי (לדוגמה us-east-1) עבור קו הבסיס ומשכפלים אותו באמצעות Terraform לכל אזור ככל שהחשבון מתרחב.
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 בודק את ההבדל בין מפתחות KMS מנוהלים על ידי AWS (חינם, רוטציה אוטומטית, ללא מדיניות מפתח בשליטתך) לבין מפתחות מנוהלים על ידי לקוח ($1 לחודש, אתה הבעלים של המדיניות, אתה שולט ברוטציה, אתה מקבל נראות ביקורתית לכל קריאת Encrypt/Decrypt דרך CloudTrail). בסביבת פרודקשן תמיד יש להשתמש במפתחות מנוהלים על ידי לקוח.
אנו מאפשרים רוטציה שנתית (enable_key_rotation = true) וכותבים מדיניות מפתח שמעניקה לשורש החשבון את היכולת לנהל את המפתח (ברירת המחדל של AWS לכל מפתח המנוהל על ידי לקוח) ומעניקים במפורש לשירות IAM Access Analyzer הרשאה להעריך את מדיניות המפתח. ה-alias מאפשר הפניה למפתח בשם קריא אנושית בקוד המשך במקום ב-UUID — SCS-C03 בודק מוסכמת שמות זו כדרישת קדם לביקורת 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 מעריך באופן רציף מדיניות מבוססת משאבים (מדיניות S3 bucket, מדיניות מפתח KMS, מדיניות אמון תפקידי IAM, הרשאות Lambda, מדיניות תורי SQS, מדיניות רוטציה של Secrets Manager, ועוד) ומציף ממצא בכל פעם שהוא מזהה משאב נגיש מחוץ לחשבון או לגבולות האמון שלך. תחום Threat Detection and Incident Response של SCS-C03 בודק בדיוק תבנית זו — ממצאי Access Analyzer הם האות הקאנוני ל-"אוי, ה-bucket הזה עכשיו ציבורי".
type = "ACCOUNT" מגביל את ה-analyzer לחשבון שלך; type = "ORGANIZATION" דורש AWS Organizations ומגביל לכל הארגון (התשובה למצב מרובה חשבונות ב-SCS-C03). כך או כך, הוא תמיד חינמי ודורש אפס תצורה לאחר ההפעלה.
resource "aws_accessanalyzer_analyzer" "main" {
analyzer_name = "certlabpro-scs-c03"
type = "ACCOUNT"
}GuardDuty הוא שירות זיהוי איומים מנוהל של AWS. הוא מנתח באופן רציף יומני CloudTrail, VPC Flow Logs ויומני DNS אל מול פידים של מודיעין איומים של AWS — רשימות מפורסמות של כתובות IP ידועות כגרועות, דומייני כריית קריפטו, תשתית פיקוד ובקרה, ותבניות התנהגות חשבון חשודות. ממצאים מגיעים מתויגים ברמת חומרה (Low / Medium / High) ובסוג הניתן לניתוח מכונה כמו Recon:EC2/PortProbeUnprotectedPort.
אנו מפעילים את הגלאי בתדירות פרסום של 15 דקות (מהיר יותר מברירת המחדל של 6 שעות; שאלות SCS-C03 לגבי MTTR כמעט תמיד מניחות פרסום תכוף). התוספים מבוססי IAM להגנה (MALWARE_PROTECTION_FOR_EC2, S3_DATA_EVENTS, וכו') עולים תוספת והם מחוץ להיקף קו הבסיס הזה; הפעילו אותם לפי עומס עבודה בסביבת פרודקשן.
ממצאים מתפרסמים ל-EventBridge באופן אוטומטי — כך מתחברת אוטומציה במורד הזרם (התראות Slack, קורלציה של Security Hub, פונקציות Lambda לתיקון אוטומטי). SCS-C03 בודק שרשרת זו של ממצאים → EventBridge → תגובה שוב ושוב. איננו מחברים את המורד הזרם כאן, אך ברגע ששלב 4 מסתיים, GuardDuty מתחיל לפרסם.
resource "aws_guardduty_detector" "main" {
enable = true
finding_publishing_frequency = "FIFTEEN_MINUTES"
}כל שאלת Security Logging and Monitoring של SCS-C03 מצפה שיהיה לכם Bucket מרכזי, מוצפן, בסגנון 'כתוב פעם אחת' שאליו כותבים כלי אבטחה אחרים — CloudTrail, VPC Flow Logs, יומני גישה של ELB, ייצוא GuardDuty, רשמי Config — כותבים לתוכו. ה-Bucket מוצפן עם מפתח ה-KMS המנוהל על ידי הלקוח משלב 2, גישה ציבורית חסומה לחלוטין, ומדיניות Bucket אוכפת שכל אובייקט שנכתב חייב לעבור דרך המפתח משלב 2 (לא מתקבלות כתיבות בטקסט רגיל).
אנו משתמשים בהגדרת הבעלות bucket-owner-enforced (מצב ACLs מושבתים, מומלץ על ידי AWS מאז 2023) — זוהי אחת מתכונות אבטחת S3 הנבדקות ביותר ב-SCS-C03 מכיוון שהיא מבטלת סוג שלם של תצורות שגויות של ACLs בין חשבונות.
עם ה-Bucket במקום, קו הבסיס הושלם: KMS למפתחות הצפנה, Access Analyzer לחשיפה בלתי מכוונת, GuardDuty לזיהוי איומים, ו-Bucket ביקורת לכל מה שצריך להישמר לצורך סקירת תאימות. כל תרחיש מרובה שירותים של SCS-C03 מצפה שתהיה לכם את ארבעת אלה; השאלות המתקדמות יותר מוסיפות Security Hub, Config, Inspector, או Macie על גבי בסיס זה.
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 מפרק את כל מה שבמעבדה זו. שתי הערות:
deletion_window_in_days = 30, כלומר destroy קובע אותו למחיקה בעוד 30 יום — הוא לא מוסר באופן מיידי (זוהי תבנית הבטיחות שנקבעה על ידי SCS-C03; מחיקת KMS היא בלתי הפיכה). במהלך 30 הימים תוכלו לבטל דרך המסוף. כדי למחוק בפועל, עליכם גם להמתין לסיום חלון הזמן. AWS ממשיכה לחייב $1 לחודש במהלך תקופה זו.force_destroy = false — אם אספתם בו יומנים, רוקנו אותו לפני המחיקה (aws s3 rm s3://<bucket> --recursive).SCS-C03 מכסה שטח רחב יותר ממה שמעבדה בודדת יכולה להכיל — AWS Config (הערכת תאימות מתמשכת), Security Hub (אגרגציה מרכזית של ממצאים), Macie (גילוי PII ב-S3), Inspector (סריקת פגיעויות ב-EC2/Lambda), Detective (חקירת איומים), WAF + Shield (הגנת קצה), Network Firewall, Network Access Analyzer, Cognito (זהות משתמשים), Secrets Manager + Systems Manager Parameter Store, ACM (TLS), Firewall Manager (אכיפת מדיניות מרובת חשבונות), וכל מרחב מפתחות החומרה של CloudHSM.
אנו נצמדים לארבעת הפרימיטיבים שלעיל מכיוון שהם קו הבסיס של היום הראשון שעליו נבנה כל השאר. כללי Config כותבים ממצאים ל-Security Hub, שמקשר אותם לממצאי GuardDuty, שמצביעים על משאבים מוגנים על ידי מפתחות KMS, עם בעיות מדיניות שנתפסו על ידי Access Analyzer — וכל זה נוחת ב-Bucket הביקורת לבדיקת תאימות. בנו את היסודות תחילה; שכבו את השאר בהתאם לדרישות פרופיל הסיכון של עומס העבודה.
לכיסוי שירות-אחר-שירות, ראו את קטעי ה-עיון, מדריך ו-Editorial בדף הסמכה זה. מעבדת המשך שתוסיף Security Hub + Config + שרשרת התיקון האוטומטי של GuardDuty-ל-EventBridge תהיה הצעד הבא הטבעי.