Skip to main content

Kubernetes Workload Attestor

The Kubernetes attestor identifies workloads by querying the Kubernetes API for the pod that owns the requesting process.

Configuration

Enable the Kubernetes attestor in the WorkloadAttestation section:

section: WorkloadAttestation
schema: v1
spec:
kubernetes:
enabled: true
includeAnnotationPrefixes:
- "example.com/"
FieldDefaultDescription
kubernetes.enabledtrueEnable or disable Kubernetes attestation
kubernetes.includeAnnotationPrefixes[]Annotation key prefixes to include as attributes. Empty means no annotations. Restart required to change.

Attributes

The following attributes are collected for workloads running in Kubernetes-based platforms (e.g. k8s) and can be used in path templates, JWT custom claims, and X.509 Subject customization. Some attributes are restricted to specific surfaces — see the Notes column.

Kubernetes AttributePath Template VariableNotes
Pod Image Countkubernetes.pod.image_countNumber of containers in the pod. E.g. 1
Pod Init Image Countkubernetes.pod.init_image_countNumber of init containers in the pod. E.g. 0
Pod Namekubernetes.pod.name
Namespacekubernetes.pod.namespace
Pod UIDkubernetes.pod.uid
Pod Node Namekubernetes.pod.node.name
Pod Ownerkubernetes.pod.ownerOwner of the pod, formatted as Type:Name. E.g. ReplicaSet:my-replicaset-5cfd45f6c9. See note below.
Pod Owner UIDkubernetes.pod.owner_uidUID of the pod's owner. E.g. 316ea285-b878-4d20-a9fe-2e1c79b0f083. See note below.
Service Accountkubernetes.pod.service_account
Pod Container Image Namekubernetes.pod.container.<container_name>.image.nameOne entry per container in the pod. Not available in path templates.
Pod Container Image IDkubernetes.pod.container.<container_name>.image.idOne entry per container in the pod. Not available in path templates.
Pod Init Container Image Namekubernetes.pod.init_container.<container_name>.image.nameOne entry per init container in the pod. Not available in path templates.
Pod Init Container Image IDkubernetes.pod.init_container.<container_name>.image.idOne entry per init container in the pod. Not available in path templates.
Pod Labelkubernetes.pod.label[<label_key>]One entry per label on the pod
Pod Annotationkubernetes.pod.annotation[<annotation_key>]One entry per allowlisted annotation on the pod
Container Namekubernetes.container.nameDisabled by default. See below.
Container Image Namekubernetes.container.image.nameDisabled by default. See below.
Container Image IDkubernetes.container.image.idDisabled by default. See below.
Pod owner attributes

kubernetes.pod.owner and kubernetes.pod.owner_uid are derived from the pod's OwnerReferences. If there are multiple entries, the last owner in OwnerReferences is used.

Label and annotation keys with special characters

Pod label and pod annotation keys containing forward slashes (/) or dashes (-) require Trust Domain Server version 0.28.0 or newer. On earlier versions, configuration using these keys will fail synchronization, and the server will remain on its previous configuration.

Annotation allowlist

Pod annotations are emitted only for keys matching an allowlisted prefix. Configure prefixes via kubernetes.includeAnnotationPrefixes in the WorkloadAttestation managed configuration section. For example, to expose the annotation example.com/my-annotation:

section: WorkloadAttestation
schema: v1
spec:
kubernetes:
includeAnnotationPrefixes:
- "example.com/"
Enabling container attributes

Container attributes must be enabled by setting includeContainerAttributes: true in the relevant platform block (e.g. k8s, istio) of the spirl-system Helm values.

Workload container vs. pod container attributes

The kubernetes.container.* attributes describe the container running the attested workload. To access attributes of other containers in the same pod, use the kubernetes.pod.container.<container_name>.* attributes instead.