ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Harbor 中 LDAP 模式用户组查看项目日志:环境配置、操作验证与过滤排查指南

Harbor 中 LDAP 模式用户组查看项目日志:环境配置、操作验证与过滤排查指南 Harbor 中 LDAP 模式用户组查看项目日志环境配置、操作验证与过滤排查指南【免费下载链接】harborAn open source trusted cloud native registry project that stores, signs, and scans content.项目地址: https://gitcode.com/GitHub_Trending/ha/harbor本指南以 Harbor 仓库测试用例 4-06-LDAP-usergroup-view-logs.md 为核心骨架系统讲解在 LDAP/AD 外部认证模式下如何验证 LDAP 用户组而非单个用户对私有项目日志的查看与过滤能力。读完本文你将掌握 Harbor 的 LDAP 组配置参数含义、完整的端到端验证流程建组、加成员、推送/拉取镜像、查看过滤日志以及日志记录与过滤背后的源码实现原理可直接复现该测试用例用于生产环境的功能验收。一、测试目标与适用场景该用例归属于 Harbor 测试用例集的Group4-logging日志专项其核心目标非常聚焦当用户由外部 LDAP/AD 服务器管理即auth_mode为ldap_auth时验证 LDAP 用户组是否具备查看项目日志的权限以及日志内容与搜索过滤结果是否正确。它与两个典型场景强相关企业内网环境组织用户目录集中在 AD/LDAP 中Harbor 不维护用户密码仅通过与 LDAP 的绑定bind完成身份认证此时用户组即权限单元是常规管理模式。审计与合规项目日志是安全审计的基础数据需要确认外部管理的组账户也能按项目维度检索到 push / pull / delete 等全部操作记录。在 Harbor 中ldap_auth是三类认证模式之一另外两类为db_auth与oidc_auth该模式常量定义于 src/common/const.goLDAPAuth ldap_auth。系统级配置项auth_mode在 src/lib/config/metadata/metadatalist.go 中被登记默认值为db_auth不可在运行时编辑Editable: false必须通过harbor.yml或环境变量在部署阶段确定。二、前置环境准备依据测试用例的环境要求# Environment:复现该测试前需要满足以下条件Harbor 实例已正常部署并处于运行可用状态。LDAP/AD 服务器运行可用且启用了 memberof overlay 特性OpenLDAP 的 memberof 覆盖层。memberof 是后续用户属于哪个组、组内包含哪些用户双向解析的前提Harbor 在登录时依据 memberof 返回的组 DN 列表完成用户与组关联。认证模式为 LDAPHarbor 的auth_mode被设置为ldap_auth用户数据用户名、密码全部存于 LDAP/AD 服务器Harbor 本地不保存密码。Docker CLI 环境一台装有 Docker CLI 的 Linux 主机用于执行docker login、docker push、docker pull操作测试用例原文要求为 Docker client。LDAP 组配置参数已配置测试用例明确列出以下四个参数需要完成配置ldap_group_basednldap_group_filterldap_gidldap_group_scope需要特别说明的是测试用例中的这组参数名是 Harbor 早期版本的命名习惯。当前仓库源码src/lib/config/models/model.go中LDAP 组配置由GroupConf结构体承载其 JSON 字段与用例参数存在如下对应关系从源码字段与功能语义推断测试用例参数历史命名当前源码GroupConf字段JSON key语义说明ldap_group_basednldap_group_base_dn用户组搜索的基准 DNldap_group_filterldap_group_filter组搜索过滤器过滤出有效的组条目ldap_gidldap_group_name_attribute组的唯一标识属性如cn、gid用于映射组名ldap_group_scopeldap_group_search_scope组搜索范围0Base、1OneLevel、2Subtree整型取值除上述字段外GroupConf还包含ldap_group_admin_dn组管理员 DN命中该 DN 的用户登录后将被标记为 Harbor 系统管理员、ldap_group_membership_attribute组成员属性如memberof与ldap_group_attach_parallel是否并行关联组布尔值。这些参数在管理界面的系统配置 → 认证设置中填写部署时对应的配置模板见 make/harbor.yml.tmpl 中的ldap配置段。三、LDAP 认证与用户组关联的底层原理在进入操作步骤前先理解 Harbor 是如何将外部 LDAP 用户与用户组映射进自身权限体系的。认证实现位于 src/core/auth/ldap/ldap.go核心流程如下建立会话通过ldapCtl.Ctl.Session(ctx)加载系统级 LDAP 配置并建立连接对应ldap_url、ldap_search_dn、ldap_base_dn、ldap_filter、ldap_uid、ldap_scope等用户配置见LdapConf结构体 model.go。搜索用户ldapSession.SearchUser(p)依据用户过滤器在 LDAP 中查找用户条目若命中 0 条或超过 1 条分别返回 Not found an entry 与 Multiple entries found 错误。绑定校验用用户 DN 密码执行ldapSession.Bind(dn, m.Password)绑定成功即认证通过。组关联attachLDAPGroupldap.go读取GroupConf遍历该用户条目返回的GroupDNList这正是 memberof overlay 的作用将其与ldap_group_admin_dn比对若用户属于组管理员 DN则设置u.AdminRoleInAuth true登录即获得系统管理员角色随后在ldap_group_search_filter非空时将用户挂接到的各 LDAP 组同步为 Harbor 的用户组。从源码结构可以推断用户登录的瞬间其所属 LDAP 组就被同步注册到 Harbor 的用户组体系因此后续在项目管理中可以直接按 LDAP 组 DN 添加项目成员并授予角色这正对应测试步骤中以 LDAP 组 DN 添加项目成员的前提。四、测试步骤详解端到端操作流程测试用例的# Test Steps:给出了完整的七步操作下面结合实际操作细节展开Step 1准备 LDAP 组与用户在 LDAP/AD 服务器中创建组harbor_admin并创建用户admin_user确保admin_user是harbor_admin的成员memberof overlay 会保证该成员关系可被反向查询到。Step 2以 admin 登录并创建私有项目使用admin账户登录 Harbor UI注意此处的admin是 Harbor 内置的系统管理员创建一个私有项目例如命名为ldap_group_proj。私有项目Private确保后续对非显式成员无访问权这一权限模型生效。Step 3按 LDAP 组 DN 添加项目成员并授予管理员角色在项目ldap_group_proj的成员管理中添加成员并选择LDAP 组类型输入harbor_admin的完整 LDAP DN角色选择项目管理员ProjectAdmin。这样组内的admin_user自动获得该项目的管理权限——这是本用例的核心权限授予的对象是组而非单个用户。Step 4以 admin_user 在 Docker 客户端登录在装有 Docker CLI 的主机上执行docker login harbor_host -u admin_user -p admin_user的LDAP密码此处校验的是 Harbor 通过 LDAP 绑定完成对admin_user的认证而非本地数据库密码。Step 5向项目推送/拉取镜像为项目打上标签并推送随后拉取建议同时记录操作时间以备核对docker tag local_image harbor_host/ldap_group_proj/image:tag docker push harbor_host/ldap_group_proj/image:tag docker pull harbor_host/ldap_group_proj/image:tagStep 6以 admin_user 登录 UI 查看项目日志使用admin_user此时其角色为项目管理员登录 Harbor UI进入项目ldap_group_proj→ 日志Logs标签页查看 Step 5 中产生的全部操作记录重点核对每条日志的操作类型push / pull / delete是否正确每条日志的时间戳是否与 Step 5 的实际操作时间吻合日志中的用户、项目、镜像仓库名等信息是否准确。Step 7验证日志搜索过滤条件在日志页使用以下搜索条件逐一验证确保过滤结果与预期一致仅push只显示推送操作仅pull只显示拉取操作pull与push组合仅delete删除操作all全部操作push与delete组合不同的日期范围按时间段过滤日期范围与push组合时间 操作类型的复合过滤这八组条件覆盖了操作类型维度与时间维度以及两者的交叉组合是验证日志检索逻辑完备性的关键。五、预期结果与判定标准测试用例的# Expected Outcome:给出三条验收标准复现时以此为准判定通过Step 5 中的所有操作均被记录push / pull 行为必须完整落日志不允许出现丢失或延迟不刷新的情况。Step 6 中日志可见且内容正确admin_user作为组内成员、项目管理员角色必须能看到项目日志时间与操作类型必须准确。Step 6 中的过滤功能正确上述八组搜索条件均返回符合条件的结果且互不串扰如仅选 push 时不应出现 pull 记录。用例的# Possible Problems:标注为 None即该场景暂无已知的历史失败模式。六、日志记录与审计的实现佐证日志功能的代码基础可在仓库中进一步追溯审计日志包src/pkg/audit 目录6 个 Go 文件承载 Harbor 的审计日志核心逻辑项目内 push / pull / delete 等操作在此被转换为审计事件并持久化。事件处理链src/controller/event/handler 目录26 个 Go 文件中的各类 handler 订阅镜像推送、拉取、删除等事件是操作发生 → 日志落库的桥梁。日志接口服务端日志查询与过滤的 REST 接口定义于 api/v2.0/swagger.yaml 的日志audit log相关路径前端日志页调用该接口并携带操作类型、时间范围等查询参数。从源码调用链可以推断Harbor 的日志过滤是在服务端通过查询参数组合操作类型 时间区间完成的因此测试用例 Step 7 中的复合条件如日期范围 push本质上是验证服务端多参数组合过滤的正确性。七、总结与实战要点权限模型的验证核心本用例验证的不是单个 LDAP 用户的日志权限而是LDAP 用户组作为项目成员后其组内用户自动继承项目管理员角色的完整链路——包括认证LDAP bind、组映射memberof GroupConf、授权项目成员角色与审计日志可见与过滤四个环节。配置参数注意点部署时auth_mode必须为ldap_auth组相关参数ldap_group_base_dn、ldap_group_filter、ldap_group_name_attribute、ldap_group_search_scope需完整配置否则登录时组关联步骤会因配置缺失而仅记录警告并跳过见 ldap.go 对LDAPGroupConf获取失败的处理——不应阻塞用户登录因此组权限会静默失效排查时需重点检查。可复现性以上全部步骤均可在测试环境直接执行操作与预期结果一一对应若需批量自动化可参考 tests/apitests/python 下的 API 测试脚本以 REST 方式驱动相同流程。【免费下载链接】harborAn open source trusted cloud native registry project that stores, signs, and scans content.项目地址: https://gitcode.com/GitHub_Trending/ha/harbor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表