Dela via


Center for Internet Security (CIS) Kubernetes benchmark

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 Center for Internet Security (CIS) Benchmarks.

Kubernetes CIS-benchmark

Följande är resultaten från CIS Kubernetes V1.27 Benchmark v1.9.0-rekommendationerna för AKS. Resultaten gäller för AKS 1.27.x via AKS 1.29.x.

Säkerhetsnivåer

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 på alla system och som bör orsaka lite eller inget 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.

Utvärderingsstatus

En utvärderingsstatus ingår för varje rekommendation. Utvärderingsstatusen anger om den angivna rekommendationen kan automatiseras eller kräver manuella steg för att implementera. Båda statusarna är lika viktiga och bestäms och stöds enligt definitionen nedan:

  • Automatiserad: Representerar rekommendationer för vilka utvärdering av en teknisk kontroll kan automatiseras helt och verifieras till ett tillstånd för pass/fail. Rekommendationerna innehåller nödvändig information för att implementera automatisering.
  • Manuell: Representerar rekommendationer för vilka utvärdering av en teknisk kontroll inte kan automatiseras helt och kräver alla eller några manuella steg för att verifiera att det konfigurerade tillståndet har angetts som förväntat. Det förväntade tillståndet kan variera beroende på miljön.

Automatiserade rekommendationer påverkar prestandapoängen om de inte tillämpas, medan manuella rekommendationer inte gör det.

Attesteringsstatus

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

  • 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 nodddatorn.
  • Beror på miljö: Rekommendationen tillämpas i användarens specifika miljö och styrs inte av AKS. Automatiserade 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.

Benchmark-information

CIS-ID Beskrivning av rekommendation Utvärderingsstatus Nivå Status
1 Kontrollplanskomponenter
1,1 Konfigurationsfiler för kontrollplansnod
1.1.1 Kontrollera att filbehörigheterna för API-serverpoddens specifikation är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.2 Kontrollera att filägarskapet för API-serverpoddens specifikation är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.3 Se till att filbehörigheterna för specifikationen för kontrollanthanterarens poddar är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.4 Kontrollera att ägarskapet för specifikationsfilen för kontrollanthanterarens poddar är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.5 Kontrollera att filbehörigheterna för scheduler-poddspecifikationen är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.6 Kontrollera att filägarskapet för scheduler-poddspecifikationen är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.7 Kontrollera att filbehörigheterna för etcd-poddspecifikationen är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.8 Kontrollera att filägarskapet för etcd-poddspecifikationen är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.9 Kontrollera att filbehörigheterna för containernätverksgränssnittet är inställda på 600 eller mer restriktiva Manuell L1 Ej tillämpligt
1.1.10 Kontrollera att filägarskapet för containernätverksgränssnittet är inställt på root:root Manuell L1 Ej tillämpligt
1.1.11 Kontrollera att behörigheterna för etcd-datakatalogen är inställda på 700 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.12 Kontrollera att ägarskapet för etcd-datakatalogen är inställt på etcd:etcd Automatiserade L1 Ej tillämpligt
1.1.13 Kontrollera att behörigheterna för admin.conf-filen är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.14 Kontrollera att ägarskapet för filen admin.conf är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.15 Kontrollera att filbehörigheterna scheduler.conf är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.16 Kontrollera att scheduler.conf-filägarskapet är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.17 Kontrollera att behörigheterna för controller-manager.conf-filen är inställda på 600 eller mer restriktiva Automatiserade L1 Ej tillämpligt
1.1.18 Kontrollera att ägarskapet för controller-manager.conf-filen är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.19 Kontrollera att Kubernetes PKI-katalogen och filägarskapet är inställt på root:root Automatiserade L1 Ej tillämpligt
1.1.20 Kontrollera att Behörigheterna för Kubernetes PKI-certifikatfilen är inställda på 600 eller mer restriktiva Manuell L1 Ej tillämpligt
1.1.21 Kontrollera att Behörigheterna för Kubernetes PKI-nyckelfilen är inställda på 600 Manuell L1 Ej tillämpligt
1.2 API Server
1.2.1 Kontrollera att argumentet är inställt på --anonymous-auth false Manuell L1 Godkänd
1.2.2 Kontrollera att parametern --token-auth-file inte har angetts Automatiserade L1 Underkänn
1.2.3 Kontrollera att --DenyServiceExternalIPs inte har angetts Manuell L1 Underkänn
1.2.4 Se till att argumenten --kubelet-client-certificate och --kubelet-client-key anges efter behov Automatiserade L1 Godkänd
1.2.5 Kontrollera att --kubelet-certificate-authority argumentet har angetts efter behov Automatiserade L1 Underkänn
1.2.6 Kontrollera att argumentet inte är inställt på --authorization-mode AlwaysAllow Automatiserade L1 Godkänd
1.2.7 Kontrollera att argumentet --authorization-mode innehåller Node Automatiserade L1 Godkänd
1.2.8 Kontrollera att argumentet --authorization-mode innehåller RBAC Automatiserade L1 Godkänd
1.2.9 Kontrollera att plugin-programmet eventratelimit för antagningskontroll har angetts Manuell L1 Underkänn
1.2.10 Kontrollera att plugin-programmet AlwaysAdmit för antagningskontroll inte har angetts Automatiserade L1 Godkänd
1.2.11 Kontrollera att plugin-programmet AlwaysPullImages för antagningskontroll har angetts Manuell L1 Underkänn
1.2.12 Kontrollera att plugin-programmet ServiceAccount för antagningskontroll har angetts Automatiserade L2 Underkänn
1.2.13 Kontrollera att plugin-programmet NamespaceLifecycle för antagningskontroll har angetts Automatiserade L2 Godkänd
1.2.14 Kontrollera att plugin-programmet NodeRestriction för antagningskontroll har angetts Automatiserade L2 Godkänd
1.2.15 Kontrollera att argumentet är inställt på --profiling false Automatiserade L1 Godkänd
1.2.16 Kontrollera att --audit-log-path argumentet har angetts Automatiserade L1 Godkänd
1.2.17 Kontrollera att argumentet är inställt på --audit-log-maxage 30 eller efter behov Automatiserade L1 Motsvarande kontroll
1.2.18 Kontrollera att argumentet är inställt på --audit-log-maxbackup 10 eller efter behov Automatiserade L1 Motsvarande kontroll
1.2.19 Kontrollera att argumentet är inställt på --audit-log-maxsize 100 eller efter behov Automatiserade L1 Godkänd
1.2.20 Kontrollera att --request-timeout argumentet har angetts efter behov Manuell L1 Godkänd
1.2.21 Kontrollera att argumentet är inställt på --service-account-lookup true Automatiserade L1 Godkänd
1.2.22 Kontrollera att --service-account-key-file argumentet har angetts efter behov Automatiserade L1 Godkänd
1.2.23 Se till att argumenten --etcd-certfile och --etcd-keyfile anges efter behov Automatiserade L1 Godkänd
1.2.24 Se till att argumenten --tls-cert-file och --tls-private-key-file anges efter behov Automatiserade L1 Godkänd
1.2.25 Kontrollera att --client-ca-file argumentet har angetts efter behov Automatiserade L1 Godkänd
1.2.26 Kontrollera att --etcd-cafile argumentet har angetts efter behov Automatiserade L1 Godkänd
1.2.27 Kontrollera att --encryption-provider-config argumentet har angetts efter behov Manuell L1 Beror på miljö
1.2.28 Se till att krypteringsprovidrar är korrekt konfigurerade Manuell L1 Beror på miljö
1.2.29 Se till att API-servern endast använder starka kryptografiska chiffer Manuell L1 Godkänd
1.3 Controller Manager
1.3.1 Kontrollera att --terminated-pod-gc-threshold argumentet har angetts efter behov Manuell L1 Godkänd
1.3.2 Kontrollera att argumentet är inställt på --profiling false Automatiserade L1 Godkänd
1.3.3 Kontrollera att argumentet är inställt på --use-service-account-credentials true Automatiserade L1 Godkänd
1.3.4 Kontrollera att --service-account-private-key-file argumentet har angetts efter behov Automatiserade L1 Godkänd
1.3.5 Kontrollera att --root-ca-file argumentet har angetts efter behov Automatiserade L1 Godkänd
1.3.6 Kontrollera att argumentet RotateKubeletServerCertificate är inställt på true Automatiserade L2 Godkänd
1.3.7 Kontrollera att argumentet är inställt på --bind-address 127.0.0.1 Automatiserade L1 Motsvarande kontroll
1.4 Schemaläggare
1.4.1 Kontrollera att argumentet är inställt på --profiling false Automatiserade L1 Godkänd
1.4.2 Kontrollera att argumentet är inställt på --bind-address 127.0.0.1 Automatiserade L1 Motsvarande kontroll
2 etcd
2.1 Se till att argumenten --cert-file och --key-file anges efter behov Automatiserade L1 Godkänd
2,2 Kontrollera att argumentet är inställt på --client-cert-auth true Automatiserade L1 Godkänd
2.3 Kontrollera att argumentet inte är inställt på --auto-tls sant Automatiserade L1 Godkänd
2.4 Se till att argumenten --peer-cert-file och --peer-key-file anges efter behov Automatiserade L1 Godkänd
2.5 Kontrollera att argumentet är inställt på --peer-client-cert-auth true Automatiserade L1 Godkänd
2,6 Kontrollera att argumentet inte är inställt på --peer-auto-tls sant Automatiserade L1 Godkänd
2,7 Se till att en unik certifikatutfärdare används för etcd Manuell 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 Manuell L1 Godkänd
3.1.2 Autentisering med tjänstkontotoken ska inte användas för användare Manuell L1 Godkänd
3.1.3 Bootstrap-tokenautentisering bör inte användas för användare Manuell L1 Godkänd
3.2 Loggning
3.2.1 Se till att en minimal granskningsprincip skapas Manuell L1 Godkänd
3.2.2 Se till att granskningsprincipen omfattar viktiga säkerhetsproblem Manuell L2 Godkänd
4 Arbetsnoder
4.1 Konfigurationsfiler för arbetsnoder
4.1.1 Kontrollera att kubelet-tjänstfilbehörigheterna är inställda på 600 eller mer restriktiva Automatiserade L1 Godkänd
4.1.2 Kontrollera att kubelet-tjänstfilens ägarskap är inställt på root:root Automatiserade 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 Manuell L1 Ej tillämpligt
4.1.4 Om det finns en kubeconfig-proxyfil kontrollerar du att ägarskapet är inställt på root:root Manuell L1 Ej tillämpligt
4.1.5 Kontrollera att filbehörigheterna --kubeconfig kubelet.conf är inställda på 600 eller mer restriktiva Automatiserade L1 Godkänd
4.1.6 Kontrollera att ägarskapet för --kubeconfig kubelet.conf-filen är inställt på root:root Automatiserade L1 Godkänd
4.1.7 Kontrollera att filbehörigheterna för certifikatutfärdarna är inställda på 600 eller mer restriktiva Manuell L1 Godkänd
4.1.8 Kontrollera att filägarskapet för klientcertifikatutfärdarna är inställt på root:root Manuell L1 Godkänd
4.1.9 Om kubelet config.yaml-konfigurationsfilen används kontrollerar du att behörigheterna är inställda på 600 eller mer restriktiva Automatiserade L1 Godkänd
4.1.10 Om kubelet config.yaml-konfigurationsfilen används kontrollerar du att filägarskapet är inställt på root:root Automatiserade L1 Godkänd
4.2 Kubelet
4.2.1 Kontrollera att argumentet är inställt på --anonymous-auth false Automatiserade L1 Godkänd
4.2.2 Kontrollera att argumentet inte är inställt på --authorization-mode AlwaysAllow Automatiserade L1 Godkänd
4.2.3 Kontrollera att --client-ca-file argumentet har angetts efter behov Automatiserade L1 Godkänd
4.2.4 Kontrollera att argumentet är inställt på --read-only-port 0 Manuell L1 Godkänd
4.2.5 Kontrollera att argumentet inte är inställt på --streaming-connection-idle-timeout 0 Manuell L1 Godkänd
4.2.6 Kontrollera att argumentet är inställt på --make-iptables-util-chains true Automatiserade L1 Godkänd
4.2.7 Kontrollera att --hostname-override argumentet inte har angetts Manuell L1 Godkänd
4.2.8 Kontrollera att --eventRecordQPS argumentet är inställt på en nivå som säkerställer lämplig händelseinsamling Manuell L2 Godkänd
4.2.9 Se till att argumenten --tls-cert-file och --tls-private-key-file anges efter behov Manuell L1 Godkänd
4.2.10 Kontrollera att argumentet inte är inställt på --rotate-certificates false Automatiserade L1 Godkänd
4.2.11 Kontrollera att argumentet RotateKubeletServerCertificate är inställt på true Manuell L1 Underkänn
4.2.12 Se till att Kubelet endast använder starka kryptografiska chiffer Manuell L1 Godkänd
4.2.13 Kontrollera att en gräns har angetts för podd-PID:erna Manuell L1 Godkänd
4.3 kube-proxy
4.3.1 Kontrollera att kube-proxy-måtttjänsten är bunden till localhost Automatiserade L1 Godkänd
5 Policyer
5,1 RBAC- och tjänstkonton
5.1.1 Se till att klusteradministratörsrollen endast används där det behövs Automatiserade L1 Beror på miljö
5.1.2 Minimera åtkomsten till hemligheter Automatiserade L1 Beror på miljö
5.1.3 Minimera användningen av jokertecken i roller och klusterroller Automatiserade L1 Beror på miljö
5.1.4 Minimera åtkomsten till att skapa poddar Automatiserade L1 Beror på miljö
5.1.5 Kontrollera att standardtjänstkonton inte används aktivt Automatiserade L1 Beror på miljö
5.1.6 Kontrollera att tjänstkontotoken endast monteras vid behov Automatiserade L1 Beror på miljö
5.1.7 Undvik användning av system:masters-grupp Manuell L1 Beror på miljö
5.1.8 Begränsa användningen av behörigheterna Bind, Personifiera och Eskalera i Kubernetes-klustret Manuell L1 Beror på miljö
5.1.9 Minimera åtkomsten för att skapa beständiga volymer Manuell L1 Beror på miljö
5.1.10 Minimera åtkomsten till proxyunderresursen för noder Manuell L1 Beror på miljö
5.1.11 Minimera åtkomsten till underresursen för godkännande av certifikattilldelningsobjekt Manuell L1 Beror på miljö
5.1.12 Minimera åtkomsten till webhook-konfigurationsobjekt Manuell L1 Beror på miljö
5.1.13 Minimera åtkomsten till skapande av tjänstkontotoken Manuell L1 Beror på miljö
5.2 Säkerhetsstandarder för poddar
5.2.1 Kontrollera att klustret har minst en aktiv principkontrollmekanism på plats Manuell L1 Beror på miljö
5.2.2 Minimera åtkomsten av privilegierade containrar Manuell L1 Beror på miljö
5.2.3 Minimera antagningen av containrar som vill dela värdprocess-ID-namnområdet Manuell L1 Beror på miljö
5.2.4 Minimera antagningen av containrar som vill dela värd-IPC-namnområdet Manuell L1 Beror på miljö
5.2.5 Minimera antagningen av containrar som vill dela värdnätverkets namnområde Manuell L1 Beror på miljö
5.2.6 Minimera antagningen av containrar med allowPrivilegeEscalation Manuell L1 Beror på miljö
5.2.7 Minimera antagningen av rotcontainrar Manuell L2 Beror på miljö
5.2.8 Minimera antagningen av containrar med funktionen NET_RAW Manuell L1 Beror på miljö
5.2.9 Minimera antagningen av containrar med tillagda funktioner Manuell L1 Beror på miljö
5.2.10 Minimera antagningen av containrar med tilldelade funktioner Manuell L2 Beror på miljö
5.2.11 Minimera antagningen av Windows HostProcess-containrar Manuell L1 Beror på miljö
5.2.12 Minimera antagningen av HostPath-volymer Manuell L1 Beror på miljö
5.2.13 Minimera antagningen av containrar som använder HostPorts Manuell L1 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 Manuell L1 Godkänd
5.3.2 Kontrollera att alla namnområden har definierat nätverksprinciper Manuell 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 Manuell L2 Beror på miljö
5.4.2 Överväg extern lagring av hemligheter Manuell L2 Beror på miljö
5,5 Utökningsbar antagningskontroll
5.5.1 Konfigurera avbildnings proveniens med hjälp av ImagePolicyWebhook-antagningskontrollant Manuell L2 Underkänn
5,6 Allmänna principer
5.6.1 Skapa administrativa gränser mellan resurser med hjälp av namnområden Manuell L1 Beror på miljö
5.6.2 Kontrollera att seccomp-profilen är inställd på docker/standard i dina podddefinitioner Manuell L2 Beror på miljö
5.6.3 Tillämpa säkerhetskontext på dina poddar och containrar Manuell L2 Beror på miljö
5.6.4 Standardnamnområdet ska inte användas Manuell L2 Beror på miljö

Kommentar

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

Ytterligare kommentarer

  • 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 inaktiveras vissa onödiga kernelmoduldrivrutiner i operativsystemet.

Nästa steg

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