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 из 0
Аналитический
Вопрос 1 из 5. Аудит FinSecure выявил 34 роли для 30 пользователей, из которых 19 дублируют друг друга. Какой индикатор role explosion это демонстрирует?

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

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

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

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