sentry前端异常捕获平台集成ldap

Z先森 2021-11-10 PM 145℃ 4条

官方自带的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用户登录平台,成功登录即搞定了

标签: none

如无特殊说明,本博所有文章均为博主原创。

上一篇 HDFS同节点各目录磁盘平衡
下一篇 没有了

评论啦~



已有 4 条评论


  1. 大其
    大其

    您好,我修改完镜像有几个镜像unhealthy啦,可以加好友吗

    回复 2021-11-23 10:32
    1. Z先森
      Z先森 博主

      ?我python代码块漏了import语句,补上了
      import ldap
      from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType

      回复 2021-11-25 11:13
      1. 大其
        大其

        您好,不是这个问题,这个我加上了,我说用上这个ldap的镜像之后,其他依赖这个镜像的服务出现了unhealthy,但是没有其他异常错误。
        95bbbf5c0585 getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (unhealthy) 9000/tcp sentry_onpremise_worker_1
        093564547cfd getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (unhealthy) 9000/tcp sentry_onpremise_post-process-forwarder_1
        1672118cc7f8 getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (healthy) 9000/tcp sentry_onpremise_web_1
        aa48bd8fff63 getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (unhealthy) 9000/tcp sentry_onpremise_subscription-consumer-transactions_1
        3cef09451149 sentry-cleanup-onpremise-local "/entrypoint.sh '0 0…" 4 days ago Up 4 days (unhealthy) 9000/tcp sentry_onpremise_sentry-cleanup_1
        ce480e837454 getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (unhealthy) 9000/tcp sentry_onpremise_ingest-consumer_1
        8030a7b7fdc8 getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (unhealthy) 9000/tcp sentry_onpremise_subscription-consumer-events_1
        33444143a65e getsentry/sentry:new "/etc/sentry/entrypo…" 4 days ago Up 4 days (unhealthy) 9000/tcp

        回复 2021-11-29 11:11
        1. Z先森
          Z先森 博主

          应该是不会有影响,除非你还有过其他的改动,可以docker logs对应容器看看日志

          回复 2021-12-01 09:44