Сценарии безопасной архитектуры
Решайте ситуационные вопросы о минимальных привилегиях IAM, шифровании, изоляции VPC и WAF/Shield, чтобы закрепить знания по безопасности.
«Сценарии безопасной архитектуры» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Сценарий 1: доступ EC2 к S3 с минимальными привилегиями
Сценарий: Экземпляр EC2 запускает веб-приложение, которому необходимо читать объекты из определённого бакета S3. Команда безопасности требует не хранить на экземпляре долгосрочные учётные данные и соблюдать принцип минимальных привилегий. Решение: Создайте роль IAM с политикой, разрешающей только s3:GetObject для ARN определённого бакета. Назначьте эту роль экземпляру EC2 как профиль экземпляра. Приложение использует сервис метаданных экземпляра (IMDS) для автоматического получения временных учётных данных — хранить ключи не требуется.
# IAM policy for least-privilege EC2 -> S3 read
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Action': ['s3:GetObject'],
'Resource': 'arn:aws:s3:::my-app-bucket/*'
}]
}
# Attach role to EC2 instance
aws ec2 associate-iam-instance-profile \
--instance-id i-1234567890abcdef0 \
--iam-instance-profile Name=EC2S3ReadRoleСценарий 2: шифрование данных в базе RDS
Сценарий: Компания хранит персональные данные клиентов (PII) в базе данных RDS PostgreSQL. Команда по обеспечению соответствия требованиям требует шифрования данных в состоянии покоя с возможностью аудита использования ключа. Решение: Включите шифрование RDS с помощью AWS KMS, используя управляемый клиентом ключ (CMK). CMK позволяет команде безопасности управлять ротацией ключа, просматривать сведения об использовании ключа в CloudTrail и при необходимости отзывать доступ. Примечание: шифрование необходимо включить при создании экземпляра RDS — существующий незашифрованный экземпляр RDS нельзя зашифровать на месте. Чтобы зашифровать существующую базу данных, создайте снимок, скопируйте его с включённым шифрованием и восстановите базу данных из зашифрованного снимка.
# Create an encrypted RDS instance
aws rds create-db-instance \
--db-instance-identifier prod-postgres \
--db-instance-class db.t3.medium \
--engine postgres \
--master-username admin \
--master-user-password SecurePass123! \
--storage-encrypted \
--kms-key-id arn:aws:kms:us-east-1:123456789012:key/mrk-abc123 \
--allocated-storage 100Сценарий 3: бакет S3 — блокировка публичного доступа
Сценарий: Разработчик случайно сделал бакет S3 публичным, раскрыв данные клиентов. Команда безопасности хочет гарантировать, что ни один бакет S3 в учётной записи account никогда не сможет стать публичным, даже если разработчик попытается это сделать. Решение: Включите блокировку публичного доступа S3 на уровне account. Это переопределяет любую политику бакета или ACL, предоставляющую публичный доступ, независимо от настроек отдельных команд. Дополните это правилом AWS Config (s3-bucket-public-read-prohibited) для постоянного обнаружения и оповещения о несоответствующих требованиям бакетах.
# Block all public access at account level
aws s3control put-public-access-block \
--account-id 123456789012 \
--public-access-block-configuration \
'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true'
# Deploy Config rule to detect violations
aws configservice put-config-rule \
--config-rule '{"ConfigRuleName": "s3-bucket-public-read-prohibited", "Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED"}}'Сценарий 4: изоляция VPC для уровня базы данных
Сценарий: Компания хочет гарантировать, что доступ к базе данных RDS будет только с серверов приложений, а не из интернета. Решение: Разместите RDS в приватной подсети без маршрута к интернет-шлюзу. Создайте группу безопасности для RDS, разрешающую входящий трафик через порт 5432 (PostgreSQL) только от группы безопасности серверов приложений, а не от любого диапазона IP-адресов. Это гарантирует, что даже при компрометации сервера приложений злоумышленник не сможет обратиться к базе данных извне VPC, а боковое перемещение будет ограничено правилами групп безопасности.
# Create RDS security group allowing only the app tier SG as source
aws ec2 create-security-group \
--group-name rds-sg \
--description 'RDS security group' \
--vpc-id vpc-abc123
aws ec2 authorize-security-group-ingress \
--group-id sg-rds \
--protocol tcp \
--port 5432 \
--source-group sg-app # app tier security group ID onlyСценарий 5: ротация учётных данных базы данных
Сценарий: Сейчас код приложения содержит учётные данные базы данных в файлах конфигурации в явном виде. Аудит безопасности отмечает это как критический риск. Решение: Храните учётные данные в AWS Secrets Manager и настройте автоматическую ротацию (Secrets Manager содержит встроенные функции ротации Lambda для RDS). Измените приложение так, чтобы во время выполнения оно получало учётные данные из Secrets Manager с помощью SDK. При каждой ротации приложение автоматически получает новые учётные данные без развёртывания. Включите шаблон ротации секрета RDS для полностью управляемой ротации учётных данных без простоев.
# Store RDS credentials in Secrets Manager
aws secretsmanager create-secret \
--name prod/myapp/rds \
--secret-string '{"username":"admin","password":"OldPass123!","host":"rds-endpoint.amazonaws.com","port":5432}'
# Enable automatic rotation every 30 days
aws secretsmanager rotate-secret \
--secret-id prod/myapp/rds \
--rotation-lambda-arn arn:aws:lambda:us-east-1:123:function:SecretsManagerRDSPostgreSQLRotationSingleUser \
--rotation-rules AutomaticallyAfterDays=30Сценарий 6: обнаружение необычной активности API
Сценарий: Компания хочет обнаруживать случаи компрометации учётных данных AWS и их использования из неожиданных мест. Решение: Включите Amazon GuardDuty во всех Region. GuardDuty анализирует события CloudTrail, журналы потоков VPC и журналы DNS с помощью машинного обучения, обнаруживая аномалии: вызовы API из необычных географических регионов, признаки майнинга биткоинов на EC2, связь с выходными узлами Tor или признаки кражи учётных данных. GuardDuty создаёт результаты, которые могут запускать правила EventBridge для автоматического уведомления команды безопасности через SNS или создания обращения в службу поддержки.
# Enable GuardDuty in a Region
aws guardduty create-detector \
--enable \
--finding-publishing-frequency FIFTEEN_MINUTES
# EventBridge rule to react to GuardDuty HIGH severity findings
aws events put-rule \
--name guardduty-high-severity \
--event-pattern '{
"source": ["aws.guardduty"],
"detail-type": ["GuardDuty Finding"],
"detail": {"severity": [{"numeric": [">=", 7]}]}
}'Сценарий 7: WAF для блокировки вредоносных запросов
Сценарий: Веб-приложение, работающее за ALB, подвергается атакам с внедрением SQL. Приложение нельзя немедленно изменить. Решение: Свяжите AWS WAF с ALB. Разверните группу правил AWS Managed Rules for Common Threats (Core Rule Set + SQL Database rule group), включающую готовое обнаружение внедрения SQL. WAF проверяет HTTP-запросы до того, как они достигают ALB, и блокирует запросы, соответствующие шаблонам атак, — изменения кода приложения не требуются. Также включите журналирование WAF в Kinesis Firehose для анализа безопасности.
# Create WAF Web ACL with SQL injection protection
aws wafv2 create-web-acl \
--name AppProtection \
--scope REGIONAL \
--default-action Allow={} \
--rules '[{
"Name": "AWSManagedRulesSQLiRuleSet",
"Priority": 1,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesSQLiRuleSet"
}
},
"OverrideAction": {"None": {}},
"VisibilityConfig": {"SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "SQLi"}
}]' \
--region us-east-1Сценарий 8: принятие роли между учётными записями
Сценарий: Центральной учётной записи безопасности необходим доступ только для чтения ко всем учётным записям рабочих нагрузок в AWS Organisation для проведения аудитов безопасности. Решение: В каждой учётной записи рабочей нагрузки создайте роль IAM с политикой доверия, разрешающей учётной записи безопасности (по ID учётной записи) принять эту роль. Назначьте политику только для чтения (например, управляемую AWS-политику SecurityAudit). Команда безопасности в центральной учётной записи использует STS AssumeRole, чтобы временно принять роль в каждой учётной записи рабочей нагрузки. Это соответствует принципу минимальных привилегий: в учётных записях рабочих нагрузок не создаются постоянные пользователи IAM.
# Trust policy in workload account (allows security account to assume role)
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::SECURITY_ACCOUNT_ID:root'
},
'Action': 'sts:AssumeRole'
}]
}
# From security account: assume role in workload account
aws sts assume-role \
--role-arn arn:aws:iam::WORKLOAD_ACCOUNT_ID:role/SecurityAuditRole \
--role-session-name audit-2024-01Сценарий 9: ограничение действий с помощью SCP
Сценарий: Компания использует AWS Organizations и хочет запретить любой учётной записи в OU, не предназначенной для рабочей среды, запускать дорогостоящие экземпляры GPU. Решение: Создайте политику управления сервисами (SCP), запрещающую ec2:RunInstances для семейств экземпляров GPU (p3, p4, g4, g5), и прикрепите её к OU, не предназначенной для рабочей среды. SCP применяются даже к пользователям root и пользователям IAM с уровнем Administrator в дочерних учётных записях — они служат защитными ограничениями, которые не может обойти ни одна идентификация в учётной записи. Это предотвращает случайные или злонамеренные крупные расходы в учётных записях для разработки и тестирования.
# SCP to deny GPU instance types in non-prod OU
{
'Version': '2012-10-17',
'Statement': [{
'Sid': 'DenyGPUInstances',
'Effect': 'Deny',
'Action': 'ec2:RunInstances',
'Resource': 'arn:aws:ec2:*:*:instance/*',
'Condition': {
'StringLike': {
'ec2:InstanceType': ['p3.*', 'p4d.*', 'g4.*', 'g5.*']
}
}
}]
}Сценарий 10: журнал аудита для обеспечения соответствия требованиям
Сценарий: Компания, предоставляющая финансовые услуги, должна доказать аудиторам, что все вызовы API AWS записываются, защищены от подделки и хранятся в течение 7 лет. Решение: Создайте мультирегиональный журнал AWS CloudTrail, доставляющий журналы в выделенный бакет S3 в учётной записи для журналирования. Включите проверку целостности файлов журналов (криптографические файлы дайджестов, обнаруживающие подделку журналов). Настройте политику блокировки объектов S3 в режиме соответствия требованиям со сроком хранения 7 лет для бакета журналов. Это гарантирует, что журналы нельзя будет удалить или изменить — даже пользователю root — в течение требуемого срока хранения.
# Create multi-region trail with integrity validation
aws cloudtrail create-trail \
--name compliance-trail \
--s3-bucket-name central-audit-logs-123 \
--is-multi-region-trail \
--enable-log-file-validation \
--include-global-service-events
aws cloudtrail start-logging --name compliance-trailСценарий 11: конечная точка VPC для приватного доступа к S3
Сценарий: Экземплярам EC2 в приватной VPC необходимо обращаться к S3 так, чтобы трафик не проходил через публичный интернет. Сейчас используется NAT Gateway, а затраты высоки из-за платы за обработку данных NAT Gateway. Решение: Создайте шлюзовую конечную точку S3 VPC. Добавьте в таблицу маршрутизации приватной подсети запись маршрута, направляющую список префиксов S3 к конечной точке. Теперь трафик к S3 полностью остаётся внутри магистральной сети AWS — NAT Gateway и интернет-шлюз не нужны. Шлюзовые конечные точки S3 предоставляются бесплатно (в отличие от интерфейсных конечных точек, для которых взимается почасовая плата за каждую AZ). Это также повышает безопасность, исключая доступ к S3 из маршрута через публичный интернет.
# Create S3 Gateway VPC Endpoint
aws ec2 create-vpc-endpoint \
--vpc-id vpc-abc123 \
--service-name com.amazonaws.us-east-1.s3 \
--route-table-ids rtb-private-1a rtb-private-1b
# Result: route table automatically gets a route:
# Destination: pl-63a5400a (S3 prefix list)
# Target: vpce-xyz456 (the Gateway Endpoint)
# EC2 instances now reach S3 privately at no endpoint costБыстрая проверка
Проверьте, насколько хорошо Вы поняли концепции AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы разобрали сценарии, охватывающие: роли IAM и профили экземпляров для доступа к EC2 без учётных данных, Secrets Manager для автоматической ротации учётных данных базы данных, AWS WAF для блокировки атак с внедрением без изменений в коде и CloudTrail вместе с блокировкой объектов S3 для защищённых от подделки журналов соответствия требованиям. Далее Вы разберёте сценарии устойчивой архитектуры с высокой доступностью.
Часто задаваемые вопросы
Урок «Сценарии безопасной архитектуры» бесплатный?
Да — полный текст урока «Сценарии безопасной архитектуры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «Сценарии безопасной архитектуры»?
Решайте ситуационные вопросы о минимальных привилегиях IAM, шифровании, изоляции VPC и WAF/Shield, чтобы закрепить знания по безопасности. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Сценарии безопасной архитектуры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Сценарии безопасной архитектуры
- Сценарии устойчивой архитектуры с высокой доступностью
- Сценарии высокой производительности и оптимизации затрат
- Полноценный мини-экзамен по всем разделам