Build1 distinct publisher3 min readPublished
Build configurations can now authenticate to AWS and Google Cloud without stored keys, provided you accept that the TeamCity server holds the signing key and that rotating it leaves already-issued tokens valid.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Follow one token. The server signs a JWT carrying information about the build, a validity period, an intended audience, and an issuer URL [3]. The build presents it to AWS or Google Cloud. From there the consumer does four things:
1. Reads the issuer URL and fetches `{issuer_url}/.well-known/openid-configuration` [4]. 2. Follows that document to the issuer's JWKS and pulls the public keys [4]. 3. Verifies the token signature against those keys [5]. 4. Checks that the audience is one it expects and that the token has not expired [5].
Then the token is either accepted as it stands or exchanged for service-specific temporary credentials [7].
Step one is the constraint that shapes the rest of the design. The party doing the fetching sits outside your network, and OIDC requires the `https` scheme for issuer URLs, so the metadata document can only be served over HTTPS [6]. Something of yours has to answer that request. JetBrains' way out is the configurable issuer URL [14], which means the internet-facing thing can be a directory with two JSON files in it while the build server stays where it is. I will take that trade. JetBrains also advises getting the plugin configured before you wire OIDC into builds, since configuration changes can disrupt existing integrations [18].
Here is the default worth reading twice: rotating a signing key is tuned to protect work in flight rather than to cut off tokens already handed out [12]. So rotation and revocation are separate operations here. A token that leaked into a build log survives the retirement of the key that signed it and stays usable until its own validity period runs out, because expiry is the only liveness test the consumer applies [20]. That is the right default for uptime, and it means containment depends on token lifetime, since rotating the key in the UI leaves already-issued tokens live [11].
Trust also relocates, and that is the deeper change here. A consumer authenticates the workload on a valid signature plus the audience and expiry checks [5], so every cloud role configured to trust your issuer is reachable by anything that can get that key to sign for the right audience [21]. Which is why the extension API matters more than it looks: the plugin lets other plugins add signing backends, including external HSMs or key management services such as Google Cloud KMS, through a simple interface [15]. Out of the box, though, the private key lives with the TeamCity server acting as identity provider [9], signing with RSA- or ECDSA-based algorithms [10].
JetBrains' case is that static credentials leak through logs and artifacts and need regular rotation to satisfy policy [2], and that the major providers already accept short-lived OIDC tokens in their place [22]. Both are fair. The saving transfers to your shop only if your token consumers support workload OIDC [22], your server is on 2025.11 or later [16], and your role trust policies can condition on claims specific enough that a build from an untrusted branch cannot mint production credentials. The post describes claims generically as information about the workload and does not enumerate what TeamCity emits [23], and the published text breaks off while naming the build feature that supplies the token [19]. So that third condition is the one you cannot check from the announcement. If audience is the only thing you can pin a role to, your role trust now rests on a single shared signer in place of the shared secrets it replaced.
Ranked by verification strength, evidence, and original report placement.
Once the plugin is configured, build features that provide OIDC tokens can be added; the published text breaks off mid-sentence while naming one such feature, 'OIDC Token (in build parame'.
JetBrains has released a new TeamCity OIDC JWT plugin that enables build configurations to authenticate securely to AWS, Google Cloud, and other services that support OIDC.
JetBrains states that static credentials in CI/CD environments are a significant source of security risk and operational overhead, can be accidentally leaked through logs and build artifacts, and require regular rotation to meet security requirements.
The authentication flow starts when an identity provider issues a cryptographically signed JWT containing information about a workload; each token contains a validity period, an intended audience (the service or services it was issued for), and an issuer URL.
When a token consumer receives a token it uses the issuer URL to retrieve the metadata document at {issuer_url}/.well-known/openid-configuration, which includes a link to the issuer's JSON Web Key Set (JWKS) containing the public keys used to verify token signatures.
After retrieving the public keys the consumer verifies the token signature against them, and if valid checks that the token was issued for an expected audience and is not expired; the validated claims are then used to authenticate the workload.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 31, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Jenkins static AWS keys work from anywhere; the OIDC replacement fails in four known ways1 distinct publisher
build
Google Cloud IAP fences staging for free until the client stops being a browser1 distinct publisher
build
Basic Auth becomes a gateway problem: AgentCore's Lambda interceptor keeps the password away from the model1 distinct publisher
build
Attackers exploited JetBrains' own TeamCity bug to operate inside Cadence for 16 days2 distinct publishers
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Vendor-documented, standard-consistent, untested
The OIDC half of this story is checkable against a public specification and matches it. The plugin half — RSA or ECDSA signing, what rotation does and does not touch, the 2025.11 floor, the two build features and their lifetimes — exists only because JetBrains says so, in the post announcing it. Detailed is not the same as verified, and nobody has yet run this against a real AWS or Google Cloud trust policy in public.
Day-one listing, gated installed base
What exists is a Marketplace listing dated the day of the post, plus setup guides and a repository. The version requirement caps the reachable audience: only servers already on 2025.11 or later can install it at all, so on launch day the eligible population is whoever upgrades fastest. No download figure, no named user, no pipeline anyone has pointed to in production.
Candid on mechanics, quiet on where the secret went
Unusually restrained for a launch post: JetBrains volunteers that rotation leaves old tokens valid and that reconfiguration can break working integrations, so the caveats in this story are the vendor's own. The gap is narrower than the framing. 'Authenticate without storing static credentials' relocates the secret rather than eliminating it — the build server now holds a key that mints cloud access — and that reframing appears nowhere in the post.
Product launch by the only source
One voice, and it is the seller's. JetBrains benefits from OIDC becoming the default way TeamCity talks to AWS and Google Cloud, from Marketplace traffic, and from a reason to move onto the newest server version. The technical candour is real and worth crediting — it does not change the fact that this reporting is a launch announcement carrying its own scorecard.
Firm on the standard, thinner on the consequences
Confidence splits by layer. High on how a consumer validates a token, because that layer is public and stable. Middling on the plugin's specifics, which are precise but single-sourced. Lowest on the two conclusions that matter most to a reader — that rotation is not revocation, and that the signing key now anchors trust for the roles behind it — because those are our inferences from JetBrains' description, sound on the face of the flow but not something anyone has demonstrated.