Copilot云代理 是一个自治代理,有权访问代码,并且可以将更改推送到存储库。 这会带来一些风险。
GitHub 在可能的情况下已采取适当的缓解措施。 这提供了 Copilot云代理 一个强大的内置安全保护基础,可以通过遵循最佳做法指南进行补充。
未经验证的代码可能会引入漏洞
默认情况下,Copilot云代理 会检查其生成的代码以识别安全问题,并通过 Copilot 代码评审 获得对该代码的第二意见。 它尝试解决在完成拉取请求之前识别的问题。 这提高了代码质量,并减少了代码生成 Copilot云代理 时引入硬编码机密、不安全依赖项和其他漏洞的可能性。 Copilot云代理安全验证不需要GitHub Secret Protection, GitHub Code Security, or GitHub Advanced Security许可证。
- CodeQL 用于标识代码安全问题。
- 新引入的依赖项会根据 GitHub Advisory Database 检查恶意软件公告,以及任何通用安全漏洞评分系统评级为高或严重的漏洞。
- Secret scanning 用于检测敏感信息,例如 API 密钥、令牌和其他机密。
- 可以在会话日志中查看有关已执行的分析以及所 Copilot云代理 执行的操作的详细信息。 请参阅“管理智能体会话”。
(可选)可以禁用Copilot云代理使用的一个或多个代码质量和安全验证工具。 请参阅“配置 GitHub Copilot 云代理的设置”。
Copilot云代理 可以将代码更改推送到存储库
若要缓解此风险,GitHub:
- 限制可以触发代理的人员。 只有对存储库具有写入访问权限的用户才能触发 Copilot云代理 工作。 从不向代理显示没有写入权限的用户注释。
- 限制代理可以推送到的分支。
Copilot云代理
当智能体通过在现有拉取请求中提及
@copilot触发时,Copilot 对拉取请求的分支具有写入权限。 在其他情况下,会为copilot/创建新的 Copilot 分支,且智能体仅能推送到该分支。 智能体还受到任何分支保护和工作存储库所需检查的约束。 - 限制代理的凭据。
Copilot云代理 只能执行简单的推送操作。 它无法直接运行
git push或其他 Git 命令。 - 在合并之前需要人工审查。 由 Copilot云代理 创建的草稿的拉取请求必须由人为审阅和合并。 Copilot云代理 无法将其拉取请求标记为“准备审阅”,并且无法批准或合并拉取请求。
- 限制GitHub Actions工作流运行。 默认情况下,工作流不会被触发,直到 Copilot云代理 的代码经过审查,并且拥有存储库写入权限的用户点击“批准并运行工作流”按钮。 (可选)你可以配置为 Copilot 允许工作流自动运行。 请参阅“查看来自 Copilot 的输出”。
- 阻止要求 Copilot云代理 创建拉取请求的用户批准请求。 这维持了“必需审批”规则和分支保护中的预期控制。 请参阅“规则集的可用规则”。
Copilot云代理 有权访问敏感信息
Copilot云代理 有权访问代码和其他敏感信息,并可能会意外或由于恶意用户输入而泄露它。
若要缓解此风险, GitHub请 Copilot云代理限制对 Internet 的访问。 请参阅“自定义或禁用 GitHub Copilot 云代理的防火墙”。
AI 提示可能容易受到注入攻击
用户可以在分配给Copilot云代理的问题中包含隐藏信息,或者在留给Copilot云代理的评论中包含隐藏信息,这些都是提示注入的形式。
为降低此风险,GitHub** 在将用户输入传递给 Copilot云代理 前会过滤隐藏字符**:例如,作为 HTML 注释输入到问题或拉取请求评论中的文本不会传递给 Copilot云代理。
管理员可以忘记代理的工作
为了缓解此风险, Copilot云代理 设计为可审核和可跟踪。
- Copilot云代理 的提交由 Copilot 创作,分配问题或请求拉取请求更改的开发者标记为共同作者。 这样,可以更轻松地识别由 Copilot云代理 生成的代码,以及识别谁开始了任务。
- Copilot云代理的提交经过签名,因此在GitHub上显示为“已验证”。 这可以确保这些提交是由 Copilot云代理 完成的,并且未被更改。
- 会话日志和审核日志事件可供管理员使用。
- 每个由代理程序创建的提交消息都包含一个指向代理程序会话日志的链接,用于代码审查和审核。 请参阅“管理智能体会话”。
自动化无需人员启动每个任务即可运行
Automations 在计划或响应事件时自动运行 Copilot云代理 ,无需人员启动每个任务。 请参阅“关于 Copilot 自动化”。 这会带来一些额外风险,GitHub 可按如下方式加以缓解。
- 工作归因于创建自动化的人员。 由 自动化 创建的拉取请求和推送的代码,其操作归属为创建该 自动化 的用户。 就像该用户自己创建拉取请求时那样,他们无法批准该拉取请求,从而保留预期的“必需审批”控制机制。
- 你可以控制自动化可以使用哪些工具。 自动化事件触发时,来自不受信任的用户的输入可能会成为提示的一部分。 若要限制提示注入的影响,请准确选择可以使用的工具 自动化 ,因此它只能执行任务所需的操作。
- 默认情况下,不受信任的用户的事件将被忽略。 如果触发事件的用户没有对存储库的写访问权限,则 Automations 会默认忽略该存储库(提供了一个供用户自行配置的设置)。
- 工作流仍需要人工批准。 由 自动化 创建的问题或拉取请求可能会触发另一个 自动化。 与所有 Copilot云代理 工作一样, GitHub Actions 在具有写入访问权限的用户批准工作流之前,工作流不会在拉取请求上运行,这会阻止工作流作为此类链的一部分自动运行。