• 为所有组织启用: 在 values.yaml 的 commonEnv 中添加以下环境变量:
    该环境变量对个人组织没有影响,因为个人组织未启用 RBAC。
  1. 设置身份验证。要通过 API 管理访问策略,您需要拥有 Organization Admin 用户签发的个人访问令牌(PAT),或具有 Organization Admin 权限的、组织范围的 service key。在运行任何脚本之前,请设置以下环境变量:

访问策略结构

访问策略定义了授权或拒绝访问的条件。其结构如下:

效果

effect 决定条件匹配时会发生什么:
  • allow — 条件匹配时授予访问权限
  • deny — 条件匹配时阻止访问
拒绝策略始终具有优先权。如果同时有 allow 和 deny 策略匹配,则访问会被拒绝。

条件组

condition_groups 数组包含一个或多个条件组。多个条件组之间使用 OR 逻辑 进行评估——只要任一条件组匹配,策略即生效。 每个条件组指定:
  • permission — 该条件组适用的权限
  • resource_type — 要匹配的资源类型
  • conditions — 条件数组(组内使用 AND 逻辑 评估)

资源类型与权限

运行记录(Runs)没有自己的标签。运行权限(runs:read、runs:create、runs:share、runs:delete)会针对父项目的标签进行评估。

条件

conditions 数组中的每个条件指定:
  • attribute_name — 目前仅支持 resource_tag_key
  • attribute_key — 要匹配的标签键(例如 Environment、Team)
  • operator — 比较运算符
  • attribute_value — 用于比较的值
运算符
_if_exists 变体
每个运算符都有一个 _if_exists 变体:当标签键不存在时默认匹配,或者当标签存在时正常评估条件:
在 allow 策略中,_if_exists 变体允许访问那些匹配条件或没有指定标签键的资源。在 deny 策略中,它们会阻止那些匹配条件或没有该标签键的资源。

角色

role_ids 数组指定策略适用于哪些工作区角色。当拥有该角色的用户访问资源时,将对策略条件进行评估。 可以在创建策略时将策略附加到角色,也可以稍后通过 API 附加。

管理访问策略

访问策略由 Organization Admin 通过 LangSmith API 进行管理。在创建策略之前,请在工作区中设置资源标签。

ABAC 与 RBAC 的协同工作

在确定资源访问权限时,会同时考虑 RBAC 权限和 ABAC 策略:
  • ABAC deny 策略会覆盖 RBAC 权限
  • ABAC allow 策略即使没有 RBAC 权限也能授予访问权限
  • 如果没有 ABAC 策略匹配,系统将回退到 RBAC

策略评估结果

功能组合: 当 RBAC 和 ABAC 均已启用时:

示例场景

1. 标注者团队分配

允许标注者仅访问标记为其团队的数据集:

2. 阻止敏感数据

拒绝访问包含 PII 的数据集。由于 deny 策略覆盖 allow 策略,即使拥有 RBAC 权限的用户也会被阻止访问:

3. 使用通配符的基于应用的访问

允许工程师使用 Glob 模式访问“chatbot”系列的任何应用项目:

4. 客户端与用途隔离(AND 逻辑)

仅当两个条件都满足时才授予访问权限 —— 数据集用于训练且属于特定客户端:

5. 使用 _if_exists 访问客户端数据以及没有 Client 标签的资源

顾问没有 RBAC datasets:read 权限,但此策略授予他们访问标记为 Client=Acme-Corp 的数据集,以及完全没有 Client 标签的数据集的权限。标记为其他客户端(例如 Client=Other-Corp)的数据集仍会被阻止:

在创建时为资源打标签

当 ABAC 策略生效时,资源会根据其标签受到访问控制。为了确保资源在创建时立即受到保护,您可以使用 tag_value_ids 参数在创建请求中直接提供标签。 这适用于项目、数据集和 Prompt 的创建端点(包括 fork 和 clone 操作)。标签会在与资源创建相同的数据库事务中原子地应用。 有关完整细节和示例,请参阅资源标签指南中的创建时为资源打标签。
如果您依赖 LangSmith SDK 在 trace 摄取期间自动创建 trace 项目,则在自动创建路径上不可使用 tag_value_ids 参数。为确保 ABAC 策略从一开始就生效,请在开始 trace 会话之前,通过 POST /api/v1/sessions 使用所需的 tag_value_ids 预先创建项目。

故障排查

访问意外被拒绝?
  • 检查是否有 deny 策略匹配(deny 始终优先)
  • 检查用户是否具有 RBAC 权限或匹配的 allow 策略
  • 验证资源是否具有预期的标签和值
  • 带 _if_exists 运算符的 deny 策略会阻止缺少该标签键的资源
  • 对于区分大小写的运算符(equals、not_equals),检查是否存在大小写不匹配
  • 当一个条件组中有多个条件时,必须全部匹配(AND 逻辑)
访问意外被授予?
  • 检查 RBAC 权限(用户可能通过其角色获得访问权限)
  • 检查 allow 策略是否过于宽泛(例如使用了通配符)
  • _if_exists 运算符会匹配缺少该标签键的资源
策略未生效?
  • 确认策略已附加到正确的角色
  • 验证用户在工作区中拥有该角色
  • 检查 resource_type 和 permission 是否与要访问的资源匹配