← [Раздел](README.md) · [Главная](../README.md)

# Lab 04 — Tabletop: реагирование на инцидент

## Цель

Провести **настольное учение** (tabletop exercise): симуляция утечки credentials из Git и компрометации pod в Kubernetes. Заполнить timeline, роли, коммуникации и список **audit evidence** без реального prod.

## Предварительно

- Labs 01–03 или понимание Gitleaks, Trivy, RBAC.
- [gdpr-i-personalnye-dannye.md](../09-compliance/gdpr-i-personalnye-dannye.md) (срок 72 ч для GDPR).

## Время

~50 минут (можно в паре: Security + DevOps).

## Сценарий

**09:15 UTC** — Gitleaks в CI на `main` обнаружил `AWS_ACCESS_KEY_ID` в файле `deploy/env.sh`. Ключ имел доступ к S3 bucket `backups-learn` (учебное имя) с копиями БД staging. Параллельно Falco сообщил: pod `payment-api-7d8f9` в namespace `prod` запустил `/bin/sh` и исходящее TCP на `203.0.113.50:4444` (учебный IP).

Данные в staging: email, имя, **без** платёжных карт. 12 000 записей.

## Роли (назначьте себе 2–3)

| Роль | Задачи в учении |
|------|-----------------|
| Incident Commander (IC) | Приоритеты, время, эскалация |
| DevSecOps | CI logs, rotate, Falco, образы |
| SRE / Platform | K8s containment, NetworkPolicy |
| Comms / DPO | GDPR 72h, уведомление клиентов |
| Scribe | Timeline, решения, action items |

## Шаг 1 — Первые 15 минут (чеклист IC)

Запишите ответы:

```markdown
## T+0 — Обнаружение
- [ ] Создан канал инцидента #inc-2025-lab04
- [ ] Severity: P?_ (обоснование)
- [ ] Задействованы роли: ...
- [ ] Предполагаемый blast radius: ...
```

**Containment (немедленно):**

1. Отозвать AWS key (учебно: «вызов IAM DisableKey»).
2. `kubectl scale deployment payment-api --replicas=0 -n prod` (учебная команда).
3. NetworkPolicy deny egress на namespace `prod` (если ещё нет).

## Шаг 2 — Сбор доказательств

| Артефакт | Где взять | Владелец |
|----------|-----------|----------|
| Gitleaks JSON | GitLab job `secret_detection` #12345 | DevSecOps |
| Commit SHA | `a1b2c3d` из алерта | DevSecOps |
| Falco alert | `kubectl logs -n falco` export | SRE |
| Image digest | `payment-api@sha256:deadbeef...` | SRE |
| Vault audit | path `secret/aws/learn` read events | DevSecOps |

Без **реальных** секретов в отчёте — только redacted logs.

## Шаг 3 — Timeline (шаблон)

Заполните:

| Время (UTC) | Событие | Действие | Кто |
|-------------|---------|----------|-----|
| 09:15 | Gitleaks fail on main | Pipeline blocked | Bot |
| 09:18 | IC declared SEV-2 | Channel opened | IC |
| 09:25 | AWS key disabled | Ticket SEC-101 | DevSecOps |
| 09:40 | payment-api scaled to 0 | Containment | SRE |
| 10:30 | Forensics: образ без изменений CI | Compare digest | DevSecOps |
| 11:00 | Root cause hypothesis | Stolen key + exec? | All |

## Шаг 4 — GDPR / 152-ФЗ ветка

Ответьте письменно:

1. Есть ли риск для прав субъектов (email + имя)?
2. Нужно ли уведомление надзорного органа в 72 ч?
3. Нужно ли уведомление пользователей?
4. Какие данные **минимизировать** в post-mortem публичном?

## Шаг 5 — Eradication & Recovery

```bash
# Учебные команды восстановления
vault kv put secret/learn/aws rotation_version=2
docker pull registry.example.com/payment-api@sha256:GOOD_DIGEST
kubectl set image deployment/payment-api app=registry.example.com/payment-api@sha256:GOOD_DIGEST -n prod
kubectl scale deployment payment-api --replicas=3 -n prod
```

Проверки перед «all clear»:

- [ ] Новый ключ только в Vault, Gitleaks green на `main`.
- [ ] Falco: нет shell alerts 24 ч.
- [ ] Trivy image: 0 Critical.

## Шаг 6 — Post-mortem (blameless)

Шаблон:

```markdown
# Post-mortem INC-LAB04

## Summary
Одна строка.

## Impact
Пользователи / данные / downtime.

## Root cause
Техническая + процессная цепочка (5 whys).

## What went well
- ...

## What went wrong
- ...

## Action items
| ID | Action | Owner | Due |
|----|--------|-------|-----|
| 1 | Pre-commit gitleaks hook | DevEx | 2025-07-01 |
| 2 | Deny kubectl exec via RBAC audit | SRE | 2025-07-15 |
| 3 | Quarterly tabletop | Security | recurring |
```

## Шаг 7 — Метрики для руководства

- **MTTD** (mean time to detect): 09:15 − время коммита (задайте сами).
- **MTTR** (mean time to recover): до scale up good digest.
- **% MR с secret scan** за месяц.

## Критерии успеха

- [ ] Timeline ≥ 8 событий с владельцами.
- [ ] Список ≥ 5 audit artifacts.
- [ ] Post-mortem с 3 action items.
- [ ] Решение по GDPR обосновано.

## Самопроверка

1. Что важнее в первые 15 минут: root cause или containment?
2. Какие два артефакта связывают утечку в Git с pod в K8s?
3. Чем tabletop отличается от полноценного fire drill?
4. Кто утверждает закрытие инцидента (all clear)?

## Дальше

[12 — Pro уровень](../12-pro-uroven/README.md): карьера, портфолио и собеседования.
