ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PraisonAI Recipe 安全能力实战指南:SBOM 生成、Lockfile 校验、依赖审计与 PII 脱敏

PraisonAI Recipe 安全能力实战指南:SBOM 生成、Lockfile 校验、依赖审计与 PII 脱敏 PraisonAI Recipe 安全能力实战指南SBOM 生成、Lockfile 校验、依赖审计与 PII 脱敏【免费下载链接】PraisonAIPraisonAI — Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous self-improving agents that research, plan, code, and execute tasks. Deployed in 5 lines of code with built-in memory, RAG, and support for 100 LLMs.项目地址: https://gitcode.com/GitHub_Trending/pr/PraisonAI本篇技术指南以 examples/security/README.md 为核心系统讲解 PraisonAI 为 Recipe可复用的多智能体任务配方提供的四大安全能力SBOM软件物料清单生成、Lockfile 校验、依赖漏洞审计与 PII个人身份信息检测脱敏。读完本文你将掌握通过praisonai recipeCLI 与 Python API 为自有 Recipe 建立供应链安全基线的方法并能结合 security.py 的源码理解每条命令背后的实现原理。一、安全能力总览PraisonAI 的 Recipe 系统允许开发者以自然语言生成、打包、分发和运行多智能体工作流随之而来的是供应链与数据安全诉求。官方安全示例 security_example.py 一次性演示了四项能力能力解决的问题CLI 入口SBOM 生成盘点 Recipe 的全部组件框架、Python 依赖、工具、外部程序praisonai recipe sbomLockfile 校验确认依赖锁定文件存在且格式合法保证可复现构建praisonai recipe validate --require-lockfile依赖审计借助 pip-audit 检查依赖是否存在已知漏洞praisonai recipe auditPII 脱敏在数据进入或离开 Recipe 时检测、遮蔽邮箱/电话/SSN/信用卡等敏感信息通过TEMPLATE.yaml的data_policy配置这些功能全部实现在 src/praisonai/praisonai/recipe/security.py 中统一封装为generate_sbom、validate_lockfile、audit_dependencies、redact_pii、detect_pii、sign_bundle、verify_bundle等函数同时被 CLI 层与 Python SDK 层复用。二、快速开始安装 PraisonAI 后直接运行官方示例脚本即可看到完整的执行链路pip install praisonai python security_example.py该脚本security_example.py会在临时目录中构造一个样例 Recipe包含TEMPLATE.yaml与lock/requirements.lock随后依次执行生成 CycloneDX SBOM → 校验 Lockfile → 审计依赖 → 检测并脱敏 PII。其输出大致如下SBOM Generation Format: CycloneDX Spec Version: 1.4 Components: 5 - praisonaiversion (library) - openai1.0.0 (library) - requests2.31.0 (library) - pydantic2.0.0 (library) - web_search (application) Lockfile Validation Valid: True Lockfile: .../lock/requirements.lock Type: pip Dependency Auditing Dependencies: 3 Vulnerabilities: 0 Passed: True PII Redaction Found 2 PII instance(s) - email at customer.email - phone at customer.phone Original email: john.doeexample.com Redacted email: [REDACTED:email]2.1 脚本内部如何构造样例 Recipe脚本中的create_sample_recipe()给出了一个最小 Recipe 骨架它是后续所有安全命令的输入对象template { name: secure-recipe, version: 1.0.0, description: A recipe with security features, requires: { tools: [web_search, file_reader], external: [ffmpeg], env: [OPENAI_API_KEY], }, } # TEMPLATE.yaml 落盘 lock/requirements.lock 落盘openai1.0.0 等三行这里揭示了安全功能的输入约定Recipe 的清单文件为TEMPLATE.yaml依赖锁定文件约定存放在lock/目录下支持uv.lock、requirements.lock、poetry.lock三种形态也兼容根目录的requirements.txt。这与 generate_sbom 实现 中读取recipe_path / TEMPLATE.yaml、recipe_path / lock的逻辑完全对应。三、SBOM 生成让 Recipe 的组成透明可审计SBOMSoftware Bill of Materials是供应链安全的基石。PraisonAI 支持两种主流标准格式CycloneDX 1.4与SPDX 2.3。3.1 CLI 用法# 生成 CycloneDX SBOM默认格式 praisonai recipe sbom ./my-recipe --format cyclonedx -o sbom.json # 生成 SPDX SBOM praisonai recipe sbom ./my-recipe --format spdx -o sbom.json--format取值仅支持cyclonedx或spdx-o指定输出文件若不带-oCLI 会直接在终端打印组件摘要前 10 个组件及总数。参数解析与输出逻辑见 cli/features/recipe.py 的 cmd_sbom。3.2 源码视角SBOM 由哪些组件构成从 generate_sbom 的实现可以清晰看到组件收集的完整链路框架本体始终将praisonai自身作为library类型组件写入并附带pkg:pypi/praisonaiversion的 purlPackage URL版本号来自praisonai.__version__Python 依赖从lock/目录依次尝试解析uv.lock→requirements.lock→poetry.lock最后回退到 Recipe 根目录的requirements.txt每个依赖同样生成 purl见 _get_python_deps。三种锁文件的解析器分别对应_parse_uv_lock、_parse_requirements_lock正则^([a-zA-Z0-9_-])([^\s;])解析包名版本、_parse_poetry_lock工具依赖requires.tools中的每一项以application类型进入组件表支持字符串与{name, version}字典两种写法外部依赖requires.external如 ffmpeg 等系统级程序同样以application类型收录。最终 CycloneDX 输出包含bomFormat: CycloneDX、specVersion: 1.4、基于 UUID5 的serialNumber、metadata生成工具为praisonai-sbom以及完整的components数组SPDX 输出则采用SPDX-2.3与CC0-1.0数据许可以packages数组承载组件。若传入未知格式会抛出SecurityError。# Python API 等价用法来自 security_example.py from praisonai.recipe.security import generate_sbom sbom generate_sbom(recipe_dir, formatcyclonedx) print(sbom[bomFormat], sbom[specVersion], len(sbom[components]))四、Lockfile 校验锁定可复现的依赖基线没有 Lockfile 的 Recipe 无法保证「今天能跑、明天也能跑」也无法为审计提供精确的版本基线。PraisonAI 的 Lockfile 校验负责两件事确认锁定文件存在、确认其格式可被正确解析。4.1 CLI 用法# 校验 Recipe包含 Lockfile 检查 praisonai recipe validate ./my-recipe --require-lockfile--require-lockfile使校验进入严格模式当 Recipe 找不到任何锁文件时校验失败。这一行为对应的底层实现是 validate_lockfile 中的strictTrue分支——一旦_find_lockfile返回空立即返回validFalse并写入错误No lockfile found非严格模式下同样的场景只产生警告No lockfile found - dependencies may not be reproducible不阻断流程。4.2 源码视角锁文件发现顺序与类型判定_find_lockfile 按固定优先级探测六个候选位置lock/uv.lock → lock/requirements.lock → lock/poetry.lock → 根目录 uv.lock → 根目录 requirements.lock → 根目录 poetry.lock找到后按文件名判定类型含uv.lock为uv含poetry.lock为poetry其余归为pip随后调用对应的解析器做格式合法性检查解析失败则validFalse并附带Invalid lockfile format: ...错误。校验结果统一返回{valid, lockfile, lockfile_type, errors, warnings}结构方便上层做 CI 断言。# Python API对没有 lockfile 的目录做严格校验来自 security_example.py result validate_lockfile(no_lock_dir, strictTrue) print(result[valid], result[errors]) # False [No lockfile found]五、依赖审计借助 pip-audit 发现已知漏洞依赖审计将 Recipe 的锁定依赖与公开漏洞库比对输出一份结构化审计报告。5.1 CLI 用法# 审计依赖 praisonai recipe audit ./my-recipe # 严格审计发现漏洞时以非零退出码失败便于 CI 拦截 praisonai recipe audit ./my-recipe --strict非严格模式下即使发现漏洞命令仍返回成功退出码 0仅在终端用红色标注漏洞清单加上--strict后一旦report[passed]为False即返回退出码 2EXIT_VALIDATION_ERROR可无缝接入流水线。逻辑见 cli/features/recipe.py 的 cmd_audit。5.2 源码视角审计报告结构与漏洞检测audit_dependencies 返回的报告包含六个字段字段含义recipeRecipe 目录名audited_at审计时间UTC ISO 格式lockfile命中的锁文件路径无则为Nonedependencies解析出的依赖列表名称 版本vulnerabilities已知漏洞列表warnings警告如缺少锁文件、存在过期依赖passed是否通过存在漏洞时为False漏洞检测的底层是调用python -m pip_audit --format json子进程_check_vulnerabilities设 60 秒超时并将每条漏洞规范化为{package, version, vulnerability_id, description, fix_versions}。若环境中未安装 pip-audit该步骤静默跳过不抛错此时vulnerabilities为空列表——这也是官方示例输出Vulnerabilities: 0的前提之一。六、PII 检测与脱敏保护进入 Recipe 的敏感数据Recipe 在运行时会接收用户输入工单、邮件、客户资料等PII 治理是数据合规的关键一环。PraisonAI 内置正则驱动的 PII 检测引擎支持三种策略模式与五种内置敏感类型。6.1 在 TEMPLATE.yaml 中配置数据策略data_policy: pii: mode: redact # allow, deny, or redact fields: - email - phone - ssn - credit_cardmode: allow—— 不处理数据原样通过mode: redact—— 命中模式替换为[REDACTED:field]占位符mode: deny—— 一旦检测到 PII 直接抛出SecurityError阻止数据继续流转。fields省略时默认启用全部内置类型。data_policy作为 Recipe 元数据贯穿核心链路在 recipe/core.py 中通过template.raw.get(data_policy, {})注入执行环境并在 recipe/models.py 中作为Recipe模型的data_policy字段持久化recipe/history.py 还会依据其中的export_allowed、retention_days决定运行历史是否允许导出与保留时长。6.2 源码视角内置 PII 模式与递归扫描内置模式定义在 PII_PATTERNS类型正则模式email[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}phone\b\d{3}[-.]?\d{3}[-.]?\d{4}\bssn\b\d{3}-\d{2}-\d{4}\bcredit_card\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\bip_address\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\bredact_pii 对dict/list/str递归遍历其他类型原样返回detect_pii 则在脱敏前做只读检测返回形如{type: email, path: customer.email, sample: john...}的定位信息——sample只保留前 4 个字符并加省略号避免检测日志本身泄露敏感内容。这也是示例脚本第 6 步「检测不脱敏」、第 7 步「按策略脱敏」两步走的实现依据from praisonai.recipe.security import redact_pii, detect_pii detections detect_pii(sample_data) # 只检测返回类型与路径 redacted redact_pii(sample_data, policy) # 按 policy 脱敏 # policy {pii: {mode: redact, fields: [email, phone]}}七、进阶Bundle 签名与校验供应链完整性除文档列出的四项能力外security.py 还提供了分发场景的完整性保障——对打包后的.praisonBundle 做 RSA 签名与验证# 用 PEM 私钥签名 Bundle praisonai recipe sign ./my-recipe.praison --key private.pem -o my-recipe.sig # 用 PEM 公钥验证签名 praisonai recipe verify ./my-recipe.praison --key public.pem --signature my-recipe.sig实现上sign_bundle 先对 Bundle 计算 SHA-256 哈希再用cryptography库以RSA-PKCS1v15-SHA256签名签名元数据哈希、算法、签名十六进制、时间戳写入.praison.sigJSONverify_bundle 反向操作先比对当前文件哈希与签名中的哈希不一致即提示文件可能被篡改再验签。CLI 入口见 cmd_sign / cmd_verify两者均要求先pip install cryptography否则返回EXIT_MISSING_DEPS退出码 6。在将 Recipe 发布到 Registry 前执行签名校验可以防止供应链投毒。八、在 CI 中落地安全基线结合上述 CLI 的退出码语义features/recipe.py 的退出码常量0 成功、2 校验失败、6 缺依赖等可以构造一条开箱即用的安全流水线# 1. 校验结构 强制锁文件 praisonai recipe validate ./my-recipe --require-lockfile || exit 2 # 2. 生成 SBOM 存档 praisonai recipe sbom ./my-recipe --format cyclonedx -o sbom.json praisonai recipe sbom ./my-recipe --format spdx -o sbom.spdx.json # 3. 严格依赖审计有漏洞即失败 praisonai recipe audit ./my-recipe --strict || exit 2三点落地建议均基于源码行为推断非官方承诺先装 pip-audit漏洞检测依赖python -m pip_audit未安装时审计静默降级为「只盘点依赖」不会报错因此 CI 中应显式安装以保证检测生效统一锁文件形态_find_lockfile的探测优先级决定了lock/目录下的uv.lock优先于根目录requirements.txt建议全团队统一采用lock/目录 单一锁文件PII 策略按场景分级对外接收自由文本的 Recipe 使用redact保留可用性对需要严格合规的场景使用deny宁可拒绝也不外泄再配合detect_pii记录命中路径形成审计日志。九、总结PraisonAI 的 Recipe 安全模块recipe/security.py以四个函数覆盖了 Recipe 从「组装」到「分发」再到「运行」的安全闭环generate_sbom让组成透明validate_lockfile保证可复现audit_dependencies拦截已知漏洞redact_pii/detect_pii守住数据合规底线而sign_bundle/verify_bundle则为分发环节补上完整性校验。通过praisonai recipe sbom|audit|validate|sign|verify这组 CLI 与data_policy配置开发者无需编写额外代码即可为每一个 Recipe 建立可量化的供应链与数据安全基线并轻松接入 CI 流水线。【免费下载链接】PraisonAIPraisonAI — Hire a 24/7 AI Workforce. Stop writing boilerplate and start shipping autonomous self-improving agents that research, plan, code, and execute tasks. Deployed in 5 lines of code with built-in memory, RAG, and support for 100 LLMs.项目地址: https://gitcode.com/GitHub_Trending/pr/PraisonAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表