Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

使用 OIDC 认证 TeamCity 构建与外部服务

#teamcity#oidc#ci/cd#身份认证#云服务

CI/CD 环境中的静态凭据是安全风险和运维开销的重要来源。它们可能通过日志和构建产物意外泄露。而且你永远无法确定在 CI/CD 搭建过程中谁在复制、保存或与他人共享它们。此外,为了满足安全要求,它们需要定期轮换。

因此,许多服务(包括主流云提供商)现在支持使用短期 OIDC 身份令牌进行身份验证,使 CI/CD 管道无需存储静态凭据即可进行身份验证。

在本文中,我们将解释 OIDC 身份验证的工作原理,并展示新的 TeamCity OIDC JWT 插件如何让你的构建配置安全地通过 AWS、Google Cloud 及其他支持 OIDC 的服务进行身份验证。

什么是 OIDC?

OpenID Connect(OIDC)是一种最初设计用于验证用户身份的身份验证标准。然而,许多流行的云提供商和服务(如 AWS 和 Google Cloud)使用 OIDC 规范中的部分内容来对工作负载进行身份验证。本文仅关注这些部分。

当身份提供程序(IdP)颁发一个包含工作负载信息的加密签名 JSON Web Token(JWT)时,身份验证流程就开始了。令牌中的每条信息称为一个声明(claim)。每个令牌都包含有效期、预期的受众(audience)(令牌所颁发给的一个或多个服务)以及签发者 URL。然后,可以将颁发的令牌提交给第三方服务(例如云提供商),我们将其称为令牌消费者

当令牌消费者收到令牌时,它会使用签发者 URL 获取元数据文档({issuer_url}/.well-known/openid-configuration)。除其他信息外,该文档还包含指向签发者 JSON Web Key Set(JWKS)的链接,其中包含用于验证令牌签名的公钥。OIDC 签发者 URL 必须使用 https 协议,因此元数据文档只能通过 HTTPS 提供。某些消费者也支持针对预配置的密钥集进行验证,在这种情况下,签发者无需通过互联网提供元数据文档。

获取公钥后,消费者将使用这些公钥验证令牌签名。如果签名有效,消费者会检查令牌是否颁发给了预期的受众,并且当前是否有效(未过期)。然后,消费者使用验证后的令牌声明对工作负载进行身份验证。

有些消费者直接接受 IdP 令牌。另一些则执行令牌交换,并返回特定于服务的临时凭据供工作负载使用。 [LOADING...]

要为 TeamCity 构建启用这种身份验证方法,服务器需要充当身份提供程序并为它们颁发令牌。

认识 TeamCity OIDC JWT 插件

新的 OIDC JWT 插件增加了为支持 OIDC 的第三方服务(如 AWSGoogle Cloud)颁发令牌所需的 IdP 功能。

令牌使用基于 RSAECDSA 的算法进行签名。可以通过 Web UI 或向 HTTP 端点发送授权请求来轮换签名密钥。默认情况下,密钥轮换不会影响正在运行的构建,也不会使之前颁发的令牌失效。

对于可公开访问的 TeamCity 实例,该插件提供 .well-known/openid-configuration 文档以及包含签发者公钥的 JWKS。它还提供了适用于无法从互联网访问的实例的可配置签发者 URL,使你可以将这些文档托管在公共 HTTPS 主机上,而无需公开 TeamCity 实例本身。

最后,该插件提供了一个 API,允许其他插件添加新的令牌签名方式。通过实现一个简单的接口,插件作者可以添加对外部硬件安全模块(HSM)或其他密钥管理服务(如 Google Cloud KMS)的支持。

入门

要使用该插件,请从 JetBrains Marketplace 安装。该插件需要 Java 17,并支持 TeamCity 2025.11 及更高版本。

已安装并启用的插件可以通过 Admin | Integrations | OIDC Tokens 进行配置。你可以设置签发者 URL(适用于无法从互联网访问的实例)、配置签名设置以及管理签名密钥。 [LOADING...]

配置更改可能会影响现有集成。我们建议在为你的构建设置 OIDC 之前先配置插件。配置完成后,你可以添加提供 OIDC 令牌的构建功能。

**OIDC Token(在构建参数中)**构建功能是颁发令牌最简单的方式。它在构建开始时生成一个令牌,并将其存储在指定的构建参数中。令牌的生存期可配置。默认情况下,它等于构建超时时间,如果未指定超时时间,则为 10 分钟

该功能允许你为一个或多个受众颁发令牌。当不同的服务需要各自独立的单受众令牌时,请为每个令牌添加单独的构建功能。 [LOADING...]

对于长时间运行的构建,在构建开始时颁发的令牌可能会在超出必要的时间后仍然有效。对于此类构建,有 OIDC Token(通过 HTTP 请求按需获取)构建功能。它允许构建脚本在构建过程中通过 HTTP 请求获取短期令牌。所颁发令牌的生存期始终为 5 分钟,无法更改。

然后,构建可以将颁发的令牌直接提交给目标服务,或将其用作该服务身份验证流程的一部分。

正确的受众和令牌生存期取决于你集成的服务。请参阅服务的官方文档以获取有关设置 OIDC 身份验证的说明。你也可以按照我们提供的 AWSGoogle Cloud 设置指南进行操作。

了解更多

访问插件的 JetBrains Marketplace 页面以了解更多信息:

👉查看插件👈

你还可以浏览该插件的 GitHub 仓库,其中包含源代码、示例 JWT 载荷以及详细的使用文档。