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:
Azure Kubernetes Service