JetBrains 宣布推出适用于 TeamCity 平台的新 OIDC JWT 插件,旨在让构建流程能够向 AWS、Google Cloud 以及其他支持 OpenID Connect 的服务进行身份验证,而无需在 CI/CD 环境中依赖固定密钥或密码。该插件旨在应对构建流水线中的一项运营和安全风险来源:静态凭据可能通过日志或构建文件泄露,而且通常需要定期轮换以满足安全要求。
身份验证如何工作?
该流程基于 TeamCity 代表构建流程签发经过加密签名的 JSON Web Token。令牌包含用于确定工作负载身份、有效期、目标受众以及签发方地址的声明。收到令牌后,外部服务会使用与签发方关联的公钥验证签名,然后检查目标受众和有效期,再使用这些声明对构建流程进行身份验证。
部分服务会直接接受身份提供商令牌,而其他服务则会执行令牌交换,以签发自身的临时凭据。JetBrains 将该流程的具体配置细节留给各项服务,并建议用户在设置受众和验证条件时参考 AWS 或 Google Cloud 的文档。
该插件为 TeamCity 增加了什么?
OIDC JWT 为 TeamCity 服务器增加了签发令牌所需的身份提供商功能。该插件支持使用基于 RSA 或 ECDSA 的算法对令牌进行签名,并允许通过 Web 界面或专用于授权请求的 HTTP 端点轮换签名密钥。据 JetBrains 称,默认情况下,密钥轮换不会中断正在运行的构建,也不会使先前签发的令牌失效。
对于公开访问的 TeamCity 服务器,该插件提供 .well-known/openid-configuration 文档和公共 JWKS 密钥集。对于未暴露在互联网上的服务器,可以配置自定义发行方地址,并在使用 HTTPS 的公共主机上托管身份信息文档,而无需将 TeamCity 服务器本身公开。该插件还提供 API,允许其他插件添加新的签名方式,包括与硬件安全模块 HSM 或 Google Cloud KMS 等密钥管理服务集成。
令牌签发选项和使用要求
从 JetBrains Marketplace 安装并启用该插件后,可以通过 Admin | Integrations | OIDC Tokens 路径进行管理。该插件要求 Java 17,并支持 TeamCity 2025.11 及更高版本。管理员可以指定发行方地址、签名设置以及签名密钥管理方式。
该插件提供两项用于签发令牌的构建功能。第一项 OIDC Token (in build parameters) 会在构建开始时创建令牌,并将其存储在指定的构建参数中。有效期可以进行配置;默认情况下,有效期等于构建超时时间;如果未指定超时时间,则为 10 分钟。还可以为单个或多个受众签发令牌,并可在服务要求针对单一受众使用独立令牌时添加单独的功能。
第二项 OIDC Token (on demand via HTTP request) 适用于运行时间较长的构建,因为它允许脚本在执行期间通过 HTTP 请求短期令牌。这些令牌的有效期始终为 5 分钟,无法更改。
为什么这条消息很重要?
这里的实际变化,是将身份验证从长期有效的机密信息转移到与构建流程关联、且受有效期和受众限制的令牌上。这样可以降低令牌泄露后的价值,但并不意味着可以忽略权限配置,也不代表无需谨慎验证发行方地址和受众。JetBrains 警告称,插件配置的更改可能会中断现有集成,因此建议在将构建流程连接到基于 OIDC 的身份验证之前完成配置。此外,解决方案的有效性取决于目标服务是否支持 OIDC 及其官方配置,这些都是每项集成都必须单独确认的事项。