-
为所有组织启用: 在
values.yaml的commonEnv中添加以下环境变量:该环境变量对个人组织没有影响,因为个人组织未启用 RBAC。
-
设置身份验证。要通过 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_keyattribute_key— 要匹配的标签键(例如Environment、Team)operator— 比较运算符attribute_value— 用于比较的值
运算符
_if_exists 变体
每个运算符都有一个 _if_exists 变体:当标签键不存在时默认匹配,或者当标签存在时正常评估条件:
角色
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是否与要访问的资源匹配

