152-ФЗ и AI: персональные данные в эпоху нейросетей

Как 152-ФЗ влияет на AI-продукты — обучение моделей, RAG, чат-боты, согласие и локализация данных

Вы строите AI-продукт для российского рынка — чат-бот, RAG-систему, сервис аналитики. Пользователи вводят свои имена, загружают документы, задают вопросы. Всё это — персональные данные, и на них распространяется 152-ФЗ. Нарушения — это не абстрактный риск: с 2025 года штрафы выросли до 15 млн рублей за утечки и до 3% годовой выручки при повторных нарушениях. В этой статье — практическое руководство: что считается персональными данными в контексте AI, когда нужно согласие, как локализовать данные и что делать с правами пользователей.

Представьте, что персональные данные — это чужие вещи, которые вам дали на хранение. Вы не можете просто взять их и отдать кому-то ещё, использовать без разрешения или вывезти за границу. 152-ФЗ — это правила, которые объясняют, что именно вы можете делать с чужими вещами, как их хранить и когда обязаны вернуть. AI-продукт, который работает с данными пользователей, — это по сути камера хранения, и к ней предъявляются конкретные требования.

Основы 152-ФЗ для AI-продуктов

152-ФЗ — федеральный закон «О персональных данных», действующий с 2006 года и существенно ужесточённый в 2025-м. Он регулирует любую обработку персональных данных (ПД) — сбор, хранение, использование, передачу и удаление. Если ваш AI-продукт хоть как-то взаимодействует с данными пользователей, этот закон касается вас напрямую.

Что считается персональными данными

Персональные данные — это любая информация, по которой можно прямо или косвенно определить конкретного человека:

КатегорияПримерыВстречается в AI
Обычные ПДФИО, телефон, email, адресФормы регистрации, чат-боты
Специальные ПДЗдоровье, убеждения, судимостиМедицинские AI-ассистенты
Биометрические ПДГолос, фото лица, отпечаткиVoice AI, распознавание лиц

Ключевые требования для AI

  1. Согласие — нужно получить у пользователя до начала обработки ПД. С 1 сентября 2025 года — только отдельным документом, не частью пользовательского соглашения
  2. Локализация — ПД граждан России хранятся на серверах в РФ. С 1 июля 2025 года хранение в зарубежных базах данных запрещено
  3. Права пользователей — доступ к своим данным, исправление, удаление, отзыв согласия
  4. Уведомление Роскомнадзора — оператор ПД обязан уведомить регулятора до начала обработки данных

Штрафы (с 30 мая 2025)

НарушениеШтраф для юрлица
Обработка без согласия300 000 — 700 000 руб.
Нарушение локализации (первичное)2 000 000 — 6 000 000 руб.
Нарушение локализации (повторное)до 18 000 000 руб.
Утечка 1-10 тыс. записейдо 5 000 000 руб.
Утечка 100 тыс.+ записейдо 15 000 000 руб.
Повторные нарушениядо 3% годовой выручки
С 30 мая 2025 года введены оборотные штрафы — до 3% годовой выручки компании за повторные нарушения. Это значит, что для крупного бизнеса штраф может измеряться сотнями миллионов рублей.

Что считается персональными данными

152-ФЗ определяет персональные данные широко: это любая информация, относящаяся к прямо или косвенно определённому или определяемому физическому лицу (субъекту ПД). Для AI-продуктов это означает, что даже неочевидные данные могут быть персональными.

Три категории ПД

Обычные персональные данные — ФИО, дата рождения, телефон, email, адрес, ИНН, СНИЛС. Это самый распространённый тип данных, с которым работают AI-продукты: формы регистрации, профили пользователей, история переписки с чат-ботом.

Специальные персональные данные — сведения о здоровье, расовой и национальной принадлежности, политических взглядах, религиозных убеждениях, судимости. Обработка таких данных требует отдельного письменного согласия. AI-продукты в медицине, HR и юридической сфере часто работают именно с этой категорией.

Биометрические персональные данные — сведения о физиологических и биологических особенностях человека, по которым можно установить его личность: фотография лица, запись голоса, отпечатки пальцев, рисунок радужки глаза. Voice AI, системы распознавания лиц, биометрическая аутентификация — всё это работа с биометрическими ПД, которая регулируется особенно строго.

Если данные анонимизированы так, что по ним невозможно определить конкретного человека, — они не являются персональными данными и не подпадают под 152-ФЗ. Но анонимизация должна быть необратимой: если по совокупности данных можно восстановить личность, это по-прежнему ПД.

AI-специфичные сценарии

Обучение моделей на пользовательских данных

Если вы обучаете (fine-tune) модель на данных, содержащих ПД, — это обработка персональных данных. Необходимо:

  • Получить согласие субъектов на обработку ПД для целей обучения модели
  • Либо обезличить данные до обучения — так, чтобы восстановить личность было невозможно
  • Хранить обучающие данные на серверах в РФ
Даже если фотография или текст в социальной сети видны всем, использовать их для обучения нейросети без отдельного согласия субъекта — нарушение 152-ФЗ. «Общедоступность» не означает «свободное использование».

RAG с пользовательскими документами

RAG-система (Retrieval-Augmented Generation), в которой пользователь загружает свои документы, — это обработка ПД, если документы содержат персональные данные. Типичные примеры: корпоративная база знаний с упоминанием сотрудников, юридические документы с именами сторон, медицинские записи.

Требования:

  • Согласие на обработку ПД (отдельный документ с 1 сентября 2025)
  • Хранение документов и векторной базы на серверах в РФ
  • Возможность удаления данных пользователя по запросу
  • Не передавать документы с ПД внешним API за пределами РФ

Чат-боты с историей переписки

Чат-бот, сохраняющий историю разговоров, — это оператор ПД, если пользователи сообщают свои имена, контакты, медицинские симптомы, финансовую информацию и другие данные, по которым их можно идентифицировать.

Нарушает 152-ФЗ
Чат-бот сохраняет всю историю переписки на серверах OpenAI в США. Пользователи вводят ФИО, номера договоров, описания симптомов. Согласие на обработку ПД встроено в пользовательское соглашение общим пунктом. Нет механизма удаления истории.
Соответствует 152-ФЗ
Чат-бот хранит историю на серверах в РФ. Перед отправкой в LLM-API данные анонимизируются — ФИО заменяются на идентификаторы. Согласие на обработку ПД оформлено отдельным документом. Пользователь может удалить историю в один клик.

Согласие на обработку ПД

Когда согласие необходимо

Согласие необходимо для любой обработки ПД, за исключением случаев, прямо предусмотренных законом (исполнение договора, защита жизненно важных интересов, законные интересы оператора и др.).

Для AI-продуктов согласие нужно практически всегда:

  • Регистрация пользователя с указанием ФИО и email
  • Сохранение истории чата
  • Загрузка документов с ПД
  • Обучение модели на пользовательских данных
  • Биометрическая идентификация

Исключения: когда согласие не нужно

Согласие не требуется, если:

  • Обработка ПД необходима для исполнения договора с субъектом (например, доставка заказа по адресу)
  • Данные обрабатываются в статистических или исследовательских целях при условии обязательного обезличивания
  • Обработка необходима для защиты жизненно важных интересов субъекта
  • Данные сделаны общедоступными самим субъектом (но это не распространяется на обучение моделей)
Даже если вы считаете, что попадаете под исключение, — получите согласие. Это проще, чем доказывать Роскомнадзору, что исключение применимо к вашему конкретному случаю.

Плюсы

  • Полная локализация устраняет риски трансграничной передачи
  • Обезличивание позволяет использовать лучшие зарубежные модели
  • Комбинированный подход: чувствительные данные локально, обезличенные — в облако

Минусы

  • Полная локализация ограничивает выбор моделей и увеличивает стоимость
  • Обезличивание не всегда возможно (контекст может восстановить личность)
  • Комбинированный подход сложнее в реализации и аудите

Локализация данных

Что требует закон

С 1 июля 2025 года действует ужесточённая редакция требований к локализации: запись, систематизация, накопление, хранение, уточнение и извлечение ПД граждан России должны осуществляться с использованием баз данных, расположенных на территории РФ.

Ранее допускалось хранение копий ПД за рубежом при условии первичной локализации в РФ. Новая редакция ставит этот подход под сомнение — регуляторы склоняются к тому, что хранение в зарубежных базах данных запрещено полностью.

Что это значит для AI-продуктов

КомпонентТребование
База пользователейСерверы в РФ
Векторная база (RAG)Серверы в РФ, если содержит ПД
История чатаСерверы в РФ
Обучающие данные (с ПД)Серверы в РФ
Логи запросов к LLM (с ПД)Серверы в РФ

Облачные провайдеры

Для размещения AI-инфраструктуры в России можно использовать:

  • Yandex Cloud — GPU-инстансы, managed Kubernetes, YandexGPT API
  • Cloud.ru (бывш. SberCloud) — GPU, ML-платформа, GigaChat API
  • VK Cloud — GPU, Kubernetes, S3-хранилище
  • Selectel — выделенные GPU-серверы, Kubernetes
  • МТС Cloud — облачная инфраструктура, GPU
Передача ПД в API OpenAI, Anthropic, Google — это трансграничная передача данных. Если в запросе к API содержатся ПД пользователей, это может нарушать требования локализации. Решения: использовать российские LLM (YandexGPT, GigaChat), анонимизировать данные перед отправкой или развернуть open-source модель на серверах в РФ.

Права пользователей

152-ФЗ предоставляет субъектам ПД конкретные права, которые ваш AI-продукт обязан реализовать:

Право на доступ — пользователь может запросить информацию о том, какие его ПД вы обрабатываете, с какой целью, кому передаёте. Ответить нужно в течение 10 рабочих дней.

Право на исправление — если ПД неточные или устарели, пользователь вправе потребовать их уточнения. Оператор обязан внести изменения или уничтожить данные.

Право на удаление — пользователь может потребовать удаления своих ПД. Оператор обязан прекратить обработку и удалить данные в течение 30 дней.

Право на отзыв согласия — пользователь может отозвать согласие в любой момент. Форма отзыва — произвольная. После получения отзыва оператор обязан прекратить обработку и уничтожить ПД в течение 30 дней (если нет иных законных оснований для обработки).

Чеклист: ваш AI-продукт и 152-ФЗ

Ошибка 1: Согласие на обработку ПД «зашито» в пользовательское соглашение одним пунктом — штраф 300-700 тыс. руб.
Ошибка 2: Данные пользователей из России хранятся на серверах за рубежом — штраф 2-6 млн руб. (первичное), до 18 млн руб. (повторное)
Ошибка 3: Нет механизма удаления ПД по запросу пользователя — штраф до 100 тыс. руб., плюс предписание Роскомнадзора
Ошибка 4: Утечка базы пользователей — штраф до 15 млн руб. за утечку 100 тыс.+ записей, при повторе — до 3% годовой выручки

Паттерны реализации согласия

Сбор и хранение согласий

// Схема хранения согласий
interface ConsentRecord {
  id: string
  userId: string
  purpose: ConsentPurpose
  version: string           // версия документа согласия
  grantedAt: string         // ISO 8601
  revokedAt: string | null
  method: 'checkbox' | 'signature' | 'api'
  ipAddress: string         // для подтверждения
  userAgent: string
}

type ConsentPurpose =
  | 'chat_history'          // хранение истории чата
  | 'model_training'        // обучение модели
  | 'personalization'       // персонализация ответов
  | 'analytics'             // аналитика использования
  | 'document_processing'   // обработка загруженных документов

// API: получение согласия
app.post('/api/consent', async (req, res) => {
  const { userId, purpose, version } = req.body

  // Проверяем, что пользователь ещё не дал согласие на эту цель
  const existing = await db.consent.findFirst({
    where: { userId, purpose, revokedAt: null },
  })
  if (existing) return res.json({ already: true })

  const record = await db.consent.create({
    data: {
      userId,
      purpose,
      version,
      grantedAt: new Date().toISOString(),
      method: 'checkbox',
      ipAddress: req.ip,
      userAgent: req.headers['user-agent'],
    },
  })

  return res.json({ consent: record })
})

// API: отзыв согласия
app.post('/api/consent/revoke', async (req, res) => {
  const { userId, purpose } = req.body

  await db.consent.updateMany({
    where: { userId, purpose, revokedAt: null },
    data: { revokedAt: new Date().toISOString() },
  })

  // Запускаем удаление данных, связанных с этой целью
  await scheduleDataDeletion(userId, purpose)

  return res.json({ revoked: true })
})

Проверка согласия перед обработкой

// Middleware: проверка наличия согласия
async function requireConsent(purpose: ConsentPurpose) {
  return async (req: Request, res: Response, next: NextFunction) => {
    const userId = req.user?.id
    if (!userId) return res.status(401).json({ error: 'Unauthorized' })

    const consent = await db.consent.findFirst({
      where: { userId, purpose, revokedAt: null },
    })

    if (!consent) {
      return res.status(403).json({
        error: 'consent_required',
        purpose,
        consentUrl: `/consent?purpose=${purpose}`,
      })
    }

    next()
  }
}

// Использование
app.post('/api/chat',
  requireConsent('chat_history'),
  async (req, res) => {
    // Обработка запроса к чат-боту
  },
)

app.post('/api/documents/upload',
  requireConsent('document_processing'),
  async (req, res) => {
    // Загрузка документа в RAG
  },
)

Анонимизация данных

С 1 сентября 2025 года вступили в силу новые требования к обезличиванию ПД (Постановление Правительства № 1154 от 01.08.2025). Роскомнадзор утвердил пять методов обезличивания: введение идентификаторов, перемешивание, декомпозиция, обобщение, преобразование.

Анонимизация перед отправкой в LLM API

// Анонимизация ПД в тексте перед отправкой в внешний LLM API
interface AnonymizationMap {
  original: string
  replacement: string
  type: 'name' | 'phone' | 'email' | 'inn' | 'snils' | 'passport' | 'address'
}

function anonymizeText(text: string): {
  anonymized: string
  map: AnonymizationMap[]
} {
  const map: AnonymizationMap[] = []
  let result = text

  // ФИО (упрощённый паттерн)
  const namePattern = /[А-ЯЁ][а-яё]+\s+[А-ЯЁ][а-яё]+\s+[А-ЯЁ][а-яё]+/g
  result = result.replace(namePattern, (match) => {
    const id = `[PERSON_${map.length + 1}]`
    map.push({ original: match, replacement: id, type: 'name' })
    return id
  })

  // Телефоны
  const phonePattern = /(\+7|8)[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}/g
  result = result.replace(phonePattern, (match) => {
    const id = `[PHONE_${map.length + 1}]`
    map.push({ original: match, replacement: id, type: 'phone' })
    return id
  })

  // Email
  const emailPattern = /[\w.-]+@[\w.-]+\.\w{2,}/g
  result = result.replace(emailPattern, (match) => {
    const id = `[EMAIL_${map.length + 1}]`
    map.push({ original: match, replacement: id, type: 'email' })
    return id
  })

  // ИНН (10 или 12 цифр)
  // NB: упрощённый паттерн — будет давать false positives на любых 10-12-значных числах.
  // В продакшене следует валидировать контрольную сумму ИНН.
  const innPattern = /\b\d{10}(\d{2})?\b/g
  result = result.replace(innPattern, (match) => {
    const id = `[INN_${map.length + 1}]`
    map.push({ original: match, replacement: id, type: 'inn' })
    return id
  })

  return { anonymized: result, map }
}

// Деанонимизация ответа
function deanonymize(text: string, map: AnonymizationMap[]): string {
  let result = text
  for (const entry of map) {
    result = result.replaceAll(entry.replacement, entry.original)
  }
  return result
}

// Использование с внешним LLM API
async function safeLLMCall(userPrompt: string): Promise<string> {
  const { anonymized, map } = anonymizeText(userPrompt)

  const response = await openai.chat.completions.create({
    model: 'gpt-4o',
    messages: [{ role: 'user', content: anonymized }],
  })

  const rawAnswer = response.choices[0].message.content ?? ''

  // Карту анонимизации храним только в памяти, не логируем
  return deanonymize(rawAnswer, map)
}
Важно: замена ПД на идентификаторы (как в примере выше) — это обезличивание (pseudonymization), а не анонимизация. Если у вас есть карта соответствия, данные можно деанонимизировать, и формально они остаются ПД. Для полной анонимизации карту соответствия нужно уничтожить, а в обезличенных данных не должно быть возможности восстановить личность.

Локализация серверов

Варианты архитектуры

ВариантПлюсыМинусыСтоимость
Yandex Cloud + YandexGPTПолная локализация, нет рисков 152-ФЗПривязка к экосистеме Яндекса, ограниченный выбор моделей$$
Российский облачный провайдер + self-hosted LLMПолный контроль, любая open-source модельНужна экспертиза в MLOps, дорогие GPU$$$
Российский сервер + зарубежный API с анонимизациейДоступ к лучшим моделям, данные в РФСложность анонимизации, риск при ошибках$$
Гибрид: чувствительные данные в РФ, некритичные — в облакеБаланс цены и complianceСложная архитектура$$

Пример: Nginx прокси для разделения трафика

# Все ПД остаются на российском сервере
# Анонимизированные запросы к LLM — через прокси

upstream russian_backend {
    server 10.0.0.1:3000;  # Сервер приложения в РФ
}

server {
    listen 443 ssl;
    server_name api.myaiproduct.ru;

    # Все API-запросы с ПД — на российский сервер
    location /api/ {
        proxy_pass http://russian_backend;
    }

    # Статика, публичный контент — можно CDN
    location /static/ {
        proxy_pass http://cdn.myaiproduct.ru;
    }
}

Аудит-логирование

Для подтверждения compliance при проверках Роскомнадзора ведите журнал операций с ПД:

// Аудит-лог операций с персональными данными
interface PDAuditLog {
  id: string
  timestamp: string         // ISO 8601
  action: PDAuditAction
  userId: string            // субъект ПД
  operatorId: string        // кто выполнил действие
  purpose: ConsentPurpose
  details: string           // описание операции
  dataCategories: string[]  // ['name', 'email', 'phone']
  legalBasis: 'consent' | 'contract' | 'legal_obligation' | 'legitimate_interest'
}

type PDAuditAction =
  | 'collect'       // сбор ПД
  | 'store'         // сохранение
  | 'process'       // обработка (включая отправку в LLM)
  | 'transfer'      // передача третьим лицам
  | 'anonymize'     // обезличивание
  | 'delete'        // удаление
  | 'access'        // доступ к ПД (запрос субъекта)
  | 'consent_grant' // получение согласия
  | 'consent_revoke'// отзыв согласия

async function logPDAction(entry: Omit<PDAuditLog, 'id' | 'timestamp'>) {
  await db.pdAuditLog.create({
    data: {
      ...entry,
      timestamp: new Date().toISOString(),
    },
  })
}

// Пример: логирование при отправке в LLM API
async function processWithLLM(userId: string, prompt: string) {
  const { anonymized, map } = anonymizeText(prompt)

  await logPDAction({
    action: 'anonymize',
    userId,
    operatorId: 'system',
    purpose: 'chat_history',
    details: `Anonymized ${map.length} PD entities before LLM call`,
    dataCategories: map.map(m => m.type),
    legalBasis: 'consent',
  })

  const response = await callLLM(anonymized)

  await logPDAction({
    action: 'process',
    userId,
    operatorId: 'system',
    purpose: 'chat_history',
    details: 'LLM API call with anonymized data',
    dataCategories: [],
    legalBasis: 'consent',
  })

  return deanonymize(response, map)
}

API удаления данных пользователя

По запросу субъекта ПД (или при отзыве согласия) все данные должны быть удалены в течение 30 дней:

// Полное удаление данных пользователя
async function deleteUserData(userId: string, reason: 'revoke' | 'request' | 'expiry') {
  const deletionId = crypto.randomUUID()

  await logPDAction({
    action: 'delete',
    userId,
    operatorId: 'system',
    purpose: 'chat_history',
    details: `Data deletion initiated, reason: ${reason}, deletionId: ${deletionId}`,
    dataCategories: ['all'],
    legalBasis: reason === 'revoke' ? 'consent' : 'legal_obligation',
  })

  // 1. Удаляем историю чата
  await db.chatMessage.deleteMany({ where: { userId } })

  // 2. Удаляем загруженные документы и их чанки из векторной БД
  const documents = await db.document.findMany({ where: { userId } })
  for (const doc of documents) {
    await vectorDb.deleteByDocumentId(doc.id)
    await storage.delete(doc.storagePath)
  }
  await db.document.deleteMany({ where: { userId } })

  // 3. Удаляем профиль пользователя
  await db.userProfile.delete({ where: { id: userId } })

  // 4. Помечаем согласия как отозванные
  await db.consent.updateMany({
    where: { userId, revokedAt: null },
    data: { revokedAt: new Date().toISOString() },
  })

  // 5. Аудит-запись о завершении удаления
  // Используем deletionId вместо userId, т.к. данные удалены
  await db.pdAuditLog.create({
    data: {
      action: 'delete',
      userId: `deleted:${deletionId}`,
      operatorId: 'system',
      purpose: 'chat_history',
      details: `All PD deleted for deletion ${deletionId}`,
      dataCategories: ['all'],
      legalBasis: 'legal_obligation',
      timestamp: new Date().toISOString(),
    },
  })

  return { deletionId, completedAt: new Date().toISOString() }
}
Аудит-логи хранятся дольше самих данных — они нужны для подтверждения compliance. Но в логах не должно быть сырых ПД — используйте хэши и идентификаторы. После удаления данных пользователя замените userId на deleted:{deletionId} в аудит-записях.

Связанные статьи

Проверьте себя

1. С какого момента согласие на обработку ПД должно быть оформлено отдельным документом (не частью пользовательского соглашения)?

2. Можно ли отправлять персональные данные пользователей из России в API зарубежного LLM-сервиса (OpenAI, Anthropic)?

3. В какой срок оператор обязан удалить персональные данные после отзыва согласия пользователем?