不受信任的构建
Untrusted Builds 部分允许您设置变更验证过程,旨在防止 TeamCity 运行外部用户编写的恶意代码。
常见信息
当您的 VCS Root(VCS 根) 目标定位到允许外部用户通过拉取请求提交更改的公共仓库时,TeamCity 可以运行恶意代码,且当新的更改被检测到时,VCS 触发器 会自动启动新的构建,并且满足以下任一条件:
Pull Request 功能已启用,其设置允许来自所有用户的构建更改(拉取请求筛选设置为“所有人”)。
项目的分支规格包括拉取请求分支(例如,对于 GitHub 是
refs/pull/*
)。
在这种情况下,外部用户可以复制您的公共存储库,引入恶意更改并发送拉取(合并)请求。 TeamCity 将检测到此请求,并触发一个包含这些更改的新构建。
根据具体的构建配置设置和所需的行为,您可能需要进行以下调整:
为了防止 TeamCity 自动构建拉取请求分支,修改您的 VCS 触发器的分支规格。 这个解决方案并不能完全降低安全风险,因为拥有触发构建权限的 TeamCity 用户可以在没有适当代码审查的情况下手动启动它们。
要忽略外部用户发送的请求,请在 Pull Requests 功能的设置中设置按作者筛选。 这个选项完全切断了外部用户的请求,使他们的分支无法从 TeamCity 访问。
为了推迟构建外部用户的请求,直到他们通过您的受信任的审查者的强制性验证,配置 Untrusted Builds 设置。 此配置不依赖于您的触发器设置,并且对自动(由触发器)和手动(由 TeamCity 用户)启动的构建都需要验证。
配置不受信任的构建设置
对应于不受信任的构建的设置在项目级别上配置,意味着它们影响该项目及其子项目拥有的所有构建配置。
导航至项目设置(Administration | <Your_Project>),并在侧边栏切换到 Untrusted builds 部分。
选择 Default action。
什么也不做—— 处理外部用户编写的更改的构建无需额外的授权就可以开始。
取消构建 — TeamCity 取消处理外部用户编写的更改的构建。 这包括由 Pull Request 功能启动的构建和手动开始的构建。
需要审批 — 处理外部用户编写的更改的构建已经排队,但在所需的审查者批准之前,不会开始。
选择是否应记录不受信任的构建。 TeamCity 在 构建日志 中警告您,此构建不可信...
...同时将相应的消息写入到 teamcity-server.log (无论选择的默认操作是什么)。
[2024-02-21 11:31:05,337] WARN — jetbrains.buildServer.SERVER — Build(promotion id: 7004, configuration id: MyProject_Build) detected as untrusted. Reasons: {Pull request from a fork in a public repository (target repository url: https://github.com/...)} Build URL: http://localhost:8111/buildConfiguration/MyProject_Build/-1使用 审批规则 字段来指定应该审查接收的更改并批准或阻止相应构建的用户。 使用
用户:<用户名>
语法来指定个别用户,或者将所有受信任的评审者添加到专用的 用户组,并使用群组:<群组键>:<计数>
语法。count
是允许构建所需的投票数量。设置Timeout(以分钟为单位)以自动取消超过此阈值但仍未验证的排队构建。
如果 手动启动构建批准 设置已开启,由审查人(被添加至 批准规则的人)启动的构建将自动获得该人的批准票。 请注意,如果新的构建需要由用户组来验证,其他人则应该投下他们剩余的票来启动这次构建。
Kotlin DSL
以下的 Kotlin DSL 代码段展示了如何在代码中配置 Untrusted Builds。