Skip to main content
The operator creates dedicated Kubernetes ServiceAccounts per workload. It never embeds long-lived cloud keys. You annotate those SAs with IRSA role ARNs (EKS) or GKE Workload Identity GSA emails. Platform namespace default: runlayer-<customerId> (override with spec.deploy.platformNamespace).

ServiceAccount naming

Pattern: {RunlayerInstance.metadata.name}-{component} in the platform namespace. Example: CR metadata.name: acme-prod → SA acme-prod-backend in runlayer-acme. OIDC / WI trust subject (EKS):
GKE principal form:

Annotate via RunlayerInstance

CR field JSON name is serviceAccount (singular):

EKS (IRSA)

Trust policy must allow your cluster OIDC provider with sub = system:serviceaccount:<ns>:<sa> and audience sts.amazonaws.com.

GKE (Workload Identity)

Also bind the GSA roles/iam.workloadIdentityUser (or equivalent) to the KSA principal.

Permission matrix

Grant only what you enable. Buckets/streams are customer-owned — scope ARNs tightly.

Base platform (typical)

AI Watch binary cache

Audit publish (when stream-backed)

Audit consumer

SIEM export

Session materializer

Agents (AgentCore on AWS)

IRSA trust sample (EKS)

Verify

EKS

GKE

Missing annotations or trust subjects show up as AssumeRoleWithWebIdentity: AccessDenied (AWS) or permission denied on Pub/Sub/GCS (GCP).