自动化运行正常,却没有人能说明情况

上个月有人制作的 Slack 报告机器人,今天仍在正常发送消息。但创建者已调到其他团队;当被问及它以何种权限访问 Google Sheets 和 Slack,以及 API 密钥是否写在代码中时,没有人能给出明确答复。

AI 编程工具让小型内部应用和脚本能够快速构建,但说明所有者、凭证、权限和执行记录这件事并不会自动得到解决。Tines 将 AI 构建的软件在 IT 和安全团队可见性之外连接系统与数据的现象称为“野生代码(Wild Code)”。 不过,这并不是公认的安全分类,而是 Tines 提出的产品与市场框架。

这里的核心并不是如何阻止自动化,而是如何把代码直接持有密钥并调用外部系统的架构,拆分为连接器、隔离执行,以及私有草稿与实时权限。

风险因“无边界连接”而增大,而非 AI 本身

首先要确认的不是 AI 编写代码的比例,而是这些代码拥有的连接权限。IBM 在 2026 年 1 至 4 月对来自 33 个地区、19 个行业的 2,000 名 IT、技术和 AI 决策高级管理人员进行调查,结果显示,77% 的受访者认为 AI 采用速度已超过当前治理能力,70% 的受访者认为 IT 无法跟踪业务团队部署技术的速度。 这不是某家公司未获批准自动化的比例,但它是一项反映运营问题的认知调查:越来越多的工具难以在中央层面得到说明。

将凭证与代码一同处理的习惯,也在公开仓库中留下了痕迹。GitGuardian 报告称,2025 年在公开 GitHub 的 MCP 相关配置文件中发现了 24,008 个唯一密钥,其中 2,117 个在检查时仍然有效。 这不能泛化为所有内部自动化的暴露率,但足以警示我们:配置文件也可能像源代码一样成为泄露路径。

生成的代码本身也应纳入审查范围。Veracode 让超过 100 个 LLM 完成 80 个由 Java、JavaScript、C# 和 Python 构成的单函数补全任务,并通过 SAST 进行检查。结果显示,所有模型与任务组合中有 45% 检测到已知安全缺陷。 这并不意味着完整的真实应用中有 45% 存在漏洞,但说明即使是小型函数,在部署前也不应跳过静态分析和权限审查。

Tines 3B 转移的是凭证和执行边界

Tines 3B 在实践上的差异,在于将密钥从工作流逻辑中移出。API 密钥和 OAuth 令牌等凭证存储在连接器中,而不是单个步骤中;当请求 URL 与连接器配置的模式匹配时,凭证会附加到外部请求中。根据官方说明,密钥会通过代理在运行时注入,因此不会直接暴露给构建者、AI 或生成的代码。

这并不是仅将可连接服务限制在 Tines 预设列表中的架构。您还可以创建自定义 API 密钥、OAuth、远程 MCP 和数据库连接器。 因此,安全性与其说取决于产品名称,不如说取决于谁可以创建连接器,以及 URL 模式和令牌权限被收窄到何种程度。

控制点边界模糊的自动化在 3B 中应检查的配置
凭证直接输入代码、配置文件或聊天中存储在连接器中,并指定目标 URL 模式
执行在一个进程中连续执行多个任务每个步骤在独立的沙盒和网络环境中执行
变更修改后立即启用计划任务和 Webhook在私有草稿中手动测试后再推送到实时版本
追踪依赖创建者的记忆和个人日志对 3B 管理的工作流进行监控、审计和版本管理

隔离和代理不能替代最小权限原则。 如果 URL 模式设得过宽,或使用管理员级令牌,错误调用的影响也会扩大。此外,官方资料确认的监控范围是由 3B 管理的工作流。没有依据可以断定它会自动发现平台外已在运行的个人脚本和应用。

从无需安装、没有外部传输的草稿开始

首次运行的成功标准不是实际发送 Slack 消息,而是在输入示例自动化信息时,以结构化结果找出缺失的所有者、存放在代码中的凭证和缺失的审查日期,同时不对外部系统造成任何变更。

Explore 免费版目前提供不限数量的用户、空间和连接器,3 个实时工作流以及一次性 50 美元的 AI 使用额度。托管的 Claude 和 OpenAI 提供商也默认配置完成,因此无需单独准备提供商 API 密钥即可开始。 价格和提供条件可能会变化。

  1. 通过Tines 3B 免费开始入口创建 Explore 租户并登录。 首次测试时请不要准备真实 API 密钥或生产数据。
  2. 打开 General 空间或个人空间,找到“What do you want to do?”输入框。 新请求的结果会生成在私有的First draft中。
  3. 输入以下请求。
    请创建一个不调用外部 API 的手动运行工作流。第一步输出以下示例 JSON:{"name":"weekly-report-bot","owner":"","purpose":"Slack 每周报告","systems":["Slack","Google Sheets"],"credential_location":"source_code","last_reviewed":""}。下一步必须检查 owner、credential_location 和 last_reviewed,并将缺失或有风险的项目以 JSON 数组输出到 stdout。请不要发出外部请求、发送消息、保存文件或修改生产数据。
    此 JSON 和这些判定项目不是评估产品性能的指标,而是用于无副作用首次运行的示例。
  4. 先不要点击 Run;请先展开并检查所有生成的步骤和连接。 确认不存在 HTTP 或 API 调用、Slack 或电子邮件发送、文件保存或生产数据修改步骤。如果生成了与请求不同的步骤,请通过聊天要求删除,然后再次检查整个流程。草稿在手动运行时仍可能调用外部系统。
  5. 只保留无副作用步骤后,在起始步骤点击Run。 Run 会一并执行所选步骤及其连接的后续步骤。Solo run只执行所选的一个步骤,因此不适合本次需要检查最终审核结果的测试。
  6. 检查执行状态和最后一步的 stdout。 如果状态为Success,且最后的 stdout 中出现指出 owner 缺失、凭证位置为 source_code、last_reviewed 缺失的结构化结果,即为成功。Stdout 是该步骤的输出;如果有下一步,它会被传递到该步骤的 stdin。
  7. 即使检查完结果,也请保持在 First draft 状态。 计划、Web 请求和电子邮件触发器会在实时版本中自动运行,因此本次不要点击Push live。

如果无法在输入框中使用模型,请先检查租户类型和权限。 Explore 默认提供托管服务商,而付费租户可能需要配置自己的 AI 提供商。 如果因组织策略无法注册,或没有所需空间权限,请不要将生产数据迁移到任意个人账户;请向管理员申请获批准的测试空间。

连接真实 API 时,请同时收窄 URL 和权限

只有在完成示例检查后,才添加外部连接。拥有创建连接器权限的用户应在Connectors中注册用于测试的最小权限凭证,并根据实际调用的主机和路径严格指定 URL 模式。然后设置只读或无副作用的测试 URL 和 HTTP 方法来检查连接。测试成功后,状态会显示为Active。

如果将测试 URL 和方法留空,可能会跳过连接检查并保持Untested状态。 Untested 并不表示凭证确实可用。如果没有安全的测试端点,请不要直接用生产数据进行验证;应先准备独立的测试环境。

只有当草稿读取和写入的数据完全符合预期时,才考虑推送到实时版本。官方文档显示,Push live 过程包含预检,包括步骤测试;但即使检查失败,用户仍可继续发布。 预检是警告机制,而不是绝对的部署阻断线。

迁移现有自动化前,先填好这四项。

  • 所有者:能够响应故障和权限变更的人
  • 目的:接收什么输入,并在哪里使用
  • 凭证:存储位置、权限范围和轮换日期
  • 执行边界:是否有外部传输、数据变更或自动触发器

如果有任何一项不清楚,请不要立即迁移到实时版本,而应在示例数据草稿中重新说明其行为。减少“野生代码”的第一步不是购买新产品,而是让当前正在运行的自动化变得可解释。

如果想进一步了解

Making Tines 3B 您可以了解 Tines 产品团队如何将“野生代码”定义为一个问题,并将其反映到产品架构中。 tines.com

Credentials | Tines 3B Docs 您可以了解将凭证存储在连接器中的方式,以及目标 URL 模式为何重要。 docs.3b.tines.com

Understand how your workflows run 您可以了解执行整个流程的 Run 与只执行一个步骤的 Solo run 之间的区别,以及按步骤隔离的结构。 docs.3b.tines.com