Unclear The finding does not say where the Bedrock upstream configuration is written or which component reads it.
What
Claude Code includes a gateway that organisations can run to route requests to model providers. An upstream is one of the providers the gateway forwards to. The gateway config gained several options.
- Bedrock upstreams accept an optional
guardrailwithidandversion. When set, every request to that upstream carries theX-Amzn-Bedrock-GuardrailIdentifierandX-Amzn-Bedrock-GuardrailVersionheaders. - The guardrail must be set on all Bedrock upstreams or none. Config validation refuses a partial setup, because failover could otherwise send requests to a Bedrock upstream without the guardrail.
- On
/v1/messages, clients can no longer supply their ownamazon-bedrock-*fields; such requests are rejected with a 400 error. - Bedrock upstreams accept
assume_rolewithrole_arn,external_idandsession_name(email or sub). The gateway then callssts:AssumeRoleusing access keys or the ambient AWS credential chain, and the Bedrock client uses the resulting shared credentials. An STS temporary-credentials provider was added for this. assume_rolecannot be combined withaws_bearer_token: the error says it needs SigV4 source credentials, which a bearer token cannot provide.telemetrygainsresource_attributes.managed.policiesgainsserve_to_desktop. When a request's user-agent identifies Claude Desktop, a policy is withheld unless it setsserve_to_desktop.
Why
Admins who route Claude Code through the gateway can enforce Bedrock Guardrails centrally without clients being able to override or strip them, use cross-account AWS roles for Bedrock, and choose which policies reach Claude Desktop sessions.
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
Also grant `bedrock:ApplyGuardrail` on the guardrail to the principal that signs this upstream's requests: the gateway's AWS principal, or with [`assume_role`](#bedrock-in-another-aws-account) the role named in `role_arn`.claude-apps-gateway-config see the edit
The finding does not say where the Bedrock upstream configuration is written or which component reads it.
Anthropic's documentation has since written up assume_role, on Claude apps gateway configuration.
Added assume_role on Claude apps gateway Bedrock upstreams: the gateway calls Bedrock as an IAM role it assumes through STS, in another AWS…