跳至主要内容

GitHub Codespaces 安全

GitHub Codespaces 安全架构概览,以及帮助您维持安全性并将攻击风险降至最低的指南。

代码空间安全概览

GitHub Codespaces 默认经过安全加固。因此,您需要确保您的软件开发实践不会降低代码空间的安全姿态。

本指南描述了 GitHub Codespaces 如何保持您的开发环境安全,并提供了一些帮助您在工作时维持安全的最佳实践。和所有开发工具一样,请仅在您了解并信任的仓库内打开和工作。

环境隔离

GitHub Codespaces 旨在让各代码空间彼此独立,且每个代码空间都有各自的虚拟机和网络。

隔离的虚拟机

每个代码空间都托管在其全新构建的虚拟机(VM)上。两个代码空间永不共享同一台 VM。

每次重新启动代码空间时,都会部署到一台带有最新安全更新的新 VM。

隔离的网络

每个代码空间都有自己的隔离虚拟网络。我们使用防火墙阻止来自互联网的入站连接,并防止代码空间在内部网络间相互通信。代码空间允许向互联网发起出站连接。

身份验证

您可以使用网页浏览器或 Visual Studio Code 连接到代码空间。如果从 VS Code 进行连接,系统会提示您使用 GitHub 进行身份验证。

每次创建或重新启动代码空间时,系统会为其分配一个具有自动到期时间的新 GitHub 令牌。此期限足以让您在典型工作日内无需重新认证即可继续工作,同时降低在停止使用代码空间后留下未关闭连接的风险。

令牌的作用域会根据您对创建代码空间的仓库的访问权限而变化。

  • 如果您对仓库拥有写入权限: 该令牌的作用域为对仓库的读/写访问。
  • 如果您仅拥有对仓库的读取权限: 该令牌仅允许从源仓库克隆代码。如果您在代码空间中提交或推送新分支,GitHub Codespaces 会自动为该仓库创建一个分叉(或在您已有分叉时将代码空间链接到该分叉)。令牌随后会更新为对该分叉拥有读写访问。有关更多信息,请参阅 在代码空间中使用源代码控制
  • 如果您已授权代码空间访问其他仓库: 该令牌的作用域为对源仓库以及您已授权访问的任何其他仓库的读取或读写权限。有关更多信息,请参阅 在代码空间中管理对其他仓库的访问

代码空间连接

您可以使用 GitHub Codespaces 服务提供的 TLS 加密隧道连接到代码空间。仅代码空间的创建者可以连接到该代码空间。所有连接均通过 GitHub 进行身份验证。

如果需要让外部访问代码空间中运行的服务,可以为私有或公开访问启用端口转发。

端口转发

如果您需要连接运行在代码空间内的服务(例如开发用的网页服务器),可以配置端口转发,使该服务在互联网上可访问。

组织所有者可以限制公开或组织内部可用转发端口的能力。有关详细信息,请参阅 限制转发端口的可见性

私有转发端口: 可在互联网上访问,但仅代码空间创建者在通过 GitHub 身份验证后可访问。

组织内部公开转发端口: 可在互联网上访问,但仅同一组织的成员在通过 GitHub 身份验证后可访问。

公开转发端口: 可在互联网上访问,任何人均可访问,无需身份验证。

所有转发端口默认均为私有,这意味着在访问端口之前必须先进行身份验证。对代码空间私有转发端口的访问受带有 3 小时有效期的身份验证 Cookie 控制。Cookie 失效后,需要重新进行身份验证。

公开转发端口在您移除并重新添加该端口,或重新启动代码空间时会自动恢复为私有。

您可以使用 “Ports” 面板将端口配置为公开或私有访问,并在不再需要时停止端口转发。有关详细信息,请参阅 在代码空间中转发端口

您的 Codespaces 的良好安全实践

Codespaces 默认经过安全加固。为帮助维持此安全姿态,我们建议您在开发过程中遵循良好的安全实践。

  • 和所有开发工具一样,请仅在您了解并信任的仓库内打开和工作。
  • 在向代码空间添加新依赖项之前,请检查它们是否得到良好维护,并且是否会发布更新以修复其代码中发现的安全漏洞。

使用开发环境机密访问敏感信息

在代码空间中使用敏感信息(例如访问令牌)时,请始终使用开发环境机密。您可以在代码空间中将机密作为环境变量访问,包括在终端中。例如,您可以在代码空间的终端中运行 echo $SECRET_NAME 来查看某个开发环境机密的值。

每当代码空间恢复或创建时,机密值会复制到环境变量中,并在机密更改时同步。

如果您没有对代码空间所在仓库的写入权限,开发环境机密不会被复制到环境中。

有关机密的更多信息,请参阅

与他人的贡献和仓库协作

当您从分叉的 PR 分支创建代码空间时,代码空间中的令牌会根据仓库是公开还是私有而有所不同。

  • 对于私有仓库,代码空间会获得对分叉和父仓库的访问权限。
  • 对于公开仓库,代码空间仅能访问分叉并在父仓库上打开 PR。

在这些场景中,我们还会进一步保护您,防止任何代码空间机密被注入到环境中。有关更多信息,请参阅 管理针对 GitHub Codespaces 的账户特定机密

注意

如果您从仅具读取权限的分叉创建代码空间,然后在代码空间中提交或推送新分支,代码空间中的令牌作用域会发生变化。在此情况下,GitHub Codespaces 会自动创建新的分叉,或将您的代码空间链接到您账户拥有的现有分叉,并将令牌更新为对新链接的分叉拥有读写访问。有关更多信息,请参阅 在代码空间中使用源代码控制

当 GitHub Codespaces 将您的代码空间链接到现有分叉时,该分叉可以是您创建代码空间时所基于的分叉的再分叉,也可以是您对共享上游仓库的个人分叉。

其他良好实践

在使用 GitHub Codespaces 时,还有一些其他的良好实践和风险需要您了解。

了解仓库的 devcontainer.json 文件

创建代码空间时,如果在您的仓库中发现 devcontainer.json 文件,系统会解析该文件并据此配置代码空间。devcontainer.json 文件可能包含强大的功能,例如安装第三方扩展以及运行 postCreateCommand 中提供的任意代码。

更多信息,请参阅 dev 容器简介

通过功能授予访问权限

某些开发功能可能会为您的环境增加风险。例如,提交签名、注入环境变量的机密、已认证的容器镜像访问以及软件包访问都可能带来潜在的安全问题。我们建议仅将访问权限授予真正需要的人,并采用尽可能严格的策略。

使用扩展

您安装的任何额外 VS Code 扩展都可能引入更多风险。为帮助降低此风险,请仅安装可信的扩展,并始终保持其为最新版本。

使用设置同步

VS Code 的设置同步功能可能会将潜在的恶意内容在设备之间传播。默认情况下,浏览器中打开的代码空间已禁用设置同步。如果您正在为不信任的仓库创建代码空间,请在浏览器中打开代码空间并保持设置同步关闭。

如果您在用户偏好中启用了设置同步,并希望将代码空间中的设置更改同步到其他 VS Code 实例,我们建议您仅添加受信任仓库的列表,而不是信任所有仓库。当您从受信任仓库创建代码空间时,您在代码空间中所做的设置更改会同步到云端的缓存设置中,然后再转移到您的设备上。有关管理设置同步的更多信息,请参阅 为您的账户个性化 GitHub Codespaces

© . This site is unofficial and not affiliated with GitHub, Inc.