用途:面向 Yandex Cloud 上的 DataLens(datalens.ru)。RLSv2(rls2 字段)按 id 保存主体,而旧版 RLS(rls 文本配置)允许用名称;本技能通过 yc CLI(Cloud Organization Manager)把名称解析为 id,并可输出完整的 rls2 配置。
主要能力:两种模式。resolve 输入主体名称(登录名、邮箱、组名),输出 rls2 主体对象与未解析列表;convert 输入旧版 rls 配置(JSON {field_guid: "<text>"},可单字段或多字段,或单字段原始 RLS 文本),输出完整精确的 rls2 配置 {field_guid: [rules]}。用户→云主体 id(subject_claims.sub),组→组织组 id;subject_name 仅展示,subject_id 才用于强制执行。
用法:主体输入格式——用户直接写登录名或邮箱;组写 @group:<组名>;服务账号写 @sa:<服务账号 id>;全部行用 *;源级用户 id 用 userid。组名与服务账号 id 需先归一化。名称间可用逗号、换行或分号分隔(不能用空格)。示例命令:python3 scripts/rls_tool.py resolve --org-id <ORG_ID> alice@example.com "@group:Analysts" bob;转换:python3 scripts/rls_tool.py convert --org-id <ORG_ID> --input old_rls.json。
前置条件与限制:需 Python 3.9+(仅标准库)、已安装并认证的 yc CLI(IAM-token 会话,OAuth Yandex ID 已弃用),以及目标组织的 organization-manager.viewer 或更高角色,否则会 PermissionDenied。用户匹配按 preferred_username 与 email 不区分大小写;裸登录名(如 ivan)按 ivan@yandex.ru 处理,联邦组织需传完整邮箱。匹配多个主体时不解析。后端拒绝同时设置 rls 与 rls2,只能发送 rls2。云 id 不适用于其他 DataLens 安装。未解析项在 convert 中标记为 notfound,在 resolve 中列于 unresolved。认证检查:python3 scripts/rls_tool.py auth-check;切勿输出或记录任何 token。测试:python3 tests/test_rls_tool.py。