美文网首页
sentry集成LDAP实现统一身份认证

sentry集成LDAP实现统一身份认证

作者: 天草二十六_简村人 | 来源:发表于2021-10-29 13:41 被阅读0次

    一、背景

    由于线上需要统一身份认证,针对sentry,我们有两种办法,一是进入容器进行安装ldap;二是#SENTRY_IMAGE=getsentry/sentry:nightly 更换为已集成ldap的容器。

    当然,官网还有很多安装办法,比如在requirements.txt文件中追加sentry-ldap-auth,我在centos6下,试过此方法,报错gcc不存在。建议进入容器安装ldap。

    pip install sentry-ldap-auth
    

    报错详情:

    root@b936f6497ba6:/# pip install python-ldap
    Collecting python-ldap
      Downloading python-ldap-3.3.1.tar.gz (379 kB)
         |████████████████████████████████| 379 kB 397 kB/s 
    Requirement already satisfied: pyasn1>=0.3.7 in /usr/local/lib/python3.6/site-packages (from python-ldap) (0.4.8)
    Requirement already satisfied: pyasn1_modules>=0.1.5 in /usr/local/lib/python3.6/site-packages (from python-ldap) (0.2.8)
    Building wheels for collected packages: python-ldap
      Building wheel for python-ldap (setup.py) ... error
      ERROR: Command errored out with exit status 1:
       command: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-85szugbq
           cwd: /tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/
      Complete output (79 lines):
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-3.6
      copying Lib/ldapurl.py -> build/lib.linux-x86_64-3.6
      copying Lib/ldif.py -> build/lib.linux-x86_64-3.6
      creating build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/__init__.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/async.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/asyncsearch.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/cidict.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/compat.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/constants.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/dn.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/filter.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/functions.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/ldapobject.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/logger.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/modlist.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/pkginfo.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/resiter.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/sasl.py -> build/lib.linux-x86_64-3.6/ldap
      copying Lib/ldap/syncrepl.py -> build/lib.linux-x86_64-3.6/ldap
      creating build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/__init__.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/deref.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/libldap.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/openldap.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/pagedresults.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/ppolicy.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/psearch.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/pwdpolicy.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/readentry.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/sessiontrack.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/simple.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/sss.py -> build/lib.linux-x86_64-3.6/ldap/controls
      copying Lib/ldap/controls/vlv.py -> build/lib.linux-x86_64-3.6/ldap/controls
      creating build/lib.linux-x86_64-3.6/ldap/extop
      copying Lib/ldap/extop/__init__.py -> build/lib.linux-x86_64-3.6/ldap/extop
      copying Lib/ldap/extop/dds.py -> build/lib.linux-x86_64-3.6/ldap/extop
      copying Lib/ldap/extop/passwd.py -> build/lib.linux-x86_64-3.6/ldap/extop
      creating build/lib.linux-x86_64-3.6/ldap/schema
      copying Lib/ldap/schema/__init__.py -> build/lib.linux-x86_64-3.6/ldap/schema
      copying Lib/ldap/schema/models.py -> build/lib.linux-x86_64-3.6/ldap/schema
      copying Lib/ldap/schema/subentry.py -> build/lib.linux-x86_64-3.6/ldap/schema
      copying Lib/ldap/schema/tokenizer.py -> build/lib.linux-x86_64-3.6/ldap/schema
      creating build/lib.linux-x86_64-3.6/slapdtest
      copying Lib/slapdtest/__init__.py -> build/lib.linux-x86_64-3.6/slapdtest
      copying Lib/slapdtest/_slapdtest.py -> build/lib.linux-x86_64-3.6/slapdtest
      running egg_info
      writing Lib/python_ldap.egg-info/PKG-INFO
      writing dependency_links to Lib/python_ldap.egg-info/dependency_links.txt
      writing requirements to Lib/python_ldap.egg-info/requires.txt
      writing top-level names to Lib/python_ldap.egg-info/top_level.txt
      reading manifest file 'Lib/python_ldap.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      no previously-included directories found matching 'Doc/.build'
      adding license file 'LICENCE'
      writing manifest file 'Lib/python_ldap.egg-info/SOURCES.txt'
      creating build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/README -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/ca.conf -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/ca.pem -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/client.conf -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/client.key -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/client.pem -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/gencerts.sh -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/gennssdb.sh -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/server.conf -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/server.key -> build/lib.linux-x86_64-3.6/slapdtest/certs
      copying Lib/slapdtest/certs/server.pem -> build/lib.linux-x86_64-3.6/slapdtest/certs
      running build_ext
      building '_ldap' extension
      creating build/temp.linux-x86_64-3.6
      creating build/temp.linux-x86_64-3.6/Modules
      gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=3.3.1 -DLDAPMODULE_AUTHOR=python-ldap project -DLDAPMODULE_LICENSE=Python style -IModules -I/usr/local/include/python3.6m -c Modules/LDAPObject.c -o build/temp.linux-x86_64-3.6/Modules/LDAPObject.o
      unable to execute 'gcc': No such file or directory
      error: command 'gcc' failed with exit status 1
      ----------------------------------------
      ERROR: Failed building wheel for python-ldap
      Running setup.py clean for python-ldap
    Failed to build python-ldap
    Installing collected packages: python-ldap
        Running setup.py install for python-ldap ... error
        ERROR: Command errored out with exit status 1:
         command: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-n4r5p73l/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/python-ldap
             cwd: /tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/
        Complete output (79 lines):
        running install
        running build
        running build_py
        creating build
        creating build/lib.linux-x86_64-3.6
        copying Lib/ldapurl.py -> build/lib.linux-x86_64-3.6
        copying Lib/ldif.py -> build/lib.linux-x86_64-3.6
        creating build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/__init__.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/async.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/asyncsearch.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/cidict.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/compat.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/constants.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/dn.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/filter.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/functions.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/ldapobject.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/logger.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/modlist.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/pkginfo.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/resiter.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/sasl.py -> build/lib.linux-x86_64-3.6/ldap
        copying Lib/ldap/syncrepl.py -> build/lib.linux-x86_64-3.6/ldap
        creating build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/__init__.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/deref.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/libldap.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/openldap.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/pagedresults.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/ppolicy.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/psearch.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/pwdpolicy.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/readentry.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/sessiontrack.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/simple.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/sss.py -> build/lib.linux-x86_64-3.6/ldap/controls
        copying Lib/ldap/controls/vlv.py -> build/lib.linux-x86_64-3.6/ldap/controls
        creating build/lib.linux-x86_64-3.6/ldap/extop
        copying Lib/ldap/extop/__init__.py -> build/lib.linux-x86_64-3.6/ldap/extop
        copying Lib/ldap/extop/dds.py -> build/lib.linux-x86_64-3.6/ldap/extop
        copying Lib/ldap/extop/passwd.py -> build/lib.linux-x86_64-3.6/ldap/extop
        creating build/lib.linux-x86_64-3.6/ldap/schema
        copying Lib/ldap/schema/__init__.py -> build/lib.linux-x86_64-3.6/ldap/schema
        copying Lib/ldap/schema/models.py -> build/lib.linux-x86_64-3.6/ldap/schema
        copying Lib/ldap/schema/subentry.py -> build/lib.linux-x86_64-3.6/ldap/schema
        copying Lib/ldap/schema/tokenizer.py -> build/lib.linux-x86_64-3.6/ldap/schema
        creating build/lib.linux-x86_64-3.6/slapdtest
        copying Lib/slapdtest/__init__.py -> build/lib.linux-x86_64-3.6/slapdtest
        copying Lib/slapdtest/_slapdtest.py -> build/lib.linux-x86_64-3.6/slapdtest
        running egg_info
        writing Lib/python_ldap.egg-info/PKG-INFO
        writing dependency_links to Lib/python_ldap.egg-info/dependency_links.txt
        writing requirements to Lib/python_ldap.egg-info/requires.txt
        writing top-level names to Lib/python_ldap.egg-info/top_level.txt
        reading manifest file 'Lib/python_ldap.egg-info/SOURCES.txt'
        reading manifest template 'MANIFEST.in'
        no previously-included directories found matching 'Doc/.build'
        adding license file 'LICENCE'
        writing manifest file 'Lib/python_ldap.egg-info/SOURCES.txt'
        creating build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/README -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/ca.conf -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/ca.pem -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/client.conf -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/client.key -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/client.pem -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/gencerts.sh -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/gennssdb.sh -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/server.conf -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/server.key -> build/lib.linux-x86_64-3.6/slapdtest/certs
        copying Lib/slapdtest/certs/server.pem -> build/lib.linux-x86_64-3.6/slapdtest/certs
        running build_ext
        building '_ldap' extension
        creating build/temp.linux-x86_64-3.6
        creating build/temp.linux-x86_64-3.6/Modules
        gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=3.3.1 -DLDAPMODULE_AUTHOR=python-ldap project -DLDAPMODULE_LICENSE=Python style -IModules -I/usr/local/include/python3.6m -c Modules/LDAPObject.c -o build/temp.linux-x86_64-3.6/Modules/LDAPObject.o
        unable to execute 'gcc': No such file or directory
        error: command 'gcc' failed with exit status 1
        ----------------------------------------
    ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-jh0pq4pk/python-ldap_6197e497440e4e7495611f1502e2de3c/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-n4r5p73l/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/python-ldap Check the logs for full command output.
    

    二、方法二 -- pip install python-ldap

    docker run -it getsentry/sentry:nightly /bin/bash
    

    如果遇到上述的报错,解决问题的步骤见下:

    apt-get update
    
    apt-get install build-essential
    
    apt-get install python3-dev
    apt-get install libevent-dev
    
    

    以为是可以了,但是一直不行!!!

    于是查看github的issue列表,通过dockerfile文件,得知它的安装命令见下:

    apt-get update && apt-get install -y libsasl2-dev python-dev libldap2-dev libssl-dev
    
    pip install python-ldap sentry-ldap-auth
    

    三、方法三 -- requirements.txt

    四、方法四 -- 更新docker镜像

    .env (配置镜像、端口、数据保留的天数)

    COMPOSE_PROJECT_NAME=sentry_onpremise
    SENTRY_EVENT_RETENTION_DAYS=10
    # You can either use a port number or an IP:PORT combo for SENTRY_BIND
    # See https://docs.docker.com/compose/compose-file/#ports for more
    SENTRY_BIND=9000
    
    #SENTRY_IMAGE=getsentry/sentry:nightly
    SENTRY_IMAGE=guidao02/sentry-ldap:21.6.16
    
    SNUBA_IMAGE=getsentry/snuba:nightly
    RELAY_IMAGE=getsentry/relay:nightly
    SYMBOLICATOR_IMAGE=getsentry/symbolicator:nightly
    WAL2JSON_VERSION=latest
    

    这里使用了dockerhub的镜像guidao02/sentry-ldap:21.6.16,你可以自定义并上传到docker仓库。

    五、修改Ldap配置

    vi sentry/sentry.conf.py

    #############
    # LDAP auth #
    #############
    
    import ldap
    from django_auth_ldap.config import LDAPSearch, GroupOfUniqueNamesType
    
    # ldap服务器,需要更改
    AUTH_LDAP_SERVER_URI = 'ldap://172.16.3.28:389'
    # 用户名,需要更改
    AUTH_LDAP_BIND_DN = 'cn=admin,dc=xxx,dc=com'
    # 密码,需要更改
    AUTH_LDAP_BIND_PASSWORD = 'xxx'
    
    # 用户检索目录,需要更改
    AUTH_LDAP_USER_SEARCH = LDAPSearch(
        'ou=people,dc=xxx,dc=com',
        ldap.SCOPE_SUBTREE,
        '(uid=%(user)s)',
    )
    
    # 组织检索目录,需要更改
    AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
        'ou=sentry,ou=group,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 = {
        'name': 'description',
        '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'
    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('/tmp/ldap2.log'))
    logger.setLevel('DEBUG')
    
    LOGGING['overridable'] = ['sentry', 'django_auth_ldap']
    LOGGING['loggers']['django_auth_ldap'] = {
        'handlers': ['console'],
        'level': 'DEBUG'
    }
    

    六、sentry重启

    docker-compose down 
    docker-compose build 
    docker-compose up -d
    

    相关文章

      网友评论

          本文标题:sentry集成LDAP实现统一身份认证

          本文链接:https://www.haomeiwen.com/subject/xycialtx.html