Build1 distinct publisher3 min readPublished
The toggle sits on the load balancer's backend service and costs almost nothing to flip, which is why the real bill lands later, in the WebViews and CI jobs that have to mint an audience-scoped token to get past it.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The word doing the work in the token path is `--audiences`. IAP will accept a bearer token, but only one carrying the right audience [3], and the test command in the walkthrough pins that audience to the IAP client ID [7]. So every non-browser caller picks up two things it did not need before: an identity Google will sign, and that client ID as deployed configuration [18]. For a manual check it is one gcloud invocation [7]. In application code it becomes a service-account-signed JWT or an OIDC client credential exchange [8], which is a token lifecycle you now own: mint, cache, refresh.
The failure mode is not a clean 401. A caller with no token is redirected to the Google login page [9], and a caller that cannot hold a cookie or follow a redirect has nothing to do with that redirect [5]. A JSON client gets HTML [16]. The source is explicit that the browser path stays an interactive flow, and names headless browsers and most testing tools as the things that cannot complete it [15].
Granularity is the other line item. IAP is enabled per backend service, not per URL path, so everything routed to that backend is gated once the switch is on [2]. There is no exempting `/healthz` or a webhook receiver in place; a route that must stay open has to move to a different backend service [17]. That is a load balancer edit, not a checkbox.
For the "costs almost nothing" claim [19] to transfer, a few things have to hold in your environment. The gated surface has to be browser-only. Your people have to already exist as Google Workspace identities that IAM can name [12]. And nothing behind that backend service can be answering machine callers, because those are exactly the clients with no redirect to follow and no cookie to carry [5].
Where that holds, the engineering is good and worth saying so. No VPN to distribute and no login layer to maintain [10]. A browser hits the sign-in redirect once and a session cookie carries the rest of the day [4]. Removing a person is one IAM edit that applies immediately, everywhere that backend is used [13]. Access decisions land in Cloud Audit Logs, so who reached staging is a query [14]. And nothing else grants access, project owner included [6], which teams tend to discover with the console already open.
The problem IAP is built for is the ordinary one: a staging URL a crawler indexed and an ex-employee's bookmark still reaches [11]. Requiring a verified Google identity at the load balancer, before the request touches the backend at all [1], is the cheapest honest fix I know of on GCP for that case. In my context I would still keep machine traffic on a separate backend service rather than teach four repositories to sign audience-scoped tokens, because the browser saving is real and the token work is the part that lands in code review.
Ranked by verification strength, evidence, and original report placement.
Identity-Aware Proxy is a Google Cloud layer in front of a load balancer's backend service that requires a verified Google identity before any request reaches the backend.
IAP is toggled per backend service, not per URL path; anything routed to that backend service is gated.
Mechanically IAP is an auth check bolted onto Google Cloud Load Balancer: it checks for a valid identity, either a session cookie from a prior OAuth flow or a bearer token with the right audience, and either passes the request through or bounces it into a Google sign-in flow.
For anything that is not a browser, there is no redirect to follow and no cookie to hold.
Access requires principals granted the IAP-Secured Web App User role in IAM; nothing else grants access, and being a project owner does not bypass IAP.
A curl request without a token is redirected by IAP to the login page; the same request with a correctly-audienced bearer token passes straight through.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · September 1, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
TeamCity's new OIDC plugin turns your build server into the credential issuer1 distinct publisher
build
Jenkins static AWS keys work from anywhere; the OIDC replacement fails in four known ways1 distinct publisher
build
Basic Auth becomes a gateway problem: AgentCore's Lambda interceptor keeps the password away from the model1 distinct publisher
product
Google's legal AI play is a connector list, and Harvey is on it1 distinct publisher
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.
Reproducible in an afternoon, sourced by one person
Most of what this rests on is self-verifying: the IAP-Secured Web App User role, the --audiences flag, the two curl calls that show a redirect becoming a 200. A reader with a sandbox project can confirm it before lunch. What is not verifiable is precisely what is most interesting — the header collision on Android WebViews and the load balancer's unreliable handling of Proxy-Authorization arrive with no version, no date and no second witness, and dev.to's post cuts off mid-list before naming its fourth failure mode.
No one says who runs this
Not a single deployment sits behind this story. There are no usage figures, no named teams, no before-and-after from an environment that actually flipped the toggle — even the worked example is stage.example.com. The author's own experience is implied by the specificity of the WebView detail, but implication is not disclosure, and nothing here tells us whether IAP-gated staging is common practice or a niche habit.
Mostly honest about its own bill
"Close to free" is normally a phrase to discount heavily, and here it barely needs it — the same post that sells the toggle spends its back half on audience mismatches and a header that only works because the correct one doesn't. The small tilt toward overstatement comes from an asymmetry rather than a boast: the cheerful claims are the reproducible ones, while the caveats that would slow a team down rest entirely on one engineer's unshown testing, and the two dependencies every machine caller inherits are described as a tax without ever being priced.
Reputation, not referral fees
dev.to pays its contributors in visibility, and there is no product, course or paid tier being steered toward here. The mild pull is structural: a walkthrough earns attention by making a hard thing look tractable, and this one flatters a Google feature the author had no hand in building while framing the alternatives as a VPN nobody wants and a login screen nobody wants to maintain. No relationship with Google is disclosed, and none is evident either.
One voice, low cost of being wrong
Confidence here is bounded by arithmetic: one publisher, one author, nothing corroborated. It holds up better than that sounds because the load the story carries is mechanical and cheap to test, and because a reader who tries it and finds otherwise loses an afternoon rather than a quarter. Where it thins out is anything about the world beyond the console — how widely this pattern is used, what it costs at volume, and whether the Android header behaviour still holds on current builds.