Kubetier
  1. A federated identity credential must already exist on the managed identity, naming the cluster OIDC issuer and system:serviceaccount:<namespace>:<name> as its subject

  2. Entra matches that credential on issuer and subject alone, so the ServiceAccount name is the whole secret and no annotation takes part in the trust decision

  3. A pod running under that ServiceAccount, projecting a serviceAccountToken with audience api://AzureADTokenExchange, receives an assertion Entra accepts

  4. Exchanging the assertion returns an access token for the managed identity, carrying every Azure role assigned to it

  5. create serviceaccounts/token mints the same assertion with no pod involved, and the token it buys is usable from outside the cluster

  6. The pod label azure.workload.identity/use and the ServiceAccount client-id annotation only drive the addon webhook, a convenience for applications rather than the control

Rights needed, any one set:

Note:

Not a defect and nothing to patch.

The federated credential is the trust anchor, so an audit that looks only for the azure.workload.identity annotation misses every variant that does not use the addon webhook.

K8s docs ↗