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