自动化运行正常,却没有人能说明情况
上个月有人制作的 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 密钥即可开始。 价格和提供条件可能会变化。
- 通过Tines 3B 免费开始入口创建 Explore 租户并登录。 首次测试时请不要准备真实 API 密钥或生产数据。
- 打开 General 空间或个人空间,找到“What do you want to do?”输入框。 新请求的结果会生成在私有的First draft中。
- 输入以下请求。
请创建一个不调用外部 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 和这些判定项目不是评估产品性能的指标,而是用于无副作用首次运行的示例。 - 先不要点击 Run;请先展开并检查所有生成的步骤和连接。 确认不存在 HTTP 或 API 调用、Slack 或电子邮件发送、文件保存或生产数据修改步骤。如果生成了与请求不同的步骤,请通过聊天要求删除,然后再次检查整个流程。草稿在手动运行时仍可能调用外部系统。
- 只保留无副作用步骤后,在起始步骤点击Run。 Run 会一并执行所选步骤及其连接的后续步骤。Solo run只执行所选的一个步骤,因此不适合本次需要检查最终审核结果的测试。
- 检查执行状态和最后一步的 stdout。 如果状态为Success,且最后的 stdout 中出现指出 owner 缺失、凭证位置为
source_code、last_reviewed 缺失的结构化结果,即为成功。Stdout 是该步骤的输出;如果有下一步,它会被传递到该步骤的 stdin。 - 即使检查完结果,也请保持在 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



