RBAC
Role / ClusterRole: rules[].{apiGroups,
resources, verbs}.
RoleBinding / ClusterRoleBinding: bindet Subject (User, Group, ServiceAccount) an Role.
Aggregation:
aggregationRule.clusterRoleSelectors sammelt mehrere
ClusterRoles, view, edit,
admin sind so gebaut.
kubectl auth can-i delete pods --as=alice -n prod kubectl auth can-i --list -n prod \ --as=system:serviceaccount:prod:api
ServiceAccount-Token (seit 1.24)
Projected, bounded: audience- und
Pod-gebunden, kubelet rotiert. Das automatisch gemountete
kube-api-access (3607 s) verlängert der
API-Server per Default auf bis zu 1 Jahr
(--service-account-extend-token-expiration=false für
harte 1 h). Eigene Projected-Tokens (Default 3600 s)
sind nicht betroffen.
Klassische Secret-Tokens werden nicht mehr
automatisch angelegt, explizit via
kubernetes.io/service-account-token oder besser:
TokenRequest-API + projected Volume.
Pod Security Admission
Ersetzt PodSecurityPolicy. Label am Namespace:
pod-security.kubernetes.io/{enforce | audit | warn}:
{privileged | baseline | restricted}. restricted
verlangt runAsNonRoot: true,
allowPrivilegeEscalation: false,
capabilities.drop: [ALL], Seccomp
RuntimeDefault oder Localhost. Profilstand
pinnen: …/enforce-version.
SecurityContext (Pflicht-Set)
runAsNonRoot: true, runAsUser: 1000,
readOnlyRootFilesystem: true,
allowPrivilegeEscalation: false,
capabilities.drop: [ALL],
seccompProfile.type: RuntimeDefault. Pod-Ebene:
hostUsers: false (User Namespaces, GA 1.36),
Container-Root ist auf dem Host unprivilegiert. Braucht idmap-Mounts
(Linux ≥ 6.3), containerd ≥ 2.0 oder CRI-O ≥ 1.25, runc ≥ 1.2
oder crun ≥ 1.9.
Secrets at Rest
etcd-Klartext per Default. KMS v2 (GA 1.29, v1
seit 1.29 per Default aus) via EncryptionConfiguration
+ externer KMS (Vault, Cloud-KMS) für Envelope-Encryption.
Nach Aktivierung oder Key-Rotation bleiben Altdaten
unverändert: StorageVersionMigration
(storagemigration.k8s.io/v1, GA 1.37) schreibt sie
neu.
Alternativ: External Secrets Operator.