Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена SCS-C03 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы подготовите с помощью чистого Terraform четыре основные примитива безопасности, которые должны быть в каждой учетной записи AWS с первого дня — управляемый клиентом ключ KMS с автоматической ротацией, IAM Access Analyzer, сканирующий на предмет непреднамеренного межсетевого или публичного доступа, включенный GuardDuty с каналами разведывательной информации об угрозах, а также централизованный бакет для аудиторских журналов, в который записываются данные других рабочих нагрузок. Это базовая конфигурация SCS-C03 secure-by-default.
Каждый ресурс — это чистый 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 разрешение на оценку политики ключа. Псевдоним делает ключ доступным по человекочитаемому имени в последующем коде вместо 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, политики ключей KMS, политики доверия ролей IAM, разрешения Lambda, политики очередей SQS, политики ротации Secrets Manager и многое другое) и выявляет нарушение всякий раз, когда обнаруживает ресурс, доступный извне вашей учетной записи или границы доверия. Домен SCS-C03 Обнаружение угроз и реагирование на инциденты проверяет именно этот шаблон — обнаружения Access Analyzer являются каноническим сигналом для «о, этот бакет теперь публичный».
type = "ACCOUNT" ограничивает анализатор вашей учетной записью; 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-адресов, доменов для криптомайнинга, инфраструктуры управления и контроля, а также подозрительных шаблонов поведения учетных записей. Обнаружения помечаются уровнем серьезности (Низкий / Средний / Высокий) и машиночитаемым типом, таким как Recon:EC2/PortProbeUnprotectedPort.
Мы включаем детектор с частотой публикации 15 минут (быстрее, чем стандартные 6 часов; вопросы SCS-C03 о MTTR почти всегда предполагают частую публикацию). Плагины защиты на основе IAM (MALWARE_PROTECTION_FOR_EC2, S3_DATA_EVENTS и т. д.) стоят дополнительно и выходят за рамки этой базовой конфигурации; включайте их для каждой рабочей нагрузки в продакшене.
Обнаружения автоматически публикуются в EventBridge — именно так подключается последующая автоматизация (уведомления в Slack, корреляция Security Hub, лямбда-функции для автоматического исправления). SCS-C03 неоднократно проверяет эту цепочку обнаружения → EventBridge → реагирование. Мы не настраиваем последующую часть здесь, но как только Шаг 4 завершится, GuardDuty начнет публиковать обнаружения.
resource "aws_guardduty_detector" "main" {
enable = true
finding_publishing_frequency = "FIFTEEN_MINUTES"
}Каждый вопрос SCS-C03 по Безопасности логирования и мониторинга ожидает, что у вас есть централизованный, зашифрованный бакет с режимом однократной записи, в который записываются данные других инструментов безопасности — CloudTrail, VPC Flow Logs, журналы доступа ELB, экспорты GuardDuty, регистраторы Config. Бакет шифруется с помощью управляемого клиентом ключа KMS из Шага 2, публичный доступ полностью заблокирован, и политика бакета обеспечивает, что любой записанный объект должен проходить через ключ из Шага 2 (записи в виде открытого текста не принимаются).
Мы используем настройку владения bucket-owner-enforced (режим без ACL, рекомендованный AWS с 2023 года) — это один из наиболее часто проверяемых атрибутов усиления безопасности S3 на SCS-C03, поскольку он устраняет целый класс межсетевых ошибок конфигурации ACL.
После настройки бакета базовая конфигурация завершена: KMS для ключей шифрования, Access Analyzer для непреднамеренного раскрытия, GuardDuty для обнаружения угроз и бакет для аудита для всего, что необходимо хранить для проверки соответствия. Каждый многосервисный сценарий 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 — и все это попадает в бакет аудита для проверки соответствия. Сначала заложите основу; остальное наслаивайте по мере требований профиля риска рабочей нагрузки.
Для охвата услуг по отдельности см. разделы Просмотр, Справочник и Editorial этой страницы сертификации. Естественным следующим шагом будет последующая лабораторная работа по добавлению Security Hub + Config + цепочки автоматического исправления GuardDuty-EventBridge.