Перейти к содержанию
Learning Platform
Глоссарий Troubleshooting
Урок 07.05 · 25 мин
Продвинутый
Policy DesignRBAC ValidationPolicy Testing

Проектирование RBAC-политик

Введение

Внедрить RBAC технически — просто: CREATE ROLE, GRANT, REVOKE. Спроектировать правильную RBAC-модель — сложно. Плохо спроектированная модель ведёт к role explosion, over-privileged пользователям и compliance-нарушениям. В этом уроке мы спроектируем production RBAC-политику для FinSecure Bank с нуля.

Сценарий: аудит FinSecure

Сценарий: FinSecure Bank (ФинСекьюр Банк)

Внутренний аудит безопасности выявил критическую проблему: 47% пользователей имеют избыточные привилегии (over-privileged access). Конкретные находки:

  • 8 аналитиков имеют запись в production-таблицы (нужен только SELECT)
  • 3 инженера имеют admin-доступ к Oracle core banking (нужен только staging)
  • 12 пользователей имеют роли, созданные “временно” 2 года назад, но никогда не отозванные
  • Существует 34 пользовательских роли, из которых 19 дублируют друг друга

Data Council поручил команде безопасности разработать новую RBAC-модель с нуля.

Шаг 1: инвентаризация ресурсов

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

РесурсТипКлассификацияВладелец
core_banking.transactionsOracle таблицаRestrictedCore Banking Team
core_banking.customersOracle таблицаConfidential (PII)Core Banking Team
analytics.reportsSnowflake viewInternalBI Team
staging.etl_tempPostgreSQL схемаInternalData Engineering
audit.access_logОтдельная БДRestrictedSecurity Team
ml.credit_scoringМодель + данныеConfidentialML Team

Шаг 2: определение ролей по функциям

Роли определяются по функциям, а не по отделам или проектам:

-- Базовые роли (leaf roles)
CREATE ROLE fs_viewer NOLOGIN;       -- только чтение агрегатов
CREATE ROLE fs_analyst NOLOGIN;      -- чтение + аналитика
CREATE ROLE fs_engineer NOLOGIN;     -- чтение + запись staging
CREATE ROLE fs_steward NOLOGIN;      -- чтение + маскированные PII
CREATE ROLE fs_auditor NOLOGIN;      -- только audit log
CREATE ROLE fs_dba NOLOGIN;          -- администрирование БД

-- Иерархия
GRANT fs_viewer TO fs_analyst;       -- analyst включает viewer
GRANT fs_viewer TO fs_engineer;      -- engineer включает viewer

Шаг 3: матрица разрешений

FinSecure: новая RBAC-матрица (после аудита)
Транзакции (aggr)Клиенты PIIStagingAudit LogML ModelsSystem Config
fs_viewer
Allow
Deny
Deny
Deny
Deny
Deny
fs_analyst
Allow
Deny
Deny
Deny
Deny
Deny
fs_engineer
Allow
Deny
Allow
Deny
Deny
Deny
fs_steward
Allow
Conditional
Deny
Deny
Deny
Deny
fs_auditor
Deny
Deny
Deny
Allow
Deny
Deny
fs_dba
Allow
Allow
Allow
Allow
Deny
Allow

Шаг 4: документирование политики

FinSecure RBAC Policy v2.0
Version: 2.0Owner: CISO + CDOStatus: Approved by Data CouncilEffective: 2025-01-15Review: Quarterly
1. Принцип наименьших привилегий
Каждый пользователь получает минимальный набор прав, необходимый для выполнения функций. Избыточные права должны быть отозваны в течение 24 часов после обнаружения.
2. Разделение обязанностей
Один пользователь не может совмещать роли fs_engineer и fs_auditor. DBA-операции на production требуют двойного одобрения (CISO + CDO).
3. Ротация доступа
Временные роли автоматически отзываются через 30 дней. Все роли пересматриваются ежеквартально. Неиспользуемые роли (0 запросов за 90 дней) деактивируются.
4. Логирование
Все операции GRANT/REVOKE логируются в audit_log. Доступ к PII-столбцам логируется на уровне запроса (query-level audit).
Проверка знанийKnowledge check
Почему в политике FinSecure указано, что один пользователь не может совмещать роли fs_engineer и fs_auditor?
ОтветAnswer
Это принцип separation of duties (разделение обязанностей). Если инженер одновременно является аудитором, он может: (1) изменить данные (как engineer) и (2) проверить свои же изменения (как auditor) -- конфликт интересов. В банковской сфере это критически важно: человек, создающий транзакцию, не может её подтверждать. Аналогично, человек, изменяющий данные, не может аудировать свои изменения. PCI DSS и регулятор ЦБ РФ требуют separation of duties.

Шаг 5: валидация и тестирование

Автоматическая валидация политики

def validate_rbac_policy(roles, permissions, constraints):
    """Валидация RBAC-политики на типичные проблемы."""
    issues = []

    # Проверка 1: Role explosion (больше 2x пользователей)
    if len(roles) > len(set(r['function'] for r in roles)) * 2:
        issues.append("WARNING: Potential role explosion detected")

    # Проверка 2: Over-privileged roles
    for role in roles:
        if role.get('all_schemas_access'):
            issues.append(f"CRITICAL: {role['name']} has ALL SCHEMAS access")

    # Проверка 3: Separation of duties violations
    for constraint in constraints.get('incompatible_roles', []):
        role_a, role_b = constraint
        for user in get_users():
            if has_role(user, role_a) and has_role(user, role_b):
                issues.append(
                    f"VIOLATION: {user} has incompatible roles "
                    f"{role_a} and {role_b}"
                )

    # Проверка 4: Stale roles (не использовались > 90 дней)
    for role in roles:
        if role.get('last_used_days_ago', 0) > 90:
            issues.append(
                f"STALE: {role['name']} not used in "
                f"{role['last_used_days_ago']} days"
            )

    return issues

Предотвращение role explosion

Role explosion — ситуация, когда количество ролей растёт неконтролируемо. Признаки:

ИндикаторПорогДействие
Количество ролей > 2x пользователей> 60 ролей для 30 пользователейАудит и консолидация
> 50% ролей назначены одному пользователюРоль = пользовательПересмотр модели
Дублирующиеся permissions> 30% overlapОбъединение ролей
Роли с одинаковыми permissions100% overlapУдаление дубликата

В FinSecure до аудита было 34 роли для 30 пользователей — типичный role explosion. После редизайна: 6 базовых ролей + 2 составные = 8 ролей. Сокращение на 76%.

Проверка знанийKnowledge check
FinSecure сократила количество ролей с 34 до 8. Какие риски возникают при таком резком сокращении?
ОтветAnswer
Три основных риска: (1) Потеря fine-grained контроля -- если 34 роли были созданы для реальных бизнес-потребностей, 8 ролей могут быть слишком грубыми, вынуждая давать избыточные права. (2) Resistance to change -- пользователи привыкли к определённому уровню доступа, сокращение вызовет жалобы. (3) Operational disruption -- ETL-пайплайны и сервисы могут сломаться, если их service accounts потеряют нужные permissions. Решение: поэтапный rollout с мониторингом DENIED-запросов в audit log, period of grace для выявления проблем.

Итоги

  • Проектирование RBAC начинается с инвентаризации ресурсов и определения ролей по функциям
  • Матрица разрешений визуализирует связь ролей и ресурсов — базовый артефакт policy review
  • Документирование политики включает: принцип least privilege, separation of duties, ротацию, логирование
  • Валидация автоматизирует проверку: role explosion, over-privileged, stale roles, SoD violations
  • Role explosion — основная проблема RBAC; предотвращается мониторингом метрик и периодической консолидацией
  • FinSecure сократила 34 роли до 8 после аудита, обнаружившего 47% over-privileged пользователей

В следующем уроке мы рассмотрим реагирование на инциденты безопасности — что делать, когда защита не сработала и произошла утечка данных.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 6