Kubernetes-benchmark för Center for Internet Security (CIS)

Som en säker tjänst uppfyller Azure Kubernetes Service (AKS) SOC-, ISO-, PCI DSS- och HIPAA-standarder. Den här artikeln beskriver säkerhetshärdningen som tillämpas på AKS baserat på CIS Kubernetes-riktmärket. Mer information om AKS-säkerhet finns i Säkerhetsbegrepp för program och kluster i Azure Kubernetes Service (AKS). Mer information om CIS-benchmark finns i Cis-riktmärken (Center for Internet Security).

Kubernetes CIS-benchmark

Följande är resultaten från CIS Kubernetes V1.24 Benchmark v1.0.0-rekommendationer för AKS. Dessa gäller för AKS 1.21.x via AKS 1.24.x.

Poängsatta rekommendationer påverkar benchmark-poängen om de inte tillämpas, medan not scored-rekommendationer inte gör det.

CIS-riktmärken ger två nivåer av säkerhetsinställningar:

  • L1, eller nivå 1, rekommenderar grundläggande grundläggande säkerhetskrav som kan konfigureras i alla system och som bör orsaka lite eller inga avbrott i tjänsten eller nedsatt funktionalitet.
  • L2, eller nivå 2, rekommenderar säkerhetsinställningar för miljöer som kräver större säkerhet som kan resultera i vissa begränsade funktioner.

Rekommendationer kan ha någon av följande statusar:

  • Pass – rekommendationen har tillämpats.
  • Misslyckas – rekommendationen har inte tillämpats.
  • N/A – rekommendationen gäller behörighetskrav för manifestfiler som inte är relevanta för AKS. Kubernetes-kluster använder som standard en manifestmodell för att distribuera kontrollplanets poddar, som förlitar sig på filer från den virtuella nodddatorn. CIS Kubernetes-benchmark rekommenderar att dessa filer måste ha vissa behörighetskrav. AKS-kluster använder ett Helm-diagram för att distribuera kontrollplanspoddar och förlitar sig inte på filer på den virtuella noddatorn.
  • Beror på miljö – rekommendationen tillämpas i användarens specifika miljö och styrs inte av AKS. Poängsatta rekommendationer påverkar prestandapoängen oavsett om rekommendationen gäller för användarens specifika miljö eller inte.
  • Motsvarande kontroll – rekommendationen har implementerats på ett annat, likvärdigt sätt.
CIS-ID Rekommendationsbeskrivning Bedömningstyp Nivå Status
1 Kontrollplanskomponenter
1.1 Konfigurationsfiler för kontrollplanets nod
1.1.1 Kontrollera att filbehörigheterna för API-serverpoddens specifikation är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.2 Kontrollera att filägarskapet för API-serverpoddens specifikation är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.3 Kontrollera att filbehörigheterna för kontrollanthanterarens poddspecifikation är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.4 Kontrollera att ägarskapet för specifikationsfilen för kontrollanthanterarens podd har angetts till root:root Gjorde L1 Ej tillämpligt
1.1.5 Kontrollera att filbehörigheterna för scheduler-poddspecifikationen är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.6 Kontrollera att filägarskapet för scheduler-poddspecifikationen är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.7 Kontrollera att filbehörigheterna för etcd-poddspecifikationen är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.8 Kontrollera att filägarskapet för etcd-poddspecifikationen är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.9 Kontrollera att filbehörigheterna för containernätverksgränssnittet är inställda på 600 eller mer restriktiva Inte poängsatt L1 Ej tillämpligt
1.1.10 Kontrollera att filägarskapet för containernätverksgränssnittet är inställt på root:root Inte poängsatt L1 Ej tillämpligt
1.1.11 Kontrollera att behörigheterna för etcd-datakatalogen är inställda på 700 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.12 Kontrollera att ägarskapet för etcd-datakatalogen är inställt på etcd:etcd Gjorde L1 Ej tillämpligt
1.1.13 Kontrollera att filbehörigheterna admin.conf har angetts till 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.14 Kontrollera att admin.conf-filägarskapet är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.15 Kontrollera att filbehörigheterna för scheduler.conf är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.16 Kontrollera att filägarskapet för scheduler.conf är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.17 Kontrollera att behörigheterna för filen controller-manager.conf är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.18 Kontrollera att ägarskapet för filen controller-manager.conf är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.19 Kontrollera att Kubernetes PKI-katalogen och filägarskapet är inställt på root:root Gjorde L1 Ej tillämpligt
1.1.20 Kontrollera att behörigheterna för Kubernetes PKI-certifikatfilen är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
1.1.21 Kontrollera att behörigheterna för Kubernetes PKI-nyckelfilen är inställda på 600 Gjorde L1 Ej tillämpligt
1.2 API Server
1.2.1 Kontrollera att argumentet är inställt på --anonymous-auth false Inte poängsatt L1 Godkänd
1.2.2 Kontrollera att parametern --token-auth-file inte har angetts Gjorde L1 Underkänn
1.2.3 Kontrollera att --DenyServiceExternalIPs inte har angetts Gjorde L1 Godkänd
1.2.4 Se till att argumenten --kubelet-client-certificate och --kubelet-client-key anges efter behov Gjorde L1 Godkänd
1.2.5 Kontrollera att --kubelet-certificate-authority argumentet är inställt på lämpligt sätt Gjorde L1 Underkänn
1.2.6 Kontrollera att argumentet inte är inställt på --authorization-mode AlwaysAllow Gjorde L1 Godkänd
1.2.7 Kontrollera att argumentet --authorization-mode innehåller Node Gjorde L1 Godkänd
1.2.8 Kontrollera att argumentet --authorization-mode innehåller RBAC Gjorde L1 Godkänd
1.2.9 Kontrollera att plugin-programmet EventRateLimit för antagningskontroll har angetts Inte poängsatt L1 Underkänn
1.2.10 Kontrollera att plugin-programmet för antagningskontroll AlwaysAdmit inte har angetts Gjorde L1 Godkänd
1.2.11 Kontrollera att plugin-programmet för antagningskontroll AlwaysPullImages har angetts Inte poängsatt L1 Underkänn
1.2.12 Kontrollera att plugin-programmet SecurityContextDeny för antagningskontroll har angetts om PodSecurityPolicy inte används Inte poängsatt L1 Underkänn
1.2.13 Kontrollera att plugin-programmet för antagningskontroll ServiceAccount har angetts Gjorde L1 Godkänd
1.2.14 Kontrollera att plugin-programmet NamespaceLifecycle för antagningskontroll har angetts Gjorde L1 Godkänd
1.2.15 Kontrollera att plugin-programmet NodeRestriction för antagningskontroll har angetts Gjorde L1 Godkänd
1.2.16 Kontrollera att argumentet inte är inställt på --secure-port 0 Gjorde L1 Godkänd
1.2.17 Kontrollera att argumentet är inställt på --profiling false Gjorde L1 Godkänd
1.2.18 Kontrollera att --audit-log-path argumentet har angetts Gjorde L1 Godkänd
1.2.19 Kontrollera att argumentet är inställt på --audit-log-maxage 30 eller efter behov Gjorde L1 Motsvarande kontroll
1.2.20 Kontrollera att argumentet är inställt på --audit-log-maxbackup 10 eller efter behov Gjorde L1 Motsvarande kontroll
1.2.21 Kontrollera att argumentet är inställt på --audit-log-maxsize 100 eller efter behov Gjorde L1 Godkänd
1.2.22 Kontrollera att --request-timeout argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.2.23 Kontrollera att argumentet är inställt på --service-account-lookup true Gjorde L1 Godkänd
1.2.24 Kontrollera att --service-account-key-file argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.2.25 Se till att argumenten --etcd-certfile och --etcd-keyfile anges efter behov Gjorde L1 Godkänd
1.2.26 Se till att argumenten --tls-cert-file och --tls-private-key-file anges efter behov Gjorde L1 Godkänd
1.2.27 Kontrollera att --client-ca-file argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.2.28 Kontrollera att --etcd-cafile argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.2.29 Kontrollera att --encryption-provider-config argumentet är inställt på lämpligt sätt Gjorde L1 Beror på miljö
1.2.30 Se till att krypteringsprovidrar är korrekt konfigurerade Gjorde L1 Beror på miljö
1.2.31 Se till att API-servern endast använder starka kryptografiska chiffer Inte poängsatt L1 Godkänd
1.3 Controller Manager
1.3.1 Kontrollera att --terminated-pod-gc-threshold argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.3.2 Kontrollera att argumentet är inställt på --profiling false Gjorde L1 Godkänd
1.3.3 Kontrollera att argumentet är inställt på --use-service-account-credentials true Gjorde L1 Godkänd
1.3.4 Kontrollera att --service-account-private-key-file argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.3.5 Kontrollera att --root-ca-file argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
1.3.6 Kontrollera att argumentet RotateKubeletServerCertificate är inställt på true Gjorde L2 Underkänn
1.3.7 Kontrollera att argumentet är inställt på --bind-address 127.0.0.1 Gjorde L1 Motsvarande kontroll
1.4 Scheduler
1.4.1 Kontrollera att argumentet är inställt på --profiling false Gjorde L1 Godkänd
1.4.2 Kontrollera att argumentet är inställt på --bind-address 127.0.0.1 Gjorde L1 Motsvarande kontroll
2 etcd
2.1 Se till att argumenten --cert-file och --key-file anges efter behov Gjorde L1 Godkänd
2.2 Kontrollera att argumentet är inställt på --client-cert-auth true Gjorde L1 Godkänd
2.3 Kontrollera att argumentet inte är inställt på --auto-tls true Gjorde L1 Godkänd
2.4 Se till att argumenten --peer-cert-file och --peer-key-file anges efter behov Gjorde L1 Godkänd
2.5 Kontrollera att argumentet är inställt på --peer-client-cert-auth true Gjorde L1 Godkänd
2,6 Kontrollera att argumentet inte är inställt på --peer-auto-tls true Gjorde L1 Godkänd
2.7 Se till att en unik certifikatutfärdare används för etcd Inte poängsatt L2 Godkänd
3 Konfiguration av kontrollplan
3.1 Autentisering och auktorisering
3.1.1 Klientcertifikatautentisering bör inte användas för användare Inte poängsatt L2 Godkänd
3.2 Loggning
3.2.1 Se till att en minimal granskningsprincip skapas Gjorde L1 Godkänd
3.2.2 Se till att granskningsprincipen omfattar viktiga säkerhetsproblem Inte poängsatt L2 Godkänd
4 Arbetsnoder
4.1 Konfigurationsfiler för arbetsnod
4.1.1 Kontrollera att kubelet-tjänstens filbehörigheter är inställda på 600 eller mer restriktiva Gjorde L1 Godkänd
4.1.2 Kontrollera att ägarskapet för kubelet-tjänstens fil är inställt på root:root Gjorde L1 Godkänd
4.1.3 Om det finns en kubeconfig-proxyfil kontrollerar du att behörigheterna är inställda på 600 eller mer restriktiva Gjorde L1 Ej tillämpligt
4.1.4 Om det finns en kubeconfig-proxyfil kontrollerar du att ägarskapet är inställt på root:root Gjorde L1 Ej tillämpligt
4.1.5 Kontrollera att behörigheterna för --kubeconfig kubelet.conf-filen är inställda på 600 eller mer restriktiva Gjorde L1 Godkänd
4.1.6 Kontrollera att ägarskapet för --kubeconfig filen kubelet.conf är inställt på root:root Gjorde L1 Godkänd
4.1.7 Kontrollera att filbehörigheterna för certifikatutfärdarna är inställda på 600 eller mer restriktiva Gjorde L1 Godkänd
4.1.8 Kontrollera att filägarskapet för klientcertifikatutfärdarna är inställt på root:root Gjorde L1 Godkänd
4.1.9 Om konfigurationsfilen kubelet config.yaml används kontrollerar du att behörigheterna är inställda på 600 eller mer restriktiva Gjorde L1 Godkänd
4.1.10 Om kubelet config.yaml-konfigurationsfilen används kontrollerar du att filägarskapet är inställt på root:root Gjorde L1 Godkänd
4.2 Kubelet
4.2.1 Kontrollera att argumentet är inställt på --anonymous-auth false Gjorde L1 Godkänd
4.2.2 Kontrollera att argumentet inte är inställt på --authorization-mode AlwaysAllow Gjorde L1 Godkänd
4.2.3 Kontrollera att --client-ca-file argumentet är inställt på lämpligt sätt Gjorde L1 Godkänd
4.2.4 Kontrollera att argumentet är inställt på --read-only-port 0 Gjorde L1 Godkänd
4.2.5 Kontrollera att argumentet inte är inställt på --streaming-connection-idle-timeout 0 Gjorde L1 Godkänd
4.2.6 Kontrollera att argumentet är inställt på --protect-kernel-defaults true Gjorde L1 Godkänd
4.2.7 Kontrollera att argumentet är inställt på --make-iptables-util-chains true Gjorde L1 Godkänd
4.2.8 Kontrollera att --hostname-override argumentet inte har angetts Inte poängsatt L1 Godkänd
4.2.9 Se till att argumentet eventRecordQPS är inställt på en nivå som säkerställer lämplig händelseinsamling Inte poängsatt L2 Godkänd
4.2.10 Kontrollera att argumenten --tls-cert-fileoch --tls-private-key-file anges efter behov Gjorde L1 Godkänd
4.2.11 Kontrollera att argumentet inte är inställt på --rotate-certificates false Gjorde L1 Godkänd
4.2.12 Kontrollera att argumentet RotateKubeletServerCertificate är inställt på true Gjorde L1 Godkänd
4.2.13 Se till att Kubelet endast använder starka kryptografiska chiffer Inte poängsatt L1 Godkänd
5 Principer
5,1 RBAC- och tjänstkonton
5.1.1 Kontrollera att klusteradministratörsrollen endast används där det behövs Inte poängsatt L1 Beror på miljö
5.1.2 Minimera åtkomsten till hemligheter Inte poängsatt L1 Beror på miljö
5.1.3 Minimera användningen av jokertecken i Roller och KlusterRoller Inte poängsatt L1 Beror på miljö
5.1.4 Minimera åtkomsten till att skapa poddar Inte poängsatt L1 Beror på miljö
5.1.5 Kontrollera att standardtjänstkonton inte används aktivt Gjorde L1 Beror på miljö
5.1.6 Kontrollera att tjänstkontotoken endast monteras vid behov Inte poängsatt L1 Beror på miljö
5.2 Poddsäkerhetsprinciper
5.2.1 Minimera åtkomsten av privilegierade containrar Inte poängsatt L1 Beror på miljö
5.2.2 Minimera antagningen av containrar som vill dela värdprocess-ID-namnområdet Gjorde L1 Beror på miljö
5.2.3 Minimera antagningen av containrar som vill dela värd-IPC-namnområdet Gjorde L1 Beror på miljö
5.2.4 Minimera antagningen av containrar som vill dela värdnätverkets namnområde Gjorde L1 Beror på miljö
5.2.5 Minimera införsel av containrar med allowPrivilegeEscalation Gjorde L1 Beror på miljö
5.2.6 Minimera antagningen av rotcontainrar Inte poängsatt L2 Beror på miljö
5.2.7 Minimera intagningen av containrar med NET_RAW-funktionen Inte poängsatt L1 Beror på miljö
5.2.8 Minimera antagningen av containrar med ytterligare funktioner Inte poängsatt L1 Beror på miljö
5.2.9 Minimera antagningen av containrar med tilldelade funktioner Inte poängsatt L2 Beror på miljö
5.3 Nätverksprinciper och CNI
5.3.1 Se till att det CNI som används har stöd för nätverksprinciper Inte poängsatt L1 Godkänd
5.3.2 Kontrollera att alla namnområden har definierade nätverksprinciper Gjorde L2 Beror på miljö
5.4 Hantering av hemligheter
5.4.1 Föredrar att använda hemligheter som filer framför hemligheter som miljövariabler Inte poängsatt L1 Beror på miljö
5.4.2 Överväg extern hemlig lagring Inte poängsatt L2 Beror på miljö
5,5 Utökningsbar antagningskontroll
5.5.1 Konfigurera image provenance med hjälp av ImagePolicyWebhook-antagningskontrollant Inte poängsatt L2 Beror på miljö
5,6 Allmänna principer
5.6.1 Skapa administrativa gränser mellan resurser med hjälp av namnområden Inte poängsatt L1 Beror på miljö
5.6.2 Kontrollera att seccomp-profilen är inställd på docker/standard i podddefinitionerna Inte poängsatt L2 Beror på miljö
5.6.3 Tillämpa säkerhetskontext på dina poddar och containrar Inte poängsatt L2 Beror på miljö
5.6.4 Standardnamnområdet ska inte användas Gjorde L2 Beror på miljö

Anteckning

Utöver Kubernetes CIS-riktmärket finns även ett AKS CIS-benchmark tillgängligt.

Ytterligare information

  • Det säkerhetshärdade operativsystemet skapas och underhålls specifikt för AKS och stöds inte utanför AKS-plattformen.
  • För att ytterligare minska attackytan har vissa onödiga kernelmoduldrivrutiner inaktiverats i operativsystemet.

Nästa steg

Mer information om AKS-säkerhet finns i följande artiklar: