ADR-013: Read-Only Client Access via Service Account¶
Status: Approved
Date: 2026-06-30
Decision¶
Clients receive read-only access to their control plane through a Kubernetes ServiceAccount and a generated kubeconfig. The primary read experience is Backstage. No Kubernetes API OIDC integration with the client's identity provider is provided in v1.
Rationale¶
- Simple to implement and secure: standard Kubernetes RBAC with no external OIDC complexity
- Avoids coupling Kubernetes API authentication to each client's identity provider
- Backstage provides the curated read experience clients actually need
- Easy to revoke by deleting the service account or rotating the token
Access Model¶
| Experience | Mechanism | Purpose |
|---|---|---|
| Primary read | Backstage UI | Cluster resources, Hiroba claims, templates, documentation |
| Raw read access | ServiceAccount kubeconfig | Power users who need kubectl get for audit or debugging |
Implementation¶
- Create a
ClusterRolewith read-only permissions across the client cluster (e.g., built-inviewcluster role). - Create a
ServiceAccountper client in a dedicated namespace. - Create a
ClusterRoleBindingbinding the service account to the read-only cluster role. - Generate a kubeconfig containing the service account token.
- Deliver the kubeconfig to the client through a secure out-of-band channel.
- Document that the kubeconfig is read-only and should be treated as sensitive.
Restrictions¶
- The service account has no write permissions.
- It cannot access secrets or privileged namespaces (e.g.,
kube-system, ArgoCD admin secrets). - Token lifetime is bounded and rotation is documented in the runbook.
Scope¶
This access model applies to v1. Future versions may add OIDC-based kubectl access if clients require it.