Введение
6 уроков M7 покрыли типы evidence (M7.1), сбор (M7.2), OpenLineage trail (M7.3), управление замечаниями (M7.4), цикл attestation (M7.5), дашборды (M7.6). Лаб — практический синтез: вы как CDO Office SwiftRide T+10M строите evidence pipeline для CDE-SWR-003 (driver_earnings_ledger) end-to-end. Архитектурные решения, список компонентов, план развёртывания, self-check.
Лаб — doc-centric (обязательный). Вывод — документ архитектуры evidence pipeline Markdown / YAML с 7 секциями: (1) архитектурное решение; (2) список компонентов + обязанности; (3) схема данных (evidence-schema-v1); (4) план развёртывания; (5) operations runbook; (6) критерии self-check; (7) opt-in docker-compose setup. Big 4 Q4 walkthrough оценивает артефакт напрямую.
Inputs
- M7.1 типы evidence — 6 IPE-атрибутов + иерархия надёжности
- M7.2 evidence pipeline — 5-стадийная архитектура (engine → emitter → store → attestation → auditor)
- M7.3 OpenLineage trail — RunEvents + DatasetEvents + Marquez backend + S3 archive
- M7.4 управление замечаниями — 6-стадийный workflow по severity; SLA tiers
- M7.5 цикл attestation — 28-дневный квартальный ритм; sign-off обязателен 3 секции
- M7.6 дашборды — виды по аудиториям; CDO операционный + Audit Committee стратегический + External Auditor evidence
Плюс из предшествующих модулей:
- M4.5 реестр — запись CDE-SWR-003 с owner, lineage refs, control refs
- M5.9 controls matrix — CTL-CDE-SWR-003-001..008 (8 контролей)
- M2.7 реестр рисков — записи R-DE-001..008, связанные с контролями
Workflow лаба
Последовательный синтез; inputs из M7.1-M7.6; вывод документ архитектуры evidence pipeline + план развёртывания + opt-in docker-compose.
Шаг 1 — Архитектурное решение
Требуемое решение: GE 1.17.1 / Soda Core 4.0 / оба?
Матрица решения:
| Критерий | GE 1.17.1 | Soda Core 4.0 | Оба |
|---|---|---|---|
| Выразительность правил | Сильная — 50+ встроенных expectations; Python extension | Сильная — SodaCL DSL contract-first | Максимальное покрытие |
| Lineage правил | Git-versioned expectations YAML | Git-versioned contracts YAML | Применимо оба |
| Схема вывода | validation_result.json + Data Docs HTML | scan_results.json | Два формата требуют нормализации |
| Стоимость инструментария | OSS Core; коммерческий GX Cloud отдельно | OSS Core; коммерческий Soda Cloud | Maintenance overhead 2x |
| Знакомство команды SwiftRide | Pilot SwiftPay 2024-2025 — production experience | Новее; меньше внутреннего опыта | Смешанное |
| Cloud интеграция | S3 + Snowflake battle-tested | Snowflake + cloud-agnostic | Оба |
| Contract-first | Нет (expectations standalone) | Да (contracts первичный артефакт) | Soda для контрактов |
| Anomaly detection | Ограниченная (ручные пороги) | Ограниченная (rule-based) | Добавить Anomalo отдельно |
Решение SwiftRide (T+10M):
architecture_decision:
primary_engine: "Great Expectations 1.17.1"
rationale: |
Production experience GE из pilot SwiftPay 2024-2025;
знакомство команды; rich expectation library; Data Docs HTML
позволяет stakeholder review без отдельного слоя визуализации.
supplementary_engine: "Soda Core 4.0 (только контракты)"
supplementary_rationale: |
Паттерн Soda contracts для cross-system data contracts
(Aurora → Snowflake сверка); contract-first paradigm
enforces явный type/null/uniqueness; дополняет GE
для ad-hoc валидации значений.
anomaly_detection: "Anomalo (pilot Q4 2026)"
anomaly_rationale: |
Детекция unknown-unknowns ML-based; дополняет
rule-based GE/Soda; pilot для CDE-SWR-019 атрибуция SwiftAds
(ожидается высокий false-positive нормализующий).
rejected_alternatives:
- "Только Soda Core 4.0 — потребовалось бы портировать все expectations GE SwiftPay; 6-месячная стоимость миграции"
- "Оба равно — operational overhead поддержки 2 engines; capacity команды не поддерживает"
- "Build custom — антипаттерн (M7.2); нет leveraging community rules"
Шаг 2 — Список компонентов
Матрица компонентов:
| Компонент | Стадия | Tech | AWS resource | Владение |
|---|---|---|---|---|
| GE Checkpoint runner | Engine | Python 3.13 + GX Core 1.17.1 | Lambda swr-ge-runner | Data Platform Team |
| Репозиторий GE expectations | Engine | Git | github.com/swiftride/dq-expectations | Data Engineering + Risk Function review |
| Репозиторий Soda contracts | Engine | Git | github.com/swiftride/dq-contracts | Data Engineering + Risk Function review |
| Soda scan runner | Engine | Python 3.13 + Soda Core 4.0 | Lambda swr-soda-runner | Data Platform Team |
| Evidence emitter | Emitter | Python 3.13 | Lambda swr-evidence-emitter | Data Platform + Audit |
| KMS signing key | Emitter | AWS KMS | alias/swr-evidence-signing-key | Security Team |
| KMS encryption key | Emitter | AWS KMS | alias/swr-evidence-encryption-key | Security Team |
| OpenLineage Kafka topic | Emitter | MSK Kafka | openlineage.runs (3-broker) | Data Platform |
| Marquez backend | Emitter | PostgreSQL + ECS | marquez-prod в swr-prod | Data Platform |
| Marquez Kafka consumer | Emitter | Marquez | Размещён вместе с Marquez | Data Platform |
| Evidence archive Kafka consumer | Store | Lambda | swr-evidence-archive-consumer | Data Platform |
| S3 evidence bucket | Store | S3 + Object Lock Compliance | swr-evidence-prod-cde-evidence | Audit + Security |
| S3 OpenLineage archive bucket | Store | S3 + Object Lock | swr-evidence-prod-openlineage-archive | Audit + Security |
| Snowflake evidence index | Store | Snowflake | audit.evidence_index | Audit + Data Platform |
| Jira issue tracking | Issue mgmt | Jira Cloud | swr.atlassian.net | Engineering + Audit |
| PagerDuty alerting | Issue mgmt | PagerDuty | services: data-tier1, data-tier2 | On-call rotation |
| Workiva attestation | Attestation | Workiva | swr.wdesk.com | Risk Function + Audit |
| Looker CDO dashboard | Reporting | Looker | dashboard.looker.swr.internal | CDO Office |
| Hex Audit Committee report | Reporting | Hex | hex.swr.internal | Audit + CDO |
Шаг 3 — Evidence schema v1
Обязательная JSON-схема для всех evidence payload. Согласно нормализованной схеме M7.2.
{
"$schema": "https://swr.io/schemas/evidence-v1.json",
"evidence_version": "1.0",
"evidence_id": "ev_2026091506000000_ctl-cde-swr-003-002",
"timestamp_utc": "2026-09-15T06:00:00.523Z",
"control_id": "CTL-CDE-SWR-003-002",
"cde_id": "CDE-SWR-003",
"engine": {
"tool": "great_expectations",
"version": "1.17.1",
"run_id": "ge-uuid-...",
"expectation_suite_version": "v3.2.0",
"expectation_suite_git_sha": "a3f7b2c4e5d1..."
},
"input_state": {
"dataset_fqn": "snowflake.dl_marts.fct_driver_earnings",
"snapshot_at": "2026-09-15T05:59:00Z",
"snapshot_pointer": "snowflake_time_travel:2026-09-15T05:59:00Z",
"input_hash": "sha256:7f3a..."
},
"rule": {
"rule_id": "expect_column_values_to_be_between",
"rule_logic_version": "v3.2.0",
"thresholds": {
"column": "gross_earnings_usd",
"min_value": 0,
"max_value": null
}
},
"observed_values": {
"element_count": 1238450,
"unexpected_count": 0,
"unexpected_percent": 0.0
},
"result": "pass",
"exception": null,
"lineage_event_id": "openlineage-uuid-...",
"execution_metadata": {
"runner_identity": "system:swr-ge-runner",
"runtime_seconds": 4.821,
"aws_account": "swr-evidence-prod",
"aws_region": "eu-west-1"
},
"signature": {
"algorithm": "HMAC-SHA256",
"key_id": "alias/swr-evidence-signing-key",
"value": "hex-of-hmac-..."
}
}
Форма failed run:
{
...
"result": "fail",
"exception": {
"incident_id": "DE-1547",
"severity": "SEV-2",
"detected_at": "2026-09-15T06:00:00.523Z",
"compensating_control_activated": null,
"regulatory_clock_started": null
},
...
}
Closure update (связанная запись, не overwrite):
Когда инцидент DE-1547 закрыт, эмит’ится отдельная запись закрытия:
{
"evidence_version": "1.0",
"evidence_id": "ev_closure_de-1547",
"timestamp_utc": "2026-09-16T10:00:00Z",
"type": "incident_closure",
"incident_id": "DE-1547",
"original_evidence_ids": ["ev_2026091506000000_ctl-cde-swr-003-002"],
"closure_status": "resolved",
"closure_timestamp": "2026-09-16T10:00:00Z",
"rca_url": "wiki.swr.internal/post-mortems/de-1547",
"preventive_actions": [
"Добавлен мониторинг replication lag Aurora (CTL-NEW-OPS-012)",
"PR #4528 merged 2026-09-16; soak-период 30 дней"
],
"preventive_soak_complete": false,
"preventive_soak_completes_estimated": "2026-10-16T10:00:00Z",
"signature": {...}
}
Original evidence + closure record оба сохранены в S3 Object Lock; связаны через original_evidence_ids и incident_id. Реконструкция аудита — запрос обеих связанных записей.
Шаг 4 — План развёртывания
Структура AWS-аккаунтов:
swr-prod (существующий операционный):
- GE/Soda runners (Lambdas)
- Snowflake (запрашиваемый evidence_index)
- Looker/Hex дашборды
swr-evidence-prod (новый, выделенный):
- Evidence emitter Lambda
- KMS keys (signing + encryption)
- S3 evidence bucket (Object Lock Compliance Mode 7 лет)
- S3 OpenLineage archive bucket
- MSK Kafka cluster
- Marquez ECS service + Aurora PostgreSQL
swr-logging-prod (существующий):
- CloudTrail logs
- S3 access logs
IAM-роли:
roles:
swr-ge-runner-role:
permissions:
- "lambda:InvokeFunction"
- "snowflake:Read on dl_marts.fct_driver_earnings"
- "sns:Publish openlineage.runs"
- "kms:Encrypt"
deny:
- "s3:DeleteObject"
swr-evidence-emitter-role:
permissions:
- "lambda:InvokeFunction"
- "kms:Sign на alias/swr-evidence-signing-key"
- "kms:Encrypt на alias/swr-evidence-encryption-key"
- "s3:PutObject (с Object Lock metadata) на swr-evidence-prod-cde-evidence"
- "kafka:Produce openlineage.runs"
- "snowflake:Insert на audit.evidence_index"
deny:
- "s3:DeleteObject"
- "s3:PutObjectRetention с retention < 7y"
swr-audit-auditor-role:
permissions:
- "snowflake:Select на audit.evidence_index + audit.incidents"
- "s3:GetObject на swr-evidence-prod-cde-evidence (read-only)"
- "kms:Verify на alias/swr-evidence-signing-key (только verify, не sign)"
- "kafka:Consume:None" # нет Kafka доступа; архивированные события читаются через S3
- "marquez-ui:Read"
deny:
- "s3:PutObject"
- "s3:DeleteObject"
- "snowflake:Insert/Update/Delete"
Networking:
- VPC swr-evidence-prod-vpc (eu-west-1; eu-central-1 DR)
- Private subnets для emitter Lambda + Marquez ECS
- VPC endpoint S3 (нет интернета для пути хранения evidence)
- VPC endpoint KMS
- VPC endpoint Snowflake PrivateLink
- VPC endpoint Kafka (MSK PrivateLink)
Backup + DR:
- Cross-region replication S3 eu-west-1 → eu-central-1 (Object Lock реплицируется)
- Aurora PostgreSQL Marquez nightly backup + PITR 35 дней
- Tiered storage Kafka в S3 7 дней операционно; archive S3 Object Lock постоянно
Шаг 5 — Operations runbook
Ежедневные операции:
-
Проверка целостности evidence — Lambda запускается ежедневно 06:00 UTC; samples 100 случайных evidence-записей из предыдущего дня; верифицирует HMAC-подписи; алерт при mismatch.
-
Здоровье эмиссии OpenLineage — Lambda запускается каждый час; считает события по источнику (dbt / Spark / Airflow); сравнивает с базовой линией; алерт при падении > 30%.
-
Верификация retention — Lambda запускается еженедельно в воскресенье; samples 100 объектов по бакету; запрашивает head-object retention metadata; алерт на объекты с retention < 7 лет.
Реагирование на инциденты:
-
Sev-1 сбой evidence pipeline — ошибки emitter Lambda, сбои S3 upload, сбои KMS signing. PagerDuty page; откат к предыдущей версии Lambda; доступен ручной emit скрипт для backfill evidence < 1ч.
-
Sev-2 пробел эмиссии evidence — падения эмиссии обнаружены (Шаг 5.1); investigate состояние dq engine; backfill из engine output logs (всё ещё доступно S3 raw logs 30 дней).
-
Audit access provisioning — Big 4 senior associate провижен за 2 недели до audit kickoff; доступ истекает через 30 дней после финализации аудита; audit trail логируется.
Review retention:
- Квартально Q4 — Risk Function review’ит метаданные retention; обеспечивает все CDE-классифицированные evidence на минимум 7 лет.
- Годово — Audit Committee проинформирован; legal counsel sign-off на согласование политики retention с регуляторным ландшафтом.
Шаг 6 — Критерии self-check
6 категорий критериев для evidence pipeline; все 6 обязательны pass для audit defensibility.
Критерий 1 — Покрытие IPE-атрибутов
Все 6 атрибутов (M7.1) присутствуют в evidence-схеме:
- Timestamp UTC ISO 8601 trusted source
- Версия / хеш датасета присутствуют
- Rule / Control ID стабильный идентификатор
- Результат + наблюдаемые значения + пороги
- Цепочка обработки исключений (при fail)
- Неизменяемое хранилище + подпись
Критерий 2 — End-to-end восстановимость
Тест retrieval sample:
- Вытащить evidence_id из audit.evidence_index за дату 90 дней назад
- Скачать S3 payload
- Верифицировать HMAC-подпись успешно
- Пересчитать правило (откат снапшота Snowflake + ручной пересчёт)
- Совпадение с ожидаемыми наблюдаемыми значениями
Критерий 3 — Покрытие lineage
- Эмиссия OpenLineage активна per material CDE
- Column-level lineage включён (DIRECT / INDIRECT / MASKING)
- Marquez UI запрашиваем (read-only audit role)
- S3-архив raw событий 7-летний retention
Критерий 4 — Обработка инцидентов
- Тикеты Jira auto-create на каждый DQ fail
- Маршрутизация Sev-1 PagerDuty для tier-1 CDE
- Документы RCA связаны с инцидентами
- Preventive actions отслеживаются через soak
Критерий 5 — Attestation cycle
- Workiva connectors пуллят evidence квартально
- Sign-off Business Owner 3-секционный шаблон (effectiveness + исключения + action items)
- Review 2-й линии Risk Function обязателен
- Электронная подпись захвачена OIDC
- Sign-off архивирован S3 7 лет
Критерий 6 — Отчётность по аудиториям
- Дашборд CDO Office Looker операционно
- Отчёт Audit Committee Hex квартально
- Доступ External Auditor провижен во время audit cycle
- Нет агрегированных метрик в auditor view (raw evidence access)
Шаг 7 — Opt-in инструментарий: docker-compose
Opt-in (не обязательно). Поднять локальное окружение для валидации end-to-end пайплайна локально.
# docker-compose.yml — SwiftRide evidence pipeline local stack
version: '3.9'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: marquez
POSTGRES_USER: marquez
POSTGRES_PASSWORD: marquez
ports: ["5432:5432"]
volumes:
- postgres-data:/var/lib/postgresql/data
marquez:
image: marquezproject/marquez:0.51.0
environment:
MARQUEZ_DB_HOST: postgres
MARQUEZ_DB_PORT: 5432
MARQUEZ_DB_USER: marquez
MARQUEZ_DB_PASSWORD: marquez
ports: ["5000:5000"]
depends_on: [postgres]
marquez-web:
image: marquezproject/marquez-web:0.51.0
environment:
MARQUEZ_HOST: marquez
MARQUEZ_PORT: 5000
ports: ["3000:3000"]
depends_on: [marquez]
kafka:
image: confluentinc/cp-kafka:7.6.0
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
depends_on: [zookeeper]
ports: ["9092:9092"]
zookeeper:
image: confluentinc/cp-zookeeper:7.6.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
minio:
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: swr-evidence
MINIO_ROOT_PASSWORD: swr-evidence-local-dev
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio-data:/data
ge-runner:
build: ./ge-runner
environment:
OPENLINEAGE_URL: http://marquez:5000
OPENLINEAGE_NAMESPACE: swr.local
EVIDENCE_S3_ENDPOINT: http://minio:9000
EVIDENCE_S3_BUCKET: swr-evidence-prod-cde-evidence
depends_on: [marquez, kafka, minio]
volumes:
- ./expectations:/expectations
evidence-emitter:
build: ./evidence-emitter
environment:
KAFKA_BROKER: kafka:9092
EVIDENCE_S3_ENDPOINT: http://minio:9000
EVIDENCE_S3_BUCKET: swr-evidence-prod-cde-evidence
HMAC_KEY_LOCAL: local-dev-key-not-for-production
depends_on: [kafka, minio]
jira-mock:
image: wiremock/wiremock:3.13.0
command: --port 8080
ports: ["8080:8080"]
volumes:
- ./jira-mock-mappings:/home/wiremock/mappings
volumes:
postgres-data:
minio-data:
Локальный workflow разработки:
# Запустить стек
docker-compose up -d
# Инициализировать MinIO bucket с Object Lock (proxy для S3 Compliance Mode)
mc alias set swr-local http://localhost:9000 swr-evidence swr-evidence-local-dev
mc mb --with-lock swr-local/swr-evidence-prod-cde-evidence
# Инициализировать namespaces Marquez
curl -X POST http://localhost:5000/api/v1/namespaces/swr.local \
-H "Content-Type: application/json" \
-d '{"ownerName": "swr-data-team"}'
# Запустить GE checkpoint вручную
docker-compose exec ge-runner python -m run_checkpoint \
--suite cde-swr-003 \
--dataset fct_driver_earnings_sample
# Проверить, что evidence сохранён
mc ls swr-local/swr-evidence-prod-cde-evidence/
# Проверить lineage Marquez
open http://localhost:3000/
Validation checklist:
- GE Checkpoint производит validation_result.json
- Evidence emitter нормализует к evidence-schema-v1
- HMAC-подпись применена (local-dev ключ для тестирования)
- S3 upload через MinIO с Object Lock
- Событие OpenLineage emit’нуто в Marquez
- Marquez UI показывает job + run + lineage
- Тикет Jira создан при fail (через wiremock)
- Snowflake INSERT воспроизводим (локальный Snowflake mock или ClickHouse substitute)
Типичные ошибки — детально
Ошибка 1 — Ротация KMS-ключа не запланирована
Паттерн: KMS signing key создан; ротация не запланирована.
Impact: Долгоживущий ключ — impact компрометации 7+ лет, если ключ exposed; deficiency аудита PCAOB / SOC 2.
Исправление: Запланировать ротацию 90 дней (KMS auto-rotation); сохранить исторические версии ключа для верификации старых подписей.
Ошибка 2 — S3 Object Lock Governance Mode (не Compliance)
Паттерн: Governance Mode, чтобы разрешить «occasional cleanup».
Impact: Root-аккаунт может обойти (s3:BypassGovernanceRetention); целостность evidence не WORM-гарантирована.
Исправление: Дефолт Compliance Mode; legal hold для критических периодов; легитимная очистка затем legal review согласно AWS guidance.
Ошибка 3 — Lambda timeout для большого evidence
Паттерн: Дефолтный Lambda 3-секундный timeout; эмиссия evidence с большими архивами input_state выходит по таймауту.
Impact: Evidence иногда не emit’ится; пробелы в audit trail; тихие сбои.
Исправление: Lambda timeout 300с для evidence-emitter; alarm на ошибки Lambda > 0.1%; backup S3 PutObject через step function fallback.
Ошибка 4 — Marquez как первичный evidence
Паттерн: Marquez PostgreSQL = хранилище evidence; nightly Aurora backup retention 35 дней.
Impact: PostgreSQL изменяем; Aurora PITR ограничен; 7-летний SOX retention невозможен; первичный evidence под риском при сбое Marquez.
Исправление: S3 raw OpenLineage event archive параллельно с ingestion Marquez (отдельный Kafka consumer); Marquez пересобирается из архива при компрометации.
Ошибка 5 — Snowflake-таблица = первичный evidence
Паттерн: audit.evidence_history Snowflake-таблица = первичная; «Time Travel + permanent table».
Impact: Time Travel максимум 90 дней; permanent table изменяема; DBA с MODIFY может переписать; не SOX-grade.
Исправление: Snowflake-таблица = только вторичный индекс; первичный evidence S3 Object Lock; обновления индекса через stored procedures с RBAC.
Ошибка 6 — Webhook chain неполный
Паттерн: Webhook Jira только к S3; closure metadata не пропагируется в Snowflake-индекс.
Impact: Audit-запрос «показать evidence + closure status» падает — данные разделены между системами.
Исправление: Closure event эмит’ится отдельно; S3 сохраняет; Snowflake audit.evidence_index обновляет closure metadata атомарно; cross-reference индекс полный.
Ошибка 7 — IAM разрешает s3:DeleteObject
Паттерн: Operations роль с DeleteObject «для cleanup utility».
Impact: Object Lock предотвращает удаление того, что в пределах retention; но объекты Object Lock без retention можно удалить; mishaps возможны.
Исправление: Default-deny s3:DeleteObject для evidence-бакетов; явный allow только break-glass scenarios.
Ошибка 8 — Размер выборки evidence недостаточен
Паттерн: Audit cycle samples 5 evidence-записей per control; аудитор ожидает ≥ 25.
Impact: Недостаточная гарантия качества evidence; аудитор расширяет выборку при concerns; timeline + стоимость аудита увеличивается.
Исправление: Pre-audit dry-run (M7.5) — Internal Audit samples ≥ 25 per material control; идентифицирует issues рано.
Мост к M8 (SDLC integration)
Evidence pipeline M7 установлен. M8 — операционная модель + интеграция SDLC. Ключевые мосты:
-
PR-time gating — schema gating согласно M5.8 + impact analysis; эмиссия evidence согласно M7.2; SDLC интегрирует ВСЕ контроли внутри developer workflow.
-
Онбординг нового CDE — engineering team добавляет CDE; авто-провижинг evidence pipeline через хук CDE registry (M4.5); zero-touch для сбора evidence. M8 детализирует автоматизацию.
-
Зрелость операционной модели — квартальные ретро включают здоровье evidence pipeline; итерируем.
-
Capstone (M9) — полный запуск программы; модель зрелости T+18M; готовность pre-IPO.
Резюме
- Evidence pipeline = синтез M7.1-M7.6: IPE-атрибуты + сбор + lineage + управление замечаниями + attestation + дашборды.
- Архитектурное решение — первичный engine (GE 1.17.1 для SwiftRide); supplementary engines добавлены для конкретных паттернов (Soda contracts; Anomalo anomaly detection).
- Список компонентов охватывает 4 стадии × ~20 различных AWS / SaaS ресурсов; чёткое владение по модели Three Lines.
- Evidence schema v1 обязательная нормализация — IPE-атрибуты захвачены в структурированном JSON; HMAC-подпись; неизменяемый S3 Object Lock Compliance Mode.
- Развёртывание — отдельный AWS-аккаунт swr-evidence-prod; cross-region replication; жёсткий IAM с default-deny delete; VPC endpoints.
- Operations runbook — ежедневные проверки целостности, ежечасное здоровье эмиссии, еженедельная верификация retention.
- Self-check — 6 категорий критериев все обязательны pass: покрытие IPE + восстановимость + lineage + обработка инцидентов + цикл attestation + отчётность по аудиториям.
- Opt-in docker-compose — окружение локальной разработки; MinIO заменяет S3 Object Lock; Marquez + Kafka + Wiremock Jira; валидация end-to-end до развёртывания в AWS.
- Типичные ошибки — отсутствие ротации KMS; Governance Mode vs Compliance; Lambda timeout; Marquez как первичный; Snowflake-таблица как первичная; webhook chain неполный; IAM delete permissions; недостаточный размер выборки.
M7 закрывает фундамент evidence + attestation. M8 — операционная модель + интеграция SDLC; встраивает контроли внутрь developer workflow + автоматизирует онбординг; модель зрелости T+15M для готовности SOX dry-run.
Great Expectations 1.17.1 — checkpoint и emit Observability пайплайна — мониторинг health evidence системы