Ga naar inhoud

AKS-platform: identiteit en toegang

Deze pagina beschrijft wie en wat toegang heeft tot het platform en via welk mechanisme: toegang voor mensen, Kubernetes- en Azure- autorisatie, workload identity, CI/CD-identiteiten, de Key Vault en break-glass-toegang. Het principe is geen statische credentials: alles gebruikt Entra ID, managed identities of federated identities.

Referentieontwerp, jouw deployment kan afwijken

Groeps- en identiteitsnamen zijn de patronen van de referentieconfiguratie. Voor het MCP-brede model zie Identiteits- en toegangsmodel en Toegang, groepen en PIM.

Principes

  • Mensen krijgen rechten alleen via Entra ID-groepen, nooit als individuele toewijzing.
  • Productie en niet-productie hebben aparte groepen. Toegang voor ontwikkelaars in productie is standaard alleen lezen.
  • Functiescheiding: infrastructuurdeployment, image build en GitOps-updates zijn aparte identiteiten.
  • Toegang tot Azure-resources wordt met Terraform beheerd. Autorisatie in het cluster wordt beheerd als YAML in de GitOps-repository en gewijzigd via pull request.
  • Lokale Kubernetes-accounts zijn uitgeschakeld. Aanmelden gaat via Entra ID met MFA.

Identiteitstypen

Identiteit Authenticeert via Geautoriseerd bij Mechanisme
Menselijke gebruikers Entra ID (MFA) Kubernetes API Kubernetes RBAC gebonden aan Entra ID-groepen
AKS-clusteridentiteit User-assigned managed identity Azure Resource Manager Azure RBAC (Cluster baseline)
Workload pods Service account naar federated credential Azure-services Workload identity en Azure RBAC
CI/CD-pipelines GitHub OIDC federated credential Azure en Kubernetes Azure RBAC en cluster roles
Break-glass Entra ID met PIM, MFA Hele cluster cluster-admin-binding

Groepen

Groepsnamen volgen grp-aks-<scope>-<role>[-<team>][-<env>]. De Terraform identity layer maakt de groepen aan die in de map entra_groups van de configuratie staan, plus de break-glass-groep.

Groep Rol Cluster
grp-aks-platform-admins Platformbeheerders, cluster-admin Beide
grp-aks-platform-operators Ingress, monitoring en certificaten beheren Beide
grp-aks-auditors Alleen lezen, clusterbreed Beide
grp-aks-breakglass Noodtoegang Beide
grp-aks-<team>-leads-<env> Teamleads Per omgeving
grp-aks-<team>-devs-<env> Ontwikkelaars van het team Per omgeving

De platform admin-groep en de break-glass-groep worden aan het cluster meegegeven als zijn Entra ID-admingroepen. De hub-integrated configuratie gebruikt een eigen groepenset met een -integrated-suffix, zodat de twee clusters geen groepen delen.

Groepslidmaatschap en PIM-activatie worden niet in Terraform geconfigureerd (beperkte providerondersteuning). Het platformteam of het identiteitsteam van de klant beheert ze.

Kubernetes-autorisatie

Kubernetes RBAC is native (roles en bindings als manifests), uitgerold door GitOps. Azure RBAC voor Kubernetes-autorisatie staat aan op het cluster, en de pipeline-identiteiten gebruiken de Azure-rol Azure Kubernetes Service RBAC Admin.

Rol Soort Doel
cluster-admin Ingebouwd Platformbeheerders en break-glass
platform-operator ClusterRole Platformnamespaces beheren: workloads, services, secrets, gateway- en certificaatresources, monitoringresources, network policies. Nodes en events bekijken
auditor ClusterRole Alleen lezen in het hele cluster
namespace-admin Role Volledig beheer van een teamnamespace
namespace-developer Role Applicaties deployen en debuggen, inclusief exec en routes
namespace-viewer Role Lezen en pod logs

Toegangsmatrix

Rol dev test accp prod
Developer namespace-developer namespace-developer namespace-viewer namespace-viewer
Teamlead namespace-admin namespace-admin namespace-admin namespace-developer
Platform operator Bekijken, clusterbreed Bekijken, clusterbreed Bekijken, clusterbreed Bekijken, clusterbreed
Auditor Bekijken, clusterbreed Bekijken, clusterbreed Bekijken, clusterbreed Bekijken, clusterbreed
Platformbeheerder cluster-admin cluster-admin cluster-admin cluster-admin

Namespaces heten <team>-<env> (bijvoorbeeld team-a-dev). Het netwerkontwerpdocument toont <env>-<team>; de RBAC- manifests, de identiteitsconfiguratie en de load test gebruiken allemaal <team>-<env>.

Beschermde platformnamespaces

kube-system, gateway-system, cert-manager, monitoring, logging, argocd, policy-system en vergelijkbare platform- namespaces zijn beschermd: geen role bindings voor applicatieteams, platformlabels, admission policies die bindings door niet-platformsubjects weigeren, en alleen GitOps-wijzigingen in productie. Labels gebruiken een configureerbaar domein (<labelDomain>/type, <labelDomain>/protected, <labelDomain>/team, <labelDomain>/environment), per klant ingesteld in de GitOps-repository.

Break-glass-toegang

Aspect Ontwerp
Groep grp-aks-breakglass, gebonden aan cluster-admin
Leden Maximaal twee of drie senior platform engineers
Activatie PIM, tijdelijk, maximaal 4 uur, MFA en motivatie vereist
Monitoring Alert op PIM-activatie en op Kubernetes-auditactiviteit van de groep
Review Kwartaalreview van het lidmaatschap

Workload identity

Elke applicatie krijgt een eigen user-assigned managed identity per omgeving, gefedereerd met één Kubernetes service account. Identiteiten worden niet gedeeld tussen applicaties, teams of omgevingen.

sequenceDiagram
    participant Pod
    participant SA as Service account
    participant OIDC as AKS OIDC issuer
    participant Entra as Entra ID
    participant KV as Key Vault
    Pod->>SA: Runs as the annotated service account
    SA->>OIDC: Projected token
    OIDC->>Entra: Token exchange (federated credential)
    Entra-->>Pod: Azure token of the managed identity
    Pod->>KV: Read secret (Azure RBAC)

Wat Terraform aanmaakt voor elk item van de map workload_identities:

Resource Naampatroon Opmerkingen
Managed identity mi-<map key>-<env> In rg-<env>-identity
Federated credential fc-<env>-<namespace>-<service account> Issuer is de OIDC issuer van het cluster, subject is system:serviceaccount:<namespace>:<service account>
Roltoewijzingen Zoals per item vermeld, bijvoorbeeld Key Vault Secrets User op de Key Vault Least privilege per applicatie
workload_identities = {
  "orders-api-prod" = {
    namespace            = "team-a-prod"
    service_account_name = "orders-api"
    roles = [
      {
        role_definition_name = "Key Vault Secrets User"
        scope                = "<key-vault-resource-id>"
      }
    ]
  }
}

Twee stappen op een nieuw cluster

De workload identity-module draait alleen als oidc_issuer_url is ingesteld, en de issuer-URL bestaat pas nadat het cluster is aangemaakt. Deploy op een nieuwe omgeving eerst het cluster, kopieer de issuer-URL naar de configuratie en pas daarna opnieuw toe. Op Azure Local print het bootstrapscript de URL.

CI/CD-identiteiten

Elk item in cicd_identities wordt een user-assigned managed identity mi-cicd-<name> met een federated credential fc-github-<name> voor de GitHub OIDC issuer. Het subject noemt een repository en een GitHub Environment, dus alleen runs van die environment kunnen de identiteit gebruiken. Er bestaan geen client secrets.

Identiteit Verantwoordelijkheid Mag niet
infra-deploy Infrastructuur deployen Images pushen, GitOps wijzigen, apps deployen
image-build Images bouwen en pushen Infrastructuur deployen, Key Vault lezen, het cluster wijzigen
gitops-update (ontwerp) GitOps-manifests bijwerken Infrastructuur deployen, images pushen, Azure benaderen

Toegang van pipelines tot het cluster (bijvoorbeeld voor de load test) wordt gegeven als Azure-roltoewijzing op het cluster (cicd_aks_role_assignments), met opzet buiten de identity-module gehouden. Zie Deployment.

Azure-roltoewijzingen voor mensen

Het ontwerp geeft de platformbeheerders Azure Kubernetes Service Cluster Admin Role op het cluster, operators en auditors Cluster User Role, en de auditors Reader. In de code worden deze aangeleverd via de map identity_role_assignments, die in de referentiebestanden leeg of uitgecommentarieerd is. Vul hem per omgeving in.

Key Vault

Instelling Waarde
Autorisatie Azure RBAC, geen access policies
Netwerk Publieke netwerktoegang uitgeschakeld, default ACL-actie deny, alleen private endpoint (Azure-variant)
Bescherming Purge protection aan, soft delete 90 dagen (configureerbaar)
SKU standard (kan premium zijn voor HSM-backed keys)
Naam Wereldwijd uniek, patroon kv-<purpose>-<env>, ingesteld in de configuratie
Logging AuditEvent en policy-evaluatielogs naar Log Analytics als een workspace is ingesteld

Workloads krijgen alleen Key Vault Secrets User. Het ontwerp kiest voor toegang via de SDK met workload identity boven de CSI driver: elke applicatie gebruikt zijn eigen identiteit, er worden geen secrets naar Kubernetes Secret-objecten gekopieerd en de applicatie bepaalt de caching. De CSI driver add-on staat in de configuratiebestanden van de referentie toch aan (zie Cluster baseline). Regels voor Kubernetes Secrets (geen plaintext secrets in Git, liever Key Vault, eigenaarslabels) staan in Security policy.

Audit

Het ontwerp noemt gebeurtenissen om te monitoren en naar Log Analytics te sturen: wijzigingen in Azure-roltoewijzingen, wijzigingen in managed identities en federated credentials, break-glass-activatie, wijzigingen in cluster-admin-bindings, mislukte Kubernetes-aanmeldingen en het aanmaken van service principal- secrets. Diagnostic settings staan in de referentieconfiguratie standaard uit, dus hiervoor zijn vóór go-live een Log Analytics workspace en de bijbehorende switches nodig.