GrantForge

    Базы данных / Документные

    MongoDB

    Установка и настройка сервисного плагина MongoDB, подключение к набору реплик или шардированному кластеру, вход через SCRAM, клиентский сертификат, LDAP или Kerberos, поиск баз данных и коллекций и управление тем, кто что может читать, записывать и администрировать, вплоть до отдельной коллекции.

    Плагин MongoDB ищет базы данных и коллекции и управляет политиками доступа в терминах самого MongoDB: чтение, потоки изменений, вставка, обновление и удаление, индексы, параметры коллекции, обход проверки документов и удаление — по коллекциям; создание коллекций и удаление базы — по базам данных; просмотр списка всех баз и мониторинг — для развёртывания в целом. Идентификатор плагина и тип сервиса — mongodb. Сервисный плагин работает на сервере GrantForge; агент MongoDB, работающий рядом с развёртыванием, применяет политики собственными ролями MongoDB.

    Интеграционные тесты Testcontainers в репозитории охватывают наборы реплик MongoDB 6.0, 7.0, 8.0 и 9.0, а также Kerberos на Percona Server for MongoDB 8.0. Это не сертифицирует все остальные версии.

    Установка

    Дистрибутив включает плагин в plugins/mongodb. Убедитесь, что mongodb включён в Управление платформой → Плагины; после обновления каталога плагинов выполните повторное сканирование. Плагин общается с MongoDB через официальный Java-драйвер MongoDB в собственном загрузчике классов.

    Добавление сервиса данных

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите MongoDB (mongodb).
    2. Укажите строку подключения к развёртыванию в том виде, в каком её принимает любой клиент MongoDB.
    3. Укажите, как входит пользователь для поиска, проверьте подключение и сохраните сервис. Проверка выполняет вход и описывает развёртывание: версию MongoDB, набор реплик это, шардированный кластер или один сервер, кто вошёл и сколько баз данных видит этот пользователь.

    Пользователь для поиска позволяет GrantForge находить ресурсы и не является пользователем, который читает или записывает. Успешная проверка подключения не означает, что доступ уже следует политикам.

    Параметр Назначение
    mongodb.uri Обязательно: строка подключения, например mongodb://db1.example.com:27017,db2.example.com:27017/?replicaSet=rs0 или mongodb+srv://cluster.example.com/. Параметры вроде tls=true указываются здесь; учётные данные — нет, строка с ними отклоняется
    auth.mechanism SCRAM-SHA-256 (по умолчанию) или SCRAM-SHA-1 для пользователей с паролем, MONGODB-X509 для клиентского сертификата, PLAIN для LDAP, GSSAPI для Kerberos
    username Пользователь для поиска. При GSSAPI — принципал; при MONGODB-X509 пустое значение берёт его из сертификата
    password Пароль пользователя для поиска, хранится в зашифрованном виде
    auth.source SCRAM: база данных, в которой определён пользователь, по умолчанию admin. Остальные механизмы используют $external
    tls.ca.file При tls=true: путь на сервере GrantForge к PEM-сертификатам ЦС, по которым проверяются серверы. Пустое значение использует сертификаты JVM
    tls.certificate.key.file При tls=true: путь на сервере GrantForge к одному PEM-файлу с клиентским сертификатом и его ключом, как его принимает mongosh
    tls.certificate.key.password Пароль зашифрованного ключа, хранится в зашифрованном виде
    kerberos.keytab GSSAPI: путь на сервере GrantForge к keytab принципала. Пустое значение использует пароль
    kerberos.kdc GSSAPI: KDC области через запятую. Пустое значение использует krb5.conf сервера
    kerberos.service.name GSSAPI: имя службы принципала серверов, по умолчанию mongodb
    timeout Сколько могут занимать поиск сервера, подключение и одна команда, по умолчанию 30000, в диапазоне 1..600000 миллисекунд

    Отклонённый вход, пользователь для поиска без нужной привилегии и недоступное развёртывание сообщаются как таковые.

    Что видит пользователь для поиска

    MongoDB перечисляет базы данных и коллекции, на которые у пользователя есть хоть какая-то привилегия, поэтому поиск показывает то, что может видеть пользователь для поиска. Дайте ему read на то, для чего пишутся политики, или readAnyDatabase на всё. Собственные базы MongoDB admin, config и local и системные коллекции не показываются: политики их не решают.

    Ресурсы и типы доступа

    Уровень Сопоставление Типы доступа
    deployment Подстановочные знаки, с учётом регистра. Имя набора реплик, sharded для шардированного кластера, standalone для одного сервера list_databases, monitor
    database Подстановочные знаки, с учётом регистра create, drop_database
    collection Подстановочные знаки, с учётом регистра. Коллекция или представление базы данных read, change_stream, insert, update, remove, create_index, drop_index, alter, bypass_validation, drop
    Тип доступа Действия MongoDB
    read find, listIndexes, collStats, killCursors; на всей базе данных также listCollections и dbStats
    change_stream changeStream; чтобы открыть поток, MongoDB требует ещё и find
    insert, update, remove insert, update, remove
    create_index, drop_index createIndex, dropIndex
    alter collMod, validate, convertToCapped
    bypass_validation bypassDocumentValidation
    drop dropCollection
    create createCollection на базе данных: создание коллекций и представлений
    drop_database dropDatabase
    list_databases listDatabases: имя каждой базы данных, а не только тех, на которые у пользователя есть привилегия
    monitor serverStatus, top, replSetGetStatus, connPoolStats, hostInfo, inprog

    В значениях политик * соответствует любому тексту, а ? — одному символу. Редактор политик предлагает развёртывание, базы данных и коллекции баз, названных в политике.

    Привилегия MongoDB на удаление базы данных — это привилегия на удаление каждой её коллекции, поэтому агент выдаёт drop_database только там, где политики разрешают и удаление каждой коллекции. Иначе он не выдаёт привилегию и сообщает об этом, вместо того чтобы дать больше, чем разрешают политики. Администрирование пользователей и ролей не является типом доступа, и никакая политика его не даёт.

    Строки и поля

    MongoDB не фильтрует строки и не маскирует поля по ролям, поэтому этот тип сервиса не предлагает ни того, ни другого. Представление даёт ограниченное чтение: MongoDB проверяет читателя представления только по самому представлению, так что политика, разрешающая read на представление и ничего на его источник, показывает пользователю то, что показывает представление, и не больше.

    db.getSiblingDB("sales").createView("orders_public", "orders", [{ $project: { card: 0 } }])

    Пример политик

    Допустим, в развёртывании есть базы данных sales и hr. Создайте в одном сервисе данных такие включённые политики:

    Ресурс Правило
    database=sales, collection=* Разрешить read группе analysts
    database=sales, collection=orders_public Разрешить read пользователю support
    database=sales, collection=orders Разрешить insert и update пользователю ingest; запретить read группе contractors
    database=team_* Разрешить create группе data-team
    database=team_*, collection=* Разрешить read, insert, update, remove, create_index и drop группе data-team
    deployment=* Разрешить monitor пользователю dashboards

    Когда агент применит снимок, участники analysts будут читать весь sales, включая коллекции, созданные позже; support будет читать представление без его источника; ingest будет записывать в orders, не читая его; участники data-team будут свободно работать в базах team_; а dashboards будет видеть состояние сервера и никаких данных.

    Применение политик

    Сервисный плагин управляет политиками и ищет ресурсы. Для их применения нужен один агент MongoDB на развёртывание; развёртывание и проверки описаны в разделе Агент MongoDB.

    Связанные руководства

    Редактировать эту страницу на GitHub