Sentry из коробки поддерживает большое множество средств для авторизации, появилась необходимость использовать уже существующие учетные записи с нужными правами.
Из этого появилась небольшая инструкция по установке Sentry Self-Hosted и подключения к LDAP.
Для установки Sentry Self-Hosted потребуется docker, поэтому ставим его в первую очередь, я использую в качестве стенда Ubuntu 22.04 и инструкцию для установки можно взять в документации.
В данном примере используется FreeIPA в роли сервера LDAP.
Установка Sentry
wget https://github.com/getsentry/self-hosted/archive/refs/tags/22.9.0.tar.gz
Распаковываем архив
tar -xzf 22.9.0.tar.gz
Копируем конфигурационный файл
sentry/enhance-image.example.sh
cp sentry/enhance-image.example.sh sentry/enhance-image.sh
В файле
sentry/enhance-image.sh
описываем наши зависимости
#!/bin/bash
apt-get update && \
apt-get install -y --no-install-recommends gcc libsasl2-dev libldap2-dev libssl-dev && \
rm -r /var/lib/apt/lists/*
pip install sentry-ldap-auth
Копируем конфигурационный файл s
entry/sentry.conf.example.py
и конфигурируем под себя
cp sentry/sentry.conf.example.py sentry/sentry.conf.py
В конец файла добавляем конфигурацию для подключения к LDAP
#############
# LDAP auth #
#############
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType
AUTH_LDAP_SERVER_URI = 'ldap://freeipa.example.com:389'
AUTH_LDAP_BIND_DN = 'krbprincipalname=sentry/freeipa.example.com@EXAMPLE.COM,cn=services,cn=accounts,dc=example,dc=com'
AUTH_LDAP_BIND_PASSWORD = 'qwerty123'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
'cn=users,cn=accounts,dc=example,dc=com',
ldap.SCOPE_SUBTREE, '(uid=%(user)s)',
)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
"cn=groups,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfUniqueNamesType()
AUTH_LDAP_REQUIRE_GROUP = None
AUTH_LDAP_DENY_GROUP = None
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenname",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_FIND_GROUP_PERMS = False
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_DEFAULT_SENTRY_ORGANIZATION = 'Sentry'
AUTH_LDAP_SENTRY_ORGANIZATION_ROLE_TYPE = 'member'
AUTH_LDAP_SENTRY_ORGANIZATION_GLOBAL_ACCESS = True
AUTH_LDAP_SENTRY_SUBSCRIBE_BY_DEFAULT = False
AUTH_LDAP_SENTRY_USERNAME_FIELD = 'cn'
SENTRY_MANAGED_USER_FIELDS = ('email', 'first_name', 'last_name', 'password', )
AUTHENTICATION_BACKENDS = AUTHENTICATION_BACKENDS + (
'sentry_ldap_auth.backend.SentryLdapBackend',
)
# optional, for debugging
import logging
logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.addHandler(logging.FileHandler('/var/log/sentry_ldap.log'))
logger.setLevel('DEBUG')
LOGGING['overridable'] = ['sentry', 'django_auth_ldap']
LOGGING['loggers']['django_auth_ldap'] = {
'handlers': ['console'],
'level': 'DEBUG'
}
Устанавливаем Sentry
./install.sh
на данном этапе происходит сборка образа с нашими зависимостями, поднимается база данных и производятся миграции, создается суперпользователь.
Создаем пользователя
Created internal Sentry project (slug=internal, id=1)
Would you like to create a user account now? [Y/n]: Y
После окончания начальной сборки остается только запустить сервис и его компоненты
docker-compose up -d
Sentry никак не показывает что можно войти через LDAP, но мы можем пробовать войти под своей учетной записью LDAP.
Пользователь создается с выставлеными правами