mcpField
I
indykite-authzen-evaluation

indykite-authzen-evaluation

github.com/indykite安全447 次安装2 天前更新
代码仓库

关于 indykite-authzen-evaluation

indykite-authzen-evaluation 是用于通过 IndyKite AuthZEN 查询单个授权决定的技能,判断某个主体能否对某个资源执行指定操作。它发送带上下文的请求,并读取当前 ACTIVE KBAC 策略评估所得的布尔结果;不负责编写策略。

主要功能

  1. 01构造主体、操作和资源请求
  2. 02向单次评估端点发送请求
  3. 03读取布尔授权结果
  4. 04检查策略、参数与图数据

适用场景

  1. 01在应用执行操作前检查授权
  2. 02排查单项授权结果为何为真或假

MCP 相关

该技能说明相同的决定语义也可通过 indykite-mcp-server 的 authzen_evaluate 工具调用;它本身通过 HTTP 请求 AuthZEN 端点。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/indykite/skills --skill indykite-authzen-evaluation

安装后在 Claude Code 中输入/indykite-authzen-evaluation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
evaluation-provision-server.json
references/
evaluation-reference.md
troubleshooting.md
scripts/
evaluate.sh

详细介绍

IndyKite AuthZEN - 单次授权决策

KBAC 决策会向 AuthZEN 端点提出一个问题:此主体可以对此资源执行此操作吗? 随后返回布尔值 decision。系统会根据当前处于 ACTIVE 状态的项目 2.0-kbac 策略对 IKG 进行求值,以得出决策。

此技能涵盖如何做出单次决策:构造 (subject, action, resource, context) 请求、发送请求并读取布尔值。此技能不会编写策略——决策所依据的策略(其 subject / actions / resource / condition.cypher)需通过 indykite-authzen-kbac-policies 编写。

这是 AuthZEN 系列中用于单次调用的技能:

需求端点技能
一次是/否决策/access/v1/evaluation此技能
一次做出多个决策/access/v1/evaluationsindykite-authzen-evaluations
主体可以对资源执行的操作/access/v1/search/actionindykite-authzen-search-action
主体在给定操作后可以操作的资源/access/v1/search/resourceindykite-authzen-search-resource
允许对资源执行某项操作的主体/access/v1/search/subjectindykite-authzen-search-subject
编写 / 管理 KBAC 策略Config APIindykite-authzen-kbac-policies

适用场景

当用户希望进行以下操作时,启用此技能:

  • 判断某个主体是否可以对某个资源执行某项操作(例如:“ada 能否在预算为 120000 的情况下对服务器 gpu-node-7 执行 PROVISION?”);
  • 在应用中通过实时授权检查来控制某项操作;
  • 排查单次决策返回 true 或 false 的原因。

不要启用此技能来编写或修改决策所依据的策略(indykite-authzen-kbac-policies),在一次调用中做出多个决策(indykite-authzen-evaluations),列举允许的操作 / 资源 / 主体,而不是测试一个三元组(搜索技能 -search-action / -search-resource / -search-subject),或返回或修改图数据(决策只有是/否,不会读取或写入数据)。

前提条件

  • 一个或多个处于 ACTIVE 状态的 KBAC 策略,其 subject.type / actions / resource.type 覆盖此三元组。如果没有,请先通过 indykite-authzen-kbac-policies 编写策略;没有匹配策略的决策结果就是 false。
  • 已为调用应用配置凭证的 AppAgent(凭证指南)。
  • IKG 中已填充主体和资源节点(以及条件所匹配的任何关系)。求值会读取图,不会为图填充数据。
  • 已准备好每个匹配策略所引用的部分参数,以便通过 context.input_params 传递。

如果缺少任何前提条件,请明确指出——先补齐条件,远比排查难以解释的 false 决策更省事。

步骤

1. 明确三元组及其上下文

确定问题的三个部分,以及每个请求的取值:

部分字段示例
主体subject.type + subject.idPerson / ada
操作action.namePROVISION
资源resource.type + resource.idServer / gpu-node-7
上下文context.input_params{ "max_price": 120000 }

subject.id / resource.id 是节点的 external_id;action.name 区分大小写。

2. 构建请求正文
{
  "subject":  { "type": "Person", "id": "ada" },
  "resource": { "type": "Server",    "id": "gpu-node-7"  },
  "action":   { "name": "PROVISION" },
  "context":  { "input_params": { "max_price": 120000 } }
}

仅当匹配策略的条件引用 $name 部分参数时,才提供 context.input_params;填写各键时不带前导 $,并保留其类型(数字仍为数字)。基于复合 IKG 的位置路由 3.0-kbac 策略(使用 USE graph.byName($region))也采用相同方式提供其逻辑位置——{ "region": "east" },这是项目 alias_mapping 中的键,而不是数据库名称;位置缺失或未知会返回 422,用户令牌的身份与 subject 不同则会返回 403(参见 references/evaluation-reference.md)。可直接使用的请求正文:assets/evaluation-provision-server.json。

3. 发送决策请求
POST <API_URL>/access/v1/evaluation

端点会验证调用应用(始终需要其 AppAgent 凭据),并可选地验证用户(访问令牌;仅在某些情况下适用,例如条件引用了令牌声明或范围)。有关各凭据应放入哪个请求标头,请参阅凭据指南。

可运行的 shell 辅助脚本会构建经过身份验证的请求:scripts/evaluate.sh——使用 --print 预览 curl(固定主机;令牌已隐藏)。

4. 读取决策
{ "decision": true }

true 表示至少有一个 ACTIVE 策略在其条件满足时,授权了 (subject, action, resource) 三元组。false 表示没有策略授权该三元组——可能是没有策略匹配该三元组,也可能是匹配策略的条件不满足所提供的 input_params 和图数据。false 决策是正常的 200 响应,并非错误。

5. 验证

如果决策结果与预期不符,请先按此清单逐项检查,再进行更改:

  1. 策略是否为 ACTIVE? 草稿或非活跃策略会被忽略。
  2. 三元组是否匹配? subject.type、action.name 和 resource.type 必须与策略的 subject.type、actions 和 resource.type 完全匹配(动词区分大小写)。
  3. 变量是否命名为 subject / resource? 条件只能通过这些保留名称绑定请求中的主体和资源。
  4. ID 是否为 external_id? subject.id / resource.id 会与节点的 external_id 匹配。ID 错误时不会匹配任何内容 → false。
  5. 是否提供了每个 $param? 缺少条件所需的 input_params 键会返回 422(errors: ["missing or wrong input params, '<name>'"]),而不是静默返回 false。
  6. 数据是否确实存在于 IKG 中? 确认主体节点、资源节点以及任何匹配的关系都存在。

完整的请求/响应架构、错误表和更深入的故障排查指南:references/evaluation-reference.md 和 references/troubleshooting.md。

结果

成功应用此技能后:

  • 对于具有有效 input_params 的允许 (subject, action, resource) 三元组,POST /access/v1/evaluation 会返回 {"decision": true};对于拒绝的三元组,则返回 {"decision": false}。
  • 缺少必需的 input_params 键时,会返回 422,应修正该问题,而不能误判为拒绝。
  • 同一个三元组可通过 indykite-authzen-evaluations 批量评估,也可通过 indykite-mcp-server 的 authzen_evaluate 工具调用,决策语义保持一致。

此技能中的文件

特定于 Agent 的说明

此技能使用通用 Markdown 说明,适用于 README 中列出的所有 Agent。Agent 必须能够发送 HTTP 请求(使用 curl、HTTP 客户端或 IndyKite Terraform 提供程序)。不需要 Claude Code hooks、Cursor @-mentions 或 Copilot 工作区上下文。

参考资料

评论

支持 Markdown