Как создать безопасную инфраструктуру?

«Как создать безопасную инфраструктуру?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я строю безопасную инфраструктуру на принципах нулевого доверия (Zero Trust) и защиты в глубину (Defense in Depth). Вот практические шаги из моего опыта:

1. Инфраструктура как код (IaC) с безопасностью по умолчанию: Использую Terraform с модулями, которые уже имеют безопасные настройки. Например, создание security group в AWS, которая по умолчанию запрещает весь входящий трафик:

resource "aws_security_group" "app_sg" {
  name        = "app-security-group"
  description = "Allow only necessary traffic"

  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # На практике сужаю до конкретных IP
  }

  # Явно запрещаем все остальное по умолчанию
  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = []
    self        = false
  }
}

2. Минимальные привилегии (PoLP) для всего:

  • Для сервисов: Запускаю процессы от непривилегированных пользователей.
  • Для CI/CD: Использую отдельные, ограниченные IAM-роли для каждого этапа пайплайна (build, deploy).
  • Для доступа: Настраиваю доступ по SSH только по ключам, отключаю root-логин.

3. Шифрование и управление секретами:

  • Data in transit: Обязательный TLS 1.2/1.3 для всего внутреннего и внешнего трафика, использую внутренние CA или Let's Encrypt.
  • Data at rest: Шифрование томов (AWS EBS, LUKS) и баз данных.
  • Секреты: Храню в специализированных хранилищах (HashiCorp Vault, AWS Secrets Manager) и никогда не коммичу в git.

4. Сегментация и мониторинг:

  • Разделяю окружения (dev/staging/prod) на уровне VPC/подсетей.
  • Настраиваю централизованное логирование (ELK Stack) и алертирование на подозрительную активность (множественные failed logins, необычные исходящие соединения).
  • Регулярно запускаю сканирование уязвимостей (Trivy для контейнеров, OpenVAS для сети) в рамках CI/CD.

5. Автоматизация обновлений и конфигурации: Использую Ansible для обеспечения одинаковой, "закаленной" (hardened) конфигурации всех серверов (отключение ненужных служб, настройка фаервола iptables/nftables, применение security patches).