← Back to notes

AWS для DevOps: ядро
сервисов, IAM, VPC


Модель разделённой ответственности

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 на практике

Не начинай с * и не урезай потом. Начинай с минимума:

  1. Используй IAM Access Analyzer для генерации policy на основе реального использования.
  2. Включай CloudTrail и смотри, что реально вызывается.
  3. Используй условия (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 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):

  1. Operational Excellence — автоматизация операций, IaC, runbook, постмортемы.
  2. Security — least privilege, шифрование везде, audit trail, incident response.
  3. Reliability — multi-AZ, circuit breaker, backup/restore, chaos engineering.
  4. Performance Efficiency — правильный тип инстанса/сервиса под workload, serverless там, где уместно.
  5. Cost Optimization — right-sizing, Reserved/Spot инстансы, lifecycle policies, удаление неиспользуемого.
  6. 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
AWS для DevOps: ядро сервисов, IAM, VPC | Aleksandr Suprun