3. 用户、组与目录管理

在 Atlassian 平台(Jira、Confluence、Bitbucket 等)中,权限治理的起点不是权限方案本身,而是“谁是谁、谁属于谁、谁从哪里来”。用户、组与目录三者构成了权限体系的身份底座:目录决定账号来源与认证方式,用户是权限授予的最小主体,组则是批量授权与继承的载体。理解这三者的关系,才能避免“权限看起来配了却没人能访问”或“离职人员仍能登录”这类典型问题。

一、目录:账号的来源与优先级

Atlassian Cloud 与 Data Center 在目录模型上差异明显。Cloud 站点通常包含两类目录:Atlassian 账户目录(本地托管用户,由 Atlassian 管理)和外部目录(通过 SAML SSO 或 SCIM 接入的身份提供商,如 Okta、Azure AD、Google Workspace)。Data Center 则通过 User Directories 配置多个目录,如内部目录、LDAP、Crowd、Jira Internal Directory 等,并可为每个目录设置目录顺序(Directory Order)。

目录顺序直接决定身份解析结果:当同一用户名或邮箱在多个目录中存在时,系统按顺序从上到下匹配,命中即停止。因此实践中应遵循两条原则:外部权威目录排在本地目录之前,避免本地同名账号“遮蔽”外部账号;本地目录仅保留服务账号或应急管理员,不承载普通员工身份。若顺序颠倒,常见症状是用户通过 SSO 登录后仍被识别为本地账号,导致组同步失效、权限不生效。

二、本地用户与组:最小可用身份模型

本地用户适用于无法接入外部目录的场景,例如小型团队、外部协作方、临时账号。创建本地用户时需关注三个字段:用户名(登录标识,通常不可改)、邮箱(通知与找回入口)、显示名(界面展示)。本地用户默认不参与 SSO,若站点已启用强制 SSO,需为其单独配置例外策略,否则会被登录策略拦截。

组是权限继承的核心单元。Atlassian 中组分为两类:平台级组(如 jira-administrators、confluence-users、site-admins)和自定义组(如 dev-team、qa-team)。平台级组往往绑定全局权限,不应随意将普通用户加入;自定义组则用于项目角色映射与空间权限授予。组可以嵌套,但嵌套层级过深会显著增加权限排查难度,建议控制在两层以内。

实践建议:为每个业务域建立“角色组 + 人员组”双层结构。例如 proj-pay-role-dev 作为角色组授予项目权限,proj-pay-team-dev 作为人员组承载实际成员,再将人员组加入角色组。人员变动时只调整人员组,权限方案保持稳定。

三、外部目录同步与 SCIM

外部目录同步解决的是“身份数据一致性”问题。仅配置 SAML SSO 只能完成认证(Authentication),用户仍需手动创建或首次登录时即时创建(JIT Provisioning),且用户离职后账号不会自动停用。SCIM(System for Cross-domain Identity Management)则补齐了授权(Provisioning)环节:IdP 作为权威源,通过 SCIM 协议将用户的创建、更新、停用、组关系变更实时推送到 Atlassian。

SCIM 同步的关键对象是 User 与 Group。典型配置流程如下:在 IdP 侧创建 SCIM 应用,生成 Bearer Token;在 Atlassian 管理后台启用 User Provisioning,填入 Token 与 SCIM Base URL;随后在 IdP 侧分配用户与组到该应用。同步触发方式分为实时推送(用户变更立即同步)与定时全量对账(通常每日一次),两者应同时启用,以修复推送丢失导致的漂移。

需要特别注意的是组映射规则:IdP 中的组名推送到 Atlassian 后,默认按原名创建。若 IdP 组名与 Atlassian 既有组名不一致,会产生重复组,导致权限授予落空。建议在 IdP 侧统一命名规范,例如 atlassian-jira-admins、atlassian-confluence-users,并在启用前用测试组验证映射结果。

身份来源 → 目录解析 → 组继承 → 权限生效 身份提供商 IdP Okta / Azure AD Google Workspace 权威身份源 SCIM 同步 User / Group 推送 Bearer Token 实时 + 每日对账 Atlassian 目录 外部目录(优先) 本地目录(兜底) 按顺序匹配,命中即停 用户 / 组 角色组 人员组 权限继承载体 用户生命周期状态流转 创建 / 邀请 激活 / 可用 角色变更 停用 / 挂起 删除 / 归档 权限继承链:组 → 项目角色 → 权限方案 → 空间 / 项目 人员组 项目角色 权限方案 空间 / 项目

四、用户生命周期管理

用户生命周期可归纳为五个状态:创建、激活、变更、停用、删除。每个状态都对应明确的治理动作与判断依据。

  • 创建:优先由 SCIM 自动创建;本地创建仅用于例外场景,需记录申请人与用途。
  • 激活:用户首次登录或接受邀请后进入可用状态。若启用 SCIM,激活由 IdP 分配应用触发。
  • 变更:包括改名、换组、角色调整。SCIM 环境下组变更由 IdP 推送;本地环境下需人工调整组关系。
  • 停用:离职或长期离岗时,应在 IdP 侧停用账号,SCIM 会将其同步为 Atlassian 的“已停用”状态。停用用户无法登录,但其历史操作记录与权限授予关系仍保留,便于审计。
  • 删除:仅在确认无需保留审计痕迹时执行。删除用户会解除其组关系,但不会自动清理其创建的内容。Atlassian Cloud 中删除用户会释放许可证席位,但需注意“匿名化”与“完全删除”的区别。
常见误区:仅在 IdP 侧停用用户,却未确认 SCIM 同步成功。若 SCIM Token 过期或同步中断,Atlassian 侧账号仍为激活状态,用户可能通过残留会话继续访问。建议每月核对一次“IdP 已停用但 Atlassian 仍激活”的差异清单。

五、权限继承关系与排查方法

Atlassian 的权限继承遵循“组 → 角色 → 权限方案 → 资源”的链路。以 Jira 为例:用户加入组 → 组被授予项目角色(如 Administrators、Developers)→ 项目角色在权限方案中被赋予具体权限(如 Administer Projects、Browse Projects)→ 权限方案绑定到项目。Confluence 类似:用户加入组 → 组被授予空间权限 → 空间权限决定页面操作能力。

当出现“用户无法访问”时,可按以下顺序排查:

  1. 确认用户当前所在目录与账号状态(是否停用、是否被本地同名账号遮蔽)。
  2. 确认用户所属组,以及该组是否被正确映射到目标项目角色或空间权限。
  3. 确认权限方案中该角色是否包含所需权限,以及是否存在更严格的全局权限覆盖。
  4. 确认用户是否受到 IP 允许列表、SSO 强制策略或双因素认证策略的限制。

为提升排查效率,建议维护一份“组—角色—权限方案”对照表,并在每次权限方案变更后更新。下表为一个简化示例:

组名 映射项目角色 权限方案 典型权限
proj-pay-team-dev Developers Pay-Scheme-A Browse Projects、Create Issues、Transition Issues
proj-pay-role-admin Administrators Pay-Scheme-A Administer Projects、Manage Sprints
confluence-users — 空间权限 View、Comment、Edit(按空间授予)

最后需要强调:目录顺序、SCIM 同步状态与组映射规则是三个最容易出错的环节。建议在正式启用 SCIM 前,先用一个测试组完成“创建—加入组—授予权限—停用—确认权限回收”的完整闭环验证,确认无误后再逐步扩大同步范围。身份底座稳固,后续的权限方案与空间治理才有可靠的基础。