一、背景
由于公司需要统一的身份认证,针对 sentry,我们则需要安装 ldap
二、安装
1. 增加 ldap 插件
$ echo "sentry-ldap-auth" >> sentry/requirements.txt
重启 docker-compose,发现缺少 gcc 等一系列依赖,此时需构建自己的 docker 镜像
2. 重构镜像
FROM getsentry/sentry:nightly
RUN apt-get update && \
apt-get install -y --no-install-recommends gcc libsasl2-dev python-dev libldap2-dev libssl-dev && \
rm -r /var/lib/apt/lists/*
ENTRYPOINT ["/entrypoint.sh"]
这里提供一个我已经上传的镜像 wzmogu/sentry:ldap
3. 修改基础镜像
// .env
...
SENTRY_IMAGE=wzmogu/sentry:ldap
...
4. 添加 ldap 配置信息
sentry/sentry.conf.py
#########################
# LDAP auth #
#########################
# 有三处关键点,决定到 ldap 登录后释放会报无组织的错误,未验证
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType
# ldap 服 务 器
AUTH_LDAP_SERVER_URI = 'ldap://xxx.xxx.com:389'
# 用 户 名
AUTH_LDAP_BIND_DN = 'cn=manager,dc=xxx,dc=com'
# 密 码
AUTH_LDAP_BIND_PASSWORD = 'xxxx'
# 用 户 检 索 目 录
AUTH_LDAP_USER_SEARCH = LDAPSearch('dc=xxx,dc=com', ldap.SCOPE_SUBTREE, '(cn=%(user)s)')
# 组 织 检 索 目 录
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('dc=xxx,dc=com', ldap.SCOPE_SUBTREE, '(objectClass=groupOfUniqueNames)')
AUTH_LDAP_GROUP_TYPE= GroupOfUniqueNamesType()
AUTH_LDAP_REQUIRE_GROUP = None
AUTH_LDAP_DENY_GROUP = None
AUTH_LDAP_USER_ATTR_MAP = { 'username': 'cn', '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 = u'Sentry'
AUTH_LDAP_SENTRY_ORGANIZATION_ROLE_TYPE = 'member' # 关键,默认角色为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', )
AUTH_LDAP_DEFAULT_EMAIL_DOMAIN = 'xxx.com'
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.setLevel('DEBUG')
LOGGING['overridable'] = ['sentry', 'django_auth_ldap']
LOGGING['loggers']['django_auth_ldap'] = {
'handlers': ['console'],
'level': 'DEBUG'
}
重启 docker-compose 即可
5. 验证
接入 ldap 后,sentry 平台上看不到任何变化,所以直接使用 ldap 帐号登录平台,登录成功即可