Repository navigation
Conversation
Move the budgets API, pricing catalog, spend monitoring, console budget flow, and audit shipper sections into partials so a second gateway section can reuse them. The budgets endpoints are served by Enterprise Manager, so the examples use an Enterprise Manager placeholder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Alejandro Ponce <aponcedeleonch@stacklok.com>
Add a self-contained section for AI Gateway v2 that mirrors the AI Gateway page set: providers, routing and model access, budgets, screening, audit logs, telemetry, an endpoints reference, and a migration guide. Add a platform setup page and wire the section into the navbar, sidebars, platform overview, and visual tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Alejandro Ponce <aponcedeleonch@stacklok.com>
Make status codes, egress rules, value path conventions, and the migration mapping agree across the AI Gateway v2 pages and the setup page, and document where scan decisions land in audit records. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Alejandro Ponce <aponcedeleonch@stacklok.com>
The shared partials carried over errors from the v1 pages. Pricing writes go through per-entry PUT with If-Match, budget subjects are directory UUIDs, and the Fluent Bit and Promtail filters dropped every audit record. Also cover service account budgets and bulk import precedence, which exist on platform main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the cluster OIDC issuer and groupsResolutionIssuer to setup, document disconnect through the API since the console hides it for v2-only installs, and correct migration mappings, error tables, and failure classes against source. Also apply repo style conventions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Snapshot capture also persists bodies, ready pods don't prove a working budgets or provider setup, and removing a provider's Secret must wait for the rollout so old pods keep their credentials. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Capture stores log-only matches and fail-open requests unredacted, so turning on scanning alone doesn't protect captured bodies. Name the settings that do. Most country-specific Presidio recognizers ship disabled in the bundled registry, so listing IN_AADHAAR or AU_TFN fails the adapter rollout rather than enabling detection. Drop service account caller content (budgets, 403 cause, and the workloadIssuers migration row) until workload callers are documented. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Trim operational detail the v1 pages don't carry: reason-code, span, metric, and error tables, troubleshooting entries without a v1 counterpart, and repeated rollout explanations, which now live once in "How configuration changes apply". Keep sections for v2-only features. Fill v1 gaps where v2 behaves the same, verified against platform main: NIST audit fields, the Kubernetes API audit log pointer, Vertex region and credential notes, the Connector Gateway link, the directory namespace note, content screening posture, and the private CA note. Restore the v1 organization default sentence dropped in 5c2a0d7, and fix the budgets probe check, since a first-try success logs nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Document the new implementation as the AI Gateway at the unqualified /ai-gateway URLs and move the operator-based implementation under /ai-gateway/legacy, with one navbar entry and one sidebar. Reader-facing prose no longer says "v2"; literal chart and value names keep it. Budgets get one shared home (budgets-and-pricing, manage-budgets), and each gateway gets a budget-enforcement page for its own connection and verification steps. The legacy setup page moves to platform/enterprise-platform/legacy/configure-ai-gateway. Every legacy page carries a pointer to its current counterpart and to a new "Identify your deployment" section, and current task pages point back to their legacy counterparts. The retired management API URL redirects to its legacy location. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A samplingRate of 0 keeps every root span, and a sampled inbound traceparent is always kept, so the rate is not a fixed fraction of traffic. The migration guide also lacked a mapping for the legacy directoryGrpcEndpoint group label lookup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gateway dials TLS by default and trusts only the system store, but the directory listener it calls is cleartext on 9091, so the examples without insecure: true failed every directory call and refused all traffic. Match the dev and staging setup: port 9091, insecure: true, and a projected token, which the gateway still sends. Also scope the virtual API key management API note to the legacy gateway, which is the only one that deploys it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Title the operator chart references as legacy and the gateway chart as the AI Gateway, in the hand-written Helm index, the sidebar, and the upstream-projects config that sets the generated titles at the next release sync. The legacy setup page now names clusterOidcIssuer alongside the allowlist step, since the Enterprise Manager verifies the legacy gateway's ServiceAccount tokens against it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cover every scanning failure setting the chart exposes, including the hook failure policy and the extraction and mutation failure actions, with the status codes clients see. Add the global placeholder and shadow mode, and a minimal KEDA setup that scales Presidio on the adapter's in-flight metric. Add migration notes learned from running both gateways in staging: shared tokens and caches, model access, overlapping Presidio metrics, per-provider Secrets, and Enterprise Manager allowlist overrides. Describe how the gateway validates JWTs and virtual API keys. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The budget enforcement page repeated the bring-up steps and the budgets page. Move its probe check and CA bundle note into Configure the AI Gateway, and its catalog mapping and 402 details into Budgets and pricing. The page itself was removed in the previous commit. Inline the single-use budget partials, also removed in the previous commit, back into their pages. Only the audit shippers partial is shared, so it stays. Remove conversation capture, which is an unreleased beta feature. Document how to authenticate to the Enterprise Manager API and point the budget examples' placeholders at it. Add the scanning hook's failure policy to the screening posture section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix the doubled URL scheme, audit field and telemetry gaps, route timeout claim, and budget duplication. Drop cross-section sidebar entries. Add a model access guide, pricing and protection checks, and overview starting points. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Verified against the dev cluster and the platform chart and sprout source. Covers directory provisioning for token callers, workload issuers, model access defaults, client API changes from inputSchema, token metric and claim label mapping, missing CRD fields, and corrects the screening comparison. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove claims that the directory or budgets behave differently between the AI Gateway and the legacy gateway, drop the stray user-group sentence from the migration guide, and move the overview's test request after budgets and model access. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bedrock Guardrails can't screen /v1/responses on either gateway, since both run the same adapter. Drop it from the migration guide's behavior differences and add the caveat to the legacy screening page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add a service accounts guide for administrators and a page on calling the AI Gateway from Kubernetes workloads, covering stacklok/ stacklok-enterprise-platform#4934. Add the cluster prerequisites to Configure the AI Gateway, and cover service accounts in the budgets, model access, audit log, groups, virtual key, and directory pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Describe service accounts reaching connectors through their groups, limited to None, Bearer token, and Header injection authentication, and the Access tab warning for connectors that can't serve them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Match the console label the trusted issuers table already uses for the issuer of the cluster Stacklok Enterprise runs in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Move the model access and budget rules into the wizard step where the reader decides them, fold activation into account creation, link to the canonical charge order instead of repeating it, and rephrase negative statements as positive ones. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The console starts the in-cluster issuer with an empty Issuer URL, so the reader enters the issuer the cluster publishes instead of checking a prefilled value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved documentation errors could lead to unsafe ServiceAccount access, incomplete revocation, overly broad IPv6 egress, and incorrect gateway control configuration.
6 open issues
UID pinning does not prevent editors from using the ServiceAccount · New Check for fallback bindings when revoking by deletion · New Clarify unmetered budget settings and separate model access configuration · New Use the correct host prefix for IPv4 and IPv6 endpoints · New Require setup only for gateways the workload uses · New Scope model grants and budgets to the gateway controls in use · New
What changed in this PR
Documents service accounts in Stacklok Enterprise, covering workload identity management and Kubernetes access to the AI Gateway and Connector Gateway.
Changes:
- Adds guides for creating service accounts and authenticating Kubernetes workloads with projected tokens.
- Documents gateway prerequisites, access controls, budgets, revocation, and troubleshooting.
- Updates navigation and related administration and audit documentation.
| File | Description |
|---|---|
sidebars.ts |
Adds service account and workload guides to navigation. |
docs/platform/enterprise-platform/configure-connector-gateway.mdx |
Documents workload trust, permissions, and network requirements. |
docs/platform/enterprise-platform/configure-ai-gateway.mdx |
Adds issuer trust, network access, and key rotation guidance. |
docs/platform/enterprise-directory/virtual-api-keys.mdx |
Directs independent Kubernetes workloads to service accounts. |
docs/platform/enterprise-directory/users-and-groups.mdx |
Explains service account membership and inherited grants. |
docs/platform/enterprise-directory/service-accounts.mdx |
Adds account creation, bindings, access, and revocation guidance. |
docs/platform/enterprise-directory/index.mdx |
Introduces service accounts and trusted issuers. |
docs/platform/enterprise-console/index.mdx |
Links to service account administration. |
docs/connector-gateway/kubernetes-workloads.mdx |
Adds token setup, MCP requests, and troubleshooting. |
docs/connector-gateway/forward-audit-logs.mdx |
Documents service account audit attribution. |
docs/connector-gateway/connectors.mdx |
Explains service account activity display and filtering. |
docs/connector-gateway/connector-policies.mdx |
Clarifies compatible connector authentication types. |
docs/ai-gateway/manage-budgets.mdx |
Adds console guidance for service account budgets. |
docs/ai-gateway/kubernetes-workloads.mdx |
Adds projected-token authentication and error guidance. |
docs/ai-gateway/forward-audit-logs.mdx |
Documents workload subjects and authentication events. |
docs/ai-gateway/control-model-access.mdx |
Explains explicit service account model grants. |
docs/ai-gateway/budgets-and-pricing.mdx |
Adds service account budget APIs and charging rules. |
Review effort: Balanced
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mention service accounts in the gateway intros and the AI Gateway authentication reference, link both handle-errors sections, and align the Connector Gateway 401 wording with the AI Gateway page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude please review this PR as a subject matter expert and technical writer, following Focus on accuracy, clarity, information architecture (placement, duplication, inbound links to the two new Kubernetes workloads pages), and compliance with Already known, so don't re-raise:
Post one body-level review comment with primary and secondary issues. Don't push commits. |
|
Claude finished @peppescg's task in 2m 23s —— View job Review: Document service accountsVerdict: needs a few changes, then it's ready. The three new pages are tightly written, follow Diataxis, and end with Next steps, Related information, and Troubleshooting in the right order. The Kubernetes workloads pages are linked from more than the sidebar. The Copilot fixes in e203b7f hold up: suspend-first revocation, the pod-creation caveat on pinned bindings, I skipped the 60-minute lifetime and the Primary issues1. 2. Trusted issuer guidance is split across two audiences, and the security reason is on the wrong page
Ask: Keep the full guidance in one place: the This cluster bullet in 3. JWKS key rotation is on the cluster admin page but done in the console 4. Revocation: the token-lifetime paragraph can read as if suspending doesn't take effect right away Secondary issues
What works well
Out of scope
I didn't push any commits. |
Move issuer choice and JWKS rotation to the service accounts page, link service accounts from the client rollout page, clarify revocation, and keep Helm keys and connector auth rules in one place each. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude thanks for the review. Commit 5f7a7a5 addresses every primary and secondary issue from it. Please review the PR again with the same criteria (
Already tracked in the PR's Keep in draft until list, so don't re-raise:
Post one body-level review comment. Don't push commits. |
|
Claude finished @peppescg's task in 1m 21s —— View job Re-review: Document service accountsVerdict: ready once two small fixes land. 5f7a7a5 fixes every primary issue from the last review, and all but one secondary issue. The moved This cluster and key-rotation content reads well on the service accounts page, and both configure pages now point to it. One meaning got lost in the move (item 1 below), and the connector auth-type rule is still restated in more places than needed. I skipped the 60-minute lifetime, the Previous findings
Primary issues1. The move dropped "its own" issuer URL for clusters registered as Another issuer The bullet just above gives the reason this matters: clusters often share the default issuer URL. A reader whose clusters all use the default Ask: Restore the requirement and make the scope explicit. For example: "When gateways or workloads span clusters, add every cluster this way, including the one that runs Stacklok Enterprise. Each cluster needs its own issuer URL, so a cluster that uses the default issuer needs a unique one set first." Please confirm the uniqueness requirement upstream, since I couldn't. 2. The connector auth-type list still appears in five places
If a new auth type works for service accounts, all five need an edit. The commit message says these rules are kept "in one place each," but they're not yet. Ask: In Secondary issues (new in 5f7a7a5)
What works well
I didn't push any commits. |
Require a distinct issuer URL per cluster, scope This cluster to the gateways' placement as the code does, link the rotation subsection directly, and point remaining connector auth-type lists to one section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude commit c5182ba addresses your re-review. Please check it once more with the same criteria and post one body-level comment. Don't push commits. What changed, verified against stacklok-enterprise-platform v0.26.0:
Still tracked in Keep in draft until, so don't re-raise them: #4933, #5519, and the v0.26.0 Helm reference sync. |
|
Claude finished @peppescg's task in 1m 16s —— View job Third review: Document service accountsVerdict: ready to merge once the draft blockers clear. c5182ba resolves both primary issues and all six secondary issues from the re-review. Two small wording problems came in with the reworked Trust the cluster's issuer step. Neither blocks the PR, but both are cheap to fix. I skipped #4933, #5519, and the v0.26.0 Helm reference sync, as you asked. I still can't read Re-review findings
The 30-second poll in "Both gateways pick up a new or changed issuer" ( New issues (minor)1. "Another issuer trusts any other cluster" now contradicts the next sentence. 2. The This cluster reason covers only the shared-URL risk. 3. Changing 4. Nit: What works well
I didn't push any commits. |
Describe Another issuer by how it works, state both outcomes of a gateway outside the cluster, and keep the old issuer when adding one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>


Description
Documents service accounts in Stacklok Enterprise, following the acceptance criteria in stacklok/stacklok-enterprise-platform#4934. A service account gives a Kubernetes workload its own directory identity, groups, model set grants, and budget. The workload authenticates to both the AI Gateway and the Connector Gateway with its pod's projected ServiceAccount token, so there's no static key.
New pages:
platform/enterprise-directory/service-accounts.mdx(AC4.1, AC4.5, AC4.6): when to use a service account instead of a virtual API key, trusting a cluster's issuer, the creation wizard, pinned and name-only bindings (including reassign), activation, revocation and deletion, and what an account can reach depending on model access, budgets, and connector authentication.ai-gateway/kubernetes-workloads.mdx(AC4.2): the projected token volume, audience andexpirationSeconds: 1800,Authorization: Beareronly, what401,402,403, and503mean, and where an administrator finds the reason behind a refusal.connector-gateway/kubernetes-workloads.mdx: the same token on/gw/mcp, acurlcheck, which connectors and tools an account gets (None, Bearer token, and Header injection connectors granted to its groups, no connections to make), and the gateway's401,403, and503.Updated pages:
configure-ai-gateway.mdx: new "Accept service account workloads" section with the cluster administrator's prerequisites (AC4.3).configure-connector-gateway.mdx: new "Accept service account workloads" section (on by default over TLS, what the chart sets up, egress rules, turning it off, accounts shared with the AI Gateway), plus theworkloadTrustSaSubjectAllowlistrow for a renamed gateway.users-and-groups,manage-budgets,budgets-and-pricing,virtual-api-keys(AC4.4).control-model-access,connector-policies,connectors(service accounts on the Activity tab), bothforward-audit-logspages (service account subjects), the console and directory index pages, andsidebars.ts.Every claim was checked against
stacklok-enterprise-platformmain(v0.26.0), including the Connector Gateway work in stacklok/stacklok-enterprise-platform#5799, #5849, #5855, #5930, and #5963.Keep in draft until
service_accountsconsole flag is on by default (stacklok/stacklok-enterprise-platform#5519). It still defaults to off in v0.26.0.mainstill has 2 hours.0.25.0, so it lacksglobal.stacklok.connectorGateway.workloadIdentity.enabled,connector-gateway.enterpriseConfig.workloadIdentity.pollInterval, and the Connector Gateway entry in theworkloadTrustSaSubjectAllowlistdefault.Resolved: the Connector Gateway accepts workload tokens (v0.26.0), the console labels the in-cluster issuer This cluster (stacklok/stacklok-enterprise-platform#5543), and #1244 merged.
Where the pages follow the code instead of #4934
401: an invalid token gets401, while a valid token without an active binding gets403. The pages cover both, with the auditreason_codevalues and the Enterprise Manager'sworkload.resolutionsmetric and debug log.system:service-account-issuer-discovery, so it's documented as a check, not a manual step.stacklok-enterprise-platformas the example.valid_for.Type of change
Related issues/PRs
Screenshots
None. No page in the platform, AI Gateway, or Connector Gateway sections uses screenshots.
Submitter checklist
Content and formatting
Navigation
sidebars.ts) updated for added, deleted, reordered, or renamed filesvercel.jsonfor moved, renamed, or deleted pages (no URLs changed, so none needed)Reviewer checklist
Content
🤖 Generated with Claude Code