内容提要
TeamCity推出OIDC JWT插件,支持构建配置通过短期OIDC身份令牌安全认证AWS、Google Cloud等服务,无需存储静态凭证。插件提供签名密钥轮换、公开元数据文档及API扩展,支持两种令牌获取方式:构建参数或按需HTTP请求。适用于TeamCity 2025.11+,需Java 17。
延伸解读
安全收益与风险
使用短期OIDC令牌替代静态凭证,可降低凭证泄露风险,并减少定期轮换的运维负担。但需注意,令牌默认有效期可能长达10分钟或构建超时时间,若构建环境不安全,令牌仍可能被窃取。此外,配置变更可能中断现有集成,建议在设置OIDC前完成插件配置。
两种令牌获取方式的选择
插件提供两种获取令牌的方式:构建参数方式在构建开始时生成令牌,适合短时构建;按需HTTP请求方式允许在构建过程中获取5分钟有效期的令牌,适合长时构建以减少令牌暴露时间。选择时需根据构建时长和安全需求权衡,并参考目标服务的官方文档确定合适的audience和有效期。
对非公网实例的适配
对于无法从互联网访问的TeamCity实例,插件支持配置自定义issuer URL,并可将元数据文档托管在公网HTTPS主机上,从而在不暴露TeamCity本身的情况下完成OIDC认证。这为内网部署提供了灵活性,但需确保公网文档与内部配置的一致性。
Q&A
TeamCity OIDC JWT插件是什么?
TeamCity OIDC JWT插件是JetBrains为TeamCity开发的一个插件,它使TeamCity服务器能够作为OIDC身份提供者,为构建配置签发短期OIDC身份令牌,从而让构建可以安全地认证到AWS、Google Cloud等支持OIDC的外部服务,无需存储静态凭证。
OIDC认证流程是怎样的?
OIDC认证流程中,身份提供者(IdP)签发一个加密签名的JWT令牌,包含有效期、受众和签发者URL等信息。令牌被呈现给第三方服务(令牌消费者)后,消费者通过签发者URL获取元数据文档和公钥,验证令牌签名,并检查受众和有效期,然后使用令牌中的声明来认证工作负载。
TeamCity OIDC JWT插件支持哪些签名算法?
插件支持基于RSA或ECDSA的签名算法。
如何获取OIDC令牌?
有两种方式:一是使用“OIDC Token (in build parameters)”构建功能,在构建开始时生成令牌并存储到指定构建参数中;二是使用“OIDC Token (on demand via HTTP request)”构建功能,构建脚本可以在构建过程中通过HTTP请求获取短期令牌。
OIDC令牌的默认有效期是多久?
通过构建参数方式获取的令牌,默认有效期等于构建超时时间,如果未设置超时则为10分钟;通过按需HTTP请求方式获取的令牌,有效期固定为5分钟,不可更改。
TeamCity OIDC JWT插件支持哪些TeamCity版本?
插件支持TeamCity 2025.11及更高版本,并且需要Java 17。
如何配置TeamCity OIDC JWT插件?
安装插件后,可以在Admin | Integrations | OIDC Tokens页面进行配置,包括设置签发者URL(对于无法从互联网访问的实例)、配置签名设置和管理签名密钥。建议在设置OIDC构建功能之前完成插件配置。
插件支持密钥轮换吗?
是的,插件支持签名密钥轮换,可以通过Web界面或向HTTP端点发送授权请求来轮换密钥。默认情况下,密钥轮换不会影响正在运行的构建或使已签发的令牌失效。
对于无法从互联网访问的TeamCity实例,如何提供OIDC元数据?
插件允许配置签发者URL,对于无法从互联网访问的实例,可以将元数据文档托管在公共HTTPS主机上,而不必暴露TeamCity实例本身。
插件是否支持扩展以使用外部密钥管理服务?
是的,插件提供了API,允许其他插件通过实现简单接口来添加新的令牌签名方式,例如支持外部硬件安全模块(HSM)或Google Cloud KMS等密钥管理服务。