• System Calls (syscalls): The syscall boundary between the container and the shared kernel is generally authorized by a set of capabilities, some of which are “privileged.” By default the container should have no privileged capabilities, run as a non-root user and use a minimal seccomp profile.
  • Kubernetes API Server: Every Kubernetes workload runs as a service account (possibly the namespace default service account). Each workload should run as its own service account and this service account should only be granted access to exactly the “nouns” and “verbs” needed. Wherever possible scope this access to a single namespace (good) or resource (better). When no access is needed, mounting of the service account token should be disabled.
  • Cloud Provider IAM: Wherever possible, leverage “workload identity” mechanisms to scope IAM roles to a specific workload. This is generally via a service account and another important reason to have these be 1:1. Any capabilities granted to this role should follow similar guidance to #2 and minimize the set of capabilities the workload has access to (starting with an empty set).