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云代理 执行的操作的详细信息。 请参阅“跟踪 GitHub 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云代理 完成的,并且未被更改。
- 会话日志和审核日志事件可供管理员使用。
- 每个由代理程序创建的提交消息都包含一个指向代理程序会话日志的链接,用于代码审查和审核。 请参阅“跟踪 GitHub Copilot 的会话”。