官方自带的ldap插件不支持openldap,得找第三方插件,第三方插件在官方提供的docker集成里面安装并不是那么方便,先说官方的方法:
echo "sentry-ldap-auth" >>sentry/requirements.txt
然后重启docker-compose,这样会发现起不来,看日志发现官方的docker并没有gcc和一些需要的相关依赖,这时候需要重新构造自己的docker镜像才行。 ###重构镜像 由于用的是docker-compose,重启后docker会销毁重来,如果直接进去系统安装,那么会导致重启后依赖环境没有了,所以这里干脆重新build一个镜像,下面放上Dockerfile:
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"]
重新构造后有两个选择
-
可以把原镜像打个新的tag,然后把新构造的打原镜像的tag
-
直接打一个新的tag,修改.env内容,SENTRY_IMAGE=getsentry/sentry:nightly 改成 SENTRY_IMAGE=getsentry/sentry:new
这时候再按官方的方法:
echo "sentry-ldap-auth" >>sentry/requirements.txt
###添加ldap代码配置 然后在sentry/sentry.conf.py底部加入如下内容:
###########
# LDAP/AD #
###########
# 下面有三处关键处,决定到ldap登陆后是否会报无组织的错误,不确定是某一处还是三处都会导致,懒得验证了
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType
AUTH_LDAP_SERVER_URI = 'ldap://{ldapserver}'
AUTH_LDAP_BIND_DN = 'cn=xx,dc=xx,dc=com'
AUTH_LDAP_BIND_PASSWORD = '{adminpassword}'
AUTH_LDAP_USER_SEARCH = LDAPSearch(
'ou=xx,ou=xxs,dc=xx,dc=xx',
ldap.SCOPE_SUBTREE,
'(mail=%(user)s)',
)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
'',
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 = {
'name': 'cn',
'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_SUBSCRIBE_BY_DEFAULT = True #关键,开启默认角色
AUTH_LDAP_SENTRY_GROUP_ROLE_MAPPING = {
'owner': ['sysadmins'],
'admin': ['devleads'],
'member': [] # 关键,未映射的角色为member
}
AUTH_LDAP_SENTRY_ORGANIZATION_GLOBAL_ACCESS = True
AUTH_LDAP_SENTRY_USERNAME_FIELD = 'uid'
AUTHENTICATION_BACKENDS = AUTHENTICATION_BACKENDS + (
'sentry_ldap_auth.backend.SentryLdapBackend',
)
import logging
logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel('DEBUG')
重启docker-compose即可
###验证 接入ldap后,sentry平台上看不出任何变化(插件出也没多出东西),所以怎么验证是否生效呢,就是直接用ldap用户登录平台,成功登录即搞定了
评论区