Модель разделённой ответственности
AWS работает по модели shared responsibility:
- AWS отвечает за: физическую инфраструктуру, гипервизор, сети ЦОД, управление железом.
- Ты отвечаешь за: ОС внутри EC2, конфигурацию сети, IAM-политики, шифрование данных, патчинг.
[source: docs.aws.amazon.com/whitepapers/latest/aws-overview/shared-responsibility-model.html]
Ключевые сервисы
EC2 — вычисления
EC2 (Elastic Compute Cloud) — виртуальные машины. Для DevOps важны не сами инстансы, а операционная модель вокруг них:
- Auto Scaling Group (ASG) — горизонтальное масштабирование. Работает через Launch Template (не Launch Configuration — он deprecated).
- Instance Refresh — безопасная замена инстансов при обновлении AMI без даунтайма.
- Вопрос «когда EC2 vs Lambda vs EKS» — это вопрос о controlled rollout, VPC-интеграции, observability и security model, а не о цене.
# Запустить instance refresh в ASG
aws autoscaling start-instance-refresh \
--auto-scaling-group-name my-asg \
--preferences '{"MinHealthyPercentage": 90}'
[source: docs.aws.amazon.com/autoscaling/ec2/userguide/instance-refresh-overview.html]
S3 — объектное хранилище
S3 — не просто «файловое хранилище». Это control point для:
- Versioning — защита от случайного удаления и перезаписи.
- Lifecycle policies — автоматический переход объектов в Glacier или удаление.
- Server-Side Encryption — SSE-S3, SSE-KMS или SSE-C.
- Bucket Policy / IAM — основной способ разграничения доступа. ACL лучше отключать через Object Ownership, если нет legacy-сценария.
# Включить versioning
aws s3api put-bucket-versioning \
--bucket my-bucket \
--versioning-configuration Status=Enabled
RDS / Aurora
RDS — управляемые реляционные БД (PostgreSQL, MySQL, Oracle и др.). Aurora — совместимая с MySQL/PostgreSQL БД с distributed storage, reader replicas и Serverless v2. Обычный Aurora cluster имеет один writer endpoint и до 15 reader instances; Aurora Multi-Master больше не доступен. Ключевые отличия от self-hosted:
- Автоматический failover в multi-AZ режиме (secondary в другой AZ).
- Automated backups и point-in-time recovery из коробки.
- Parameter groups и option groups вместо прямого доступа к конфигу.
EKS — Kubernetes
EKS (Elastic Kubernetes Service) — managed control plane. AWS управляет etcd и API-сервером, ты управляешь worker nodes (или используешь Fargate). Ключевые моменты:
- IRSA (IAM Roles for Service Accounts) — привязка IAM role к Kubernetes ServiceAccount через OIDC. Никаких long-lived credentials в поде.
- Node groups vs managed node groups vs Fargate — разные trade-offs по контролю и операционной нагрузке.
- Обновление кластера — это rolling update control plane + отдельно rolling update worker nodes.
CloudFront — CDN
CloudFront — CDN поверх S3, EC2, ALB или любого HTTP-origin. Важные детали:
- Origins могут быть кастомными (не только S3).
- Cache behaviors — гибкая маршрутизация по path pattern.
- OAC (Origin Access Control) — замена устаревшего OAI для закрытия S3-бакета от прямого доступа.
- Интеграция с WAF и Shield для защиты от DDoS.
IAM — модель доступа
IAM (Identity and Access Management) — центральная система авторизации AWS.
[source: docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html]
Принципы работы
- IAM User — долгосрочные credentials. Использовать только там, где нет другого варианта (legacy CI без OIDC-поддержки). Не использовать для людей в production.
- IAM Role — временные credentials через STS AssumeRole. Это стандарт для EC2, Lambda, EKS-подов, cross-account доступа.
- IAM Group — группировка пользователей. Не путать с role.
- IAM Policy — JSON-документ с эффектом (Allow/Deny), действиями (Actions) и ресурсами (Resources).
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
STS и временные credentials
STS (Security Token Service) выдаёт временные credentials (Access Key + Secret + Session Token). TTL зависит от API и настроек роли: для AssumeRole обычно от 15 минут до max session duration роли (до 12 часов), при role chaining максимум 1 час; GetSessionToken для IAM user может быть до 36 часов. Это основа безопасного cross-account доступа:
# AssumeRole в другой аккаунт
aws sts assume-role \
--role-arn arn:aws:iam::123456789012:role/MyRole \
--role-session-name my-session
[source: docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html]
Permission Boundaries и SCP
- Permission Boundary — максимально допустимые права для IAM entity. Даже если policy дала больше прав, boundary их ограничит.
- SCP (Service Control Policy) — guardrails на уровне AWS Organization. Блокирует целые сервисы или регионы для аккаунтов независимо от IAM-политик.
- Access Analyzer — автоматически находит ресурсы, доступные извне (из другого аккаунта или публично).
IAM Identity Center (бывший SSO)
Для людей — IAM Identity Center с federation через корпоративный IdP (Okta, Azure AD, Google Workspace). Это убирает необходимость в IAM Users вообще и даёт centralized access management через multi-account организацию.
Least Privilege на практике
Не начинай с * и не урезай потом. Начинай с минимума:
- Используй IAM Access Analyzer для генерации policy на основе реального использования.
- Включай CloudTrail и смотри, что реально вызывается.
- Используй условия (
Condition) в policy для ограничения по IP, MFA, времени.
VPC — сетевая модель
VPC (Virtual Private Cloud) — изолированная сеть внутри AWS с твоим CIDR-диапазоном.
[source: docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html]
Базовые компоненты
VPC: 10.0.0.0/16
├── Public Subnet: 10.0.1.0/24 (AZ-a) → Route: 0.0.0.0/0 → IGW
├── Public Subnet: 10.0.2.0/24 (AZ-b) → Route: 0.0.0.0/0 → IGW
├── Private Subnet: 10.0.11.0/24 (AZ-a) → Route: 0.0.0.0/0 → NAT GW
└── Private Subnet: 10.0.12.0/24 (AZ-b) → Route: 0.0.0.0/0 → NAT GW
- IGW (Internet Gateway) — точка выхода/входа в интернет. Подключается к VPC, не к подсети. Public subnet — та, у которой route на IGW.
- NAT Gateway — позволяет ресурсам в private subnet инициировать outbound-соединения в интернет без входящего доступа извне. Размещается в public subnet.
- Route Table — набор правил маршрутизации. Каждая подсеть ассоциирована с одной route table.
Security Groups vs NACLs
Stateful означает: SG автоматически разрешает return traffic. NACL — stateless, поэтому ответный трафик нужно разрешать явно. Диапазон ephemeral ports зависит от ОС клиента/сервера; 1024–65535 часто используют как безопасный широкий диапазон, но его лучше сужать под конкретную платформу.
VPC Endpoints и PrivateLink
Без VPC endpoint трафик из private subnet к S3 или DynamoDB обычно идёт через NAT/public endpoint и оплачивается как NAT-трафик. С endpoint маршрут остаётся внутри AWS networking:
# Создать Gateway endpoint для S3
aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--service-name com.amazonaws.eu-west-1.s3 \
--route-table-ids rtb-12345678
- Gateway Endpoint — для S3 и DynamoDB. Бесплатно, добавляется как запись в route table.
- Interface Endpoint (PrivateLink) — для большинства других сервисов (SSM, ECR, Secrets Manager). Создаёт ENI в подсети, платно.
Transit Gateway
Для связи нескольких VPC и on-premises сетей. Альтернатива VPC Peering при количестве VPC > 2–3 (пиринг не транзитивный, Transit Gateway — транзитивный).
Terraform: базовый VPC
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
}
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
}
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "eu-west-1a"
map_public_ip_on_launch = true
}
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.main.id
}
}
resource "aws_route_table_association" "public" {
subnet_id = aws_subnet.public.id
route_table_id = aws_route_table.public.id
}
Cost-ловушки в сети
- NAT Gateway: почасовая оплата + обработанный GB. При high-throughput быстро становится дорого.
- Cross-AZ трафик: NAT GW в одной AZ + клиенты из другой AZ добавляют межзонный трафик.
- VPC Flow Logs: дополнительные расходы на CloudWatch Logs или S3. Включай с retention/filtering, а не «навсегда всё».
Well-Architected Framework — кратко
AWS Well-Architected Framework определяет 6 столпов качественной архитектуры (не путать с AWS WAF — Web Application Firewall):
- Operational Excellence — автоматизация операций, IaC, runbook, постмортемы.
- Security — least privilege, шифрование везде, audit trail, incident response.
- Reliability — multi-AZ, circuit breaker, backup/restore, chaos engineering.
- Performance Efficiency — правильный тип инстанса/сервиса под workload, serverless там, где уместно.
- Cost Optimization — right-sizing, Reserved/Spot инстансы, lifecycle policies, удаление неиспользуемого.
- Sustainability — минимизация environmental footprint: выбор эффективных instance типов, serverless, consolidation.
[source: docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html]
Observability в AWS
- CloudWatch Metrics — метрики сервисов (CPU, NetworkIn, RequestCount). Алармы на метрики.
- CloudWatch Logs — centralized logging. Structured logging + Metric Filters — стандарт.
- CloudTrail — audit trail всех API-вызовов. Включай во всех аккаунтах, храни в centralized S3-бакете.
- VPC Flow Logs — сырой сетевой трафик на уровне ENI. Полезно для forensics и диагностики connectivity.
- AWS X-Ray — distributed tracing для приложений.
Disaster Recovery
Multi-AZ — это не DR. Это HA внутри одного региона. DR — это multi-region с репликацией данных и failover-процедурой.
Быстрый чеклист для production-аккаунта
- [ ] IAM Users только для break-glass; все люди через Identity Center + federation
- [ ] MFA обязательно для root и privileged roles
- [ ] SCP блокирует опасные действия (отключение CloudTrail, изменение billing) на уровне Org
- [ ] VPC: private subnets для всего, public только для LB и NAT
- [ ] VPC Endpoints для S3/DynamoDB/SSM — убирают трафик через NAT
- [ ] CloudTrail включён во всех регионах, логи в centralized bucket с Object Lock
- [ ] Encryption at rest (KMS) и in transit (TLS) для всех хранилищ данных
- [ ] Automated backups с tested restore procedure