Repository navigation
feat(models): Vertex AI credentials at the egress gateway through a configurable credential authority - #3259
QuentinBisson wants to merge 1 commit into
Conversation
ee15113 to
2b0eb19
Compare
|
@EItanya I rebased this on main now that #3359 is in. The runtime part is needed whatever ends up minting the Vertex token: the Go ADK, Python ADK and Claude Code skip their own Google auth and send a placeholder, and the compiler binds The open question is where the token comes from. This PR adds a controller setting that picks the credential provider per model provider ( Which one would you rather have? If it's the exchange, I can cut this down to the runtime part and drop the setting. |
… headers kagent-dev#3359 and kagent-dev#3362 merged: the agent and session rows move from kagent-dev#2901 to the Actor JWT and the Agent lookup, the Codex half is dropped, U6 is open, the Vertex row records the token-source question on kagent-dev#3259 and the labels row cites substrate#3208. Signed-off-by: QuentinBisson <quentin@giantswarm.io>
2b0eb19 to
c2e7b7e
Compare
…onfigurable credential authority A GeminiVertexAI or AnthropicVertexAI ModelConfig with apiKeySecret binds authorization: Bearer on the Vertex AI origin of its location, so the Secret never enters the runtime. The ADK translation drops the Secret volume and GOOGLE_APPLICATION_CREDENTIALS and renders KAGENT_SKIP_VERTEX_AUTH; the Go ADK, the Python ADK and Claude Code (CLAUDE_CODE_SKIP_VERTEX_AUTH) skip their own Google auth and send a placeholder bearer the gateway replaces. The ate-secret:// authority of a ModelConfig credential is the controller setting runtimeDefaults.modelCredentialAuthorities, keyed by ModelConfig provider, default k8s.io (Helm: config.runtimeDefaults). Vertex AI needs a credential provider class that mints access tokens, so a Vertex apiKeySecret that resolves to k8s.io fails compilation. The egress binding check accepts any DNS name without a port as the authority and refuses IP addresses. MCP and EgressPolicy credentials keep k8s.io. Vertex AI providers reject actorJwt. Co-authored-by: Timo Derstappen <teemow@gmail.com> Signed-off-by: QuentinBisson <quentin@giantswarm.io>
c2e7b7e to
83f2d43
Compare
Problem
Vertex AI ModelConfigs with
apiKeySecretput the service account key into the runtime, which Substrate actors can't mount and the credential compiler rejects (#2873, Vertex row of #3258).Change
The gateway now sets the Vertex token: both Vertex providers bind
Authorization: Beareron the location's Vertex host, and the Go ADK, Python ADK and Claude Code skip their own Google auth and send a placeholder the gateway replaces. Which credential provider resolves a ModelConfig's Secret is a new controller setting,runtimeDefaults.modelCredentialAuthorities, per provider andk8s.ioby default. Vertex needs a provider that mints access tokens, so a VertexapiKeySecretthat resolves tok8s.iofails compilation; the Secret then holds whatever that provider expects, typically a service account key. The gateway routes provider classes other thank8s.iowith kagent-dev/substrate#90.