Skip to content

Web-interface for managing GreenPlum and PostgreSQL

License

Notifications You must be signed in to change notification settings

dns-technologies/gppm

Repository files navigation

GreenPlum Permission Manager

WEB-интерфейс управления правами пользователей в GreenPlum и PostgreSQL.

Preview

Резюме

Функции

Доступные возможности зависят от СУБД. В виду того, что в PostgreSQL отсутствуют ресурсные группы, связанный с ними функционал работать не будет.

Реализовано для GreenPlum:

  • Управление ролями (создание, изменение, удаление)
  • Управление группами ролей (добавление, исключение)
  • Представление ролей и связей между ними в виде графа и таблицы
  • Выдача прав роли (на чтение, редактирования и т. д.): БД, схемы и конкретной таблицы
  • Просмотр итоговых прав роли на объект: БД, схему, таблицу
  • Просмотр дефолтных прав роли для выбранной базы
  • Управление ресурсными группами (создание, изменение, удаление)
  • Управление членами ресурсной группы (добавление, исключение)
  • Аутентификация пользователя в GUI по email и паролю (поддерживается LDAP)
  • Поддержка переключения между несколькими СУБД
  • Разграничение прав редактирования СУБД через GUI (до уровня роли, базы, схемы)

Совместимость

Минимально GreenPlum 6.8 и PostgreSQL 9.6. Будет работать и на более новых версиях.

Быстрый старт

Для предварительного ознакомления, достаточно воспользоваться подготовленным автономным образом:

docker run -it --rm \
    -p 80:80 -p 8080:8080 \
    -v gppm-data:/var/lib/postgresql/9.6 \
    -e SECRET_KEY=HF2IxPeglDZdEVp4702u4mxOpoNcInXnZj80d1Ab \
    -e ENCODING_KEY=SCW2TcT1ko4RaTEXFDXmSsGPIRey0kvNvJz8v0zO73k= \
    ostapkonst/gppm

Сервис доступен на http://localhost. Данные для входа:

login: [email protected]
password: admin

Для развертывания на production, рекомендуется собрать backend и frontend образы самостоятельно.

Установка

Клонируйте репозиторий проекта:

git clone https://github.com/dns-technologies/gppm

Настройка

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

Описание параметров

В поле Тип, содержится то, каким образом параметр должен быть передан в Docker: ENV — как переменная окружения контейнера, ARG — как аргумент сборки образа.

Параметр Тип Описание
SECRET_KEY ENV Используется механизмом аутентификации. При изменении секрета, пользователями придется повторно пройти аутентификацию в браузере.
ENCODING_KEY ENV Ключ шифрования паролей доступа к СУБД. При изменении секрета, потребуется повторное проставление паролей для всех контекстов.
BACKEND_CORS_ORIGINS ENV Список доменов, с которых возможно обращение к API. Для обращения через WEB-интерфейс, его URL следует добавить в этот список.
FIRST_SUPERUSER ENV Email первого пользователя с правами администратора.
FIRST_SUPERUSER_PASSWORD ENV Пароль FIRST_SUPERUSER.
POSTGRES_SERVER ENV Расположение PostgreSQL для нужд backend. Рекомендуется версия СУБД не ниже 9.6.
POSTGRES_PORT ENV Порт PostgreSQL. Обычно это 5432.
POSTGRES_USER ENV Роль для подключения к POSTGRES_SERVER.
POSTGRES_PASSWORD ENV Пароль POSTGRES_USER для подключения к POSTGRES_SERVER.
POSTGRES_DB ENV База на POSTGRES_SERVER, в которой должны быть права на выполнение DDL и DML команд от роли POSTGRES_USER.
INSTALL_DBLINK ENV Установка dblink при его отсутствии. Позволяет использовать более сложный алгоритм удаления ролей.
GRANT_WITH_ADMIN_OPTION ENV Объединение ролей с WITH ADMIN OPTION. Роль сможет добавлять членов в группу, которой принадлежит.
DEEP_REVOKE ENV Выполнять REVOKE от всех ролей, которые выдали права.
AUTH_PROVIDER ENV Тип аутентификации: local или ldap. При выборе ldap, применятся настройки с префиксом LDAP_.
AUTH_OPEN_REGISTRATION ENV Проверка пароля при первой аутентификации. Позволяет проще регистрировать новых пользователей.
AUTH_REFRESH_PASSWORD ENV Перезаписывать пароль при каждой аутентификации. Рекомендуется включить для ldap.
LDAP_HOST ENV Расположение LDAP сервера.
LDAP_USER_SEARCH_BASE ENV Базовый DN, используемый для поиска пользователей.
LDAP_USER_SEARCH_FILTER ENV Выражение фильтра, используемое для поиска пользователей. Используйте {email} там, где ожидается совпадение с почтой пользователя.
LDAP_USER_ATTRS ENV Список атрибутов, которые будут использованы в качестве имени пользователя.
FRONTEND_DOMAIN ARG Базовая часть URL API, к которой будут посылаться запросы из GUI. Задается при сборке fronted-образа.

Запуск

Достаточно собрать контейнеры командой docker-compose build из корня проекта. На этом шаге будут скачаны базовые образы, выполнены команды установки зависимостей для backend и frontend и прочие команды из backend/backend.dockerfile и frontend/fontend.dockerfile. После успешной сборки, выполнить docker-compose up. Запущенный сервис доступен на http://localhost.

Деплой в K8s

Деплой в K8s кластер осуществляется с помощью Helm-чартов из директории charts/gppm. Настройка производится редактированием файла charts/gppm/values.yaml. Предварительно, требуется собрать образы и опубликовать их в Container Registry. В качестве HTTP-сервера на backend по умолчанию используется Gunicorn. В среде разработки по умолчанию запускается Uvicorn.

Команды сборки контейнеров:

cd backend
docker build \
    -t gppm-backend \
    -f backend.dockerfile \
    --no-cache .
cd frontend
docker build \
    -t gppm-frontend \
    -f frontend.dockerfile \
    --build-arg FRONTEND_DOMAIN=http://gppm.com \
    --no-cache .

Автономный образ

Возможно собрать образ, который будет содержать все компоненты.

Достаточно выполнить:

docker build \
    -t gppm-standalone \
    -f build/standalone.dockerfile \
    --no-cache .

Процесс запуска:

docker run -it --rm \
    -p 80:80 -p 8080:8080 \
    -v gppm-data:/var/lib/postgresql/9.6 \
    -e SECRET_KEY=HF2IxPeglDZdEVp4702u4mxOpoNcInXnZj80d1Ab \
    -e ENCODING_KEY=SCW2TcT1ko4RaTEXFDXmSsGPIRey0kvNvJz8v0zO73k= \
    gppm-standalone

Разработка

Проект состоит из backend и frontend частей. Backend — RestFull API на FastAPI с использованием ORM SQLAlchemy и СУБД PostgreSQL для хранения параметров аутентификации/авторизации доступа к WEB-интерфейсу. Frontend — SPA приложение на стеке Vue.js + Vuex + Vuetify с использованием JavaScript и TypeScript библиотек.

Для разработки, сервисы нужно запускать отдельно. Миграция БД производится библиотекой Alembic автоматически при старте. Для frontend разработки, требуется установленный Node.js версии не ниже v14.x (рекомендуется v16.x). Для backend разработки, требуется установленный Docker Compose.

Backend с Live Reloading

При изменении кода backend, сервер перезапустится автоматически:

docker-compose up --build

Frontend с Hot Reloading

При изменении кода frontend, изменения применятся автоматически:

cd frontend
npm install
npm run serve

Доступ к Dev окружению

По умолчанию, после выполнения описанных выше команд:

Генерация Alembic миграций

Для генерации миграций из контейнера, выполнить:

docker-compose run backend bash
alembic revision --autogenerate -m "Migration title"

Тестирование

Вместе с приложением, можно поднимать контейнеры с GreenPlum 6.8 и PostgreSQL 9.6. Логины и пароли тестового окружения находятся в docker-compose.stage.yml. Команда запуска:

docker-compose \
    -f docker-compose.yml \
    -f docker-compose.stage.yml \
    up --build

Лицензия

The MIT License (MIT)

Copyright (c) 2022 ООО "ДНС Технологии"

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.