Srovnávací test Kubernetes Center for Internet Security (CIS)

Azure Kubernetes Service (AKS) jako zabezpečená služba splňuje standardy SOC, ISO, PCI DSS a HIPAA. Tento článek popisuje posílení zabezpečení použité u AKS na základě srovnávacího testu CIS Kubernetes. Další informace o zabezpečení AKS najdete v tématu Koncepty zabezpečení pro aplikace a clustery ve službě Azure Kubernetes Service (AKS). Další informace o srovnávacím testu CIS naleznete v tématu Center for Internet Security (CIS) Benchmarks.

Srovnávací test CIS Kubernetes

Níže jsou uvedené výsledky doporučení cis Kubernetes V1.27 Benchmark v1.9.0 pro AKS. Výsledky platí pro AKS 1.27.x až AKS 1.29.x.

Úrovně zabezpečení

Srovnávací testy CIS poskytují dvě úrovně nastavení zabezpečení:

  • L1 nebo Úroveň 1 doporučuje základní základní požadavky na zabezpečení, které je možné konfigurovat v jakémkoli systému a které by měly způsobit malé nebo žádné přerušení služby nebo omezené funkčnosti.
  • L2 nebo Úroveň 2 doporučuje nastavení zabezpečení pro prostředí vyžadující větší zabezpečení, které by mohlo vést k určitým omezeným funkcím.

Stav posouzení

Stav posouzení je zahrnutý pro každé doporučení. Stav posouzení označuje, jestli dané doporučení může být automatizované, nebo vyžaduje ruční kroky k implementaci. Oba stavy jsou stejně důležité a jsou určeny a podporovány, jak je definováno níže:

  • Automatizované: Představuje doporučení, pro která může být posouzení technického ovládacího prvku plně automatizované a ověřeno ve stavu průchodu nebo selhání. Doporučení budou obsahovat potřebné informace k implementaci automatizace.
  • Ruční: Představuje doporučení, pro která nelze plně automatizovat posouzení technického ovládacího prvku a vyžaduje všechny nebo některé ruční kroky k ověření, že je nakonfigurovaný stav nastavený podle očekávání. Očekávaný stav se může lišit v závislosti na prostředí.

Automatizovaná doporučení ovlivňují skóre srovnávacího testu, pokud se nepoužívají, ale ruční doporučení ne.

Stav ověření identity

Doporučení můžou mít jeden z následujících stavů ověření identity:

  • Pass: Doporučení bylo použito.
  • Selhání: Doporučení se nepoužílo.
  • Není k dispozici: Doporučení se vztahuje k požadavkům na oprávnění souboru manifestu, které nejsou pro AKS relevantní. Clustery Kubernetes ve výchozím nastavení používají model manifestu k nasazení podů řídicí roviny, které spoléhají na soubory z virtuálního počítače uzlu. Srovnávací test CIS Kubernetes doporučuje tyto soubory s určitými požadavky na oprávnění. Clustery AKS používají chart Helm k nasazení podů řídicí roviny a nespoléhá na soubory na virtuálním počítači uzlu.
  • Závisí na prostředí: Doporučení se použije v konkrétním prostředí uživatele a není řízeno službou AKS. Automatizovaná doporučení ovlivňují skóre srovnávacího testu bez ohledu na to, jestli se doporučení vztahuje na konkrétní prostředí uživatele, nebo ne.
  • Ekvivalentní řízení: Doporučení bylo implementováno jiným, ekvivalentním způsobem.

Podrobnosti o srovnávacím testu

CIS ID Popis doporučení Stav posouzení Level Stav
0 Komponenty řídicí roviny
1,1 Konfigurační soubory uzlů řídicí roviny
1.1.1 Ujistěte se, že jsou oprávnění souboru specifikace podu serveru API nastavená na 600 nebo více omezující. Automatizováno L1
1.1.2 Ujistěte se, že je vlastnictví souboru specifikace podu serveru API nastavené na root:root. Automatizováno L1
1.1.3 Ujistěte se, že jsou oprávnění souboru specifikace podu správce kontroleru nastavená na 600 nebo více omezující. Automatizováno L1
1.1.4 Ujistěte se, že je vlastnictví souboru specifikace podu správce kontroleru nastavené na root:root. Automatizováno L1
1.1.5 Ujistěte se, že jsou oprávnění souboru specifikace podu plánovače nastavená na 600 nebo více omezující. Automatizováno L1
1.1.6 Ujistěte se, že je vlastnictví souboru specifikace podu plánovače nastavené na root:root. Automatizováno L1
1.1.7 Ujistěte se, že jsou oprávnění souboru specifikace podu etcd nastavená na 600 nebo více omezující. Automatizováno L1
1.1.8 Ujistěte se, že je vlastnictví souboru specifikace podu etcd nastavené na root:root. Automatizováno L1
1.1.9 Ujistěte se, že jsou oprávnění k souborům rozhraní Network Interface kontejneru nastavená na 600 nebo více omezující. Ruční L1
1.1.10 Ujistěte se, že je vlastnictví souboru rozhraní Network Interface kontejneru nastavené na root:root. Ruční L1
1.1.11 Ujistěte se, že jsou oprávnění k adresáři dat atd. nastavená na 700 nebo více omezující. Automatizováno L1
1.1.12 Ujistěte se, že je vlastnictví adresáře dat etcd nastavené na etcd:etcd. Automatizováno L1
1.1.13 Ujistěte se, že jsou oprávnění souboru admin.conf nastavená na 600 nebo více omezující. Automatizováno L1
1.1.14 Ujistěte se, že je vlastnictví souboru admin.conf nastavené na root:root. Automatizováno L1
1.1.15 Ujistěte se, že jsou oprávnění souboru scheduler.conf nastavená na 600 nebo více omezující. Automatizováno L1
1.1.16 Ujistěte se, že je vlastnictví souboru scheduler.conf nastavené na root:root. Automatizováno L1
1.1.17 Ujistěte se, že jsou oprávnění souboru controller-manager.conf nastavená na 600 nebo více omezující. Automatizováno L1
1.1.18 Ujistěte se, že je vlastnictví souboru controller-manager.conf nastavené na root:root. Automatizováno L1
1.1.19 Ujistěte se, že je adresář PKI a vlastnictví souboru Kubernetes nastavené na root:root. Automatizováno L1
1.1.20 Ujistěte se, že jsou oprávnění souboru certifikátu PKI Kubernetes nastavená na 600 nebo více omezující. Ruční L1
1.1.21 Ujistěte se, že jsou oprávnění ke souborům klíčů PKI Kubernetes nastavená na 600. Ruční L1
1.2 API Server
1.2.1 Ujistěte se, že --anonymous-auth je argument nastavený na false. Ruční L1 Úspěšné absolvování
1.2.2 Ujistěte se, že --token-auth-file parametr není nastavený. Automatizováno L1 Neúspěch
1.2.3 Ujistěte se, že --DenyServiceExternalIPs není nastavená. Ruční L1 Neúspěch
1.2.4 Ujistěte se, že --kubelet-client-certificate --kubelet-client-key jsou argumenty nastavené podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.5 Ujistěte se, že --kubelet-certificate-authority je argument nastavený podle potřeby. Automatizováno L1 Neúspěch
1.2.6 Ujistěte se, že --authorization-mode argument není nastavený na AlwaysAllow. Automatizováno L1 Úspěšné absolvování
1.2.7 Ujistěte se, že --authorization-mode argument obsahuje uzel. Automatizováno L1 Úspěšné absolvování
1.2.8 Ujistěte se, že --authorization-mode argument obsahuje RBAC. Automatizováno L1 Úspěšné absolvování
1.2.9 Ujistěte se, že je nastavený modul plug-in řízení přístupu EventRateLimit. Ruční L1 Neúspěch
1.2.10 Ujistěte se, že modul plug-in AlwaysAdmit pro řízení přístupu není nastavený. Automatizováno L1 Úspěšné absolvování
1.2.11 Ujistěte se, že je nastavený modul plug-in pro řízení přístupu AlwaysPullImages. Ruční L1 Neúspěch
1.2.12 Ujistěte se, že je nastavený modul plug-in modulu plug-in pro řízení přístupu. Automatizováno L2 Neúspěch
1.2.13 Ujistěte se, že je nastavený modul plug-in NamespaceLifecycle pro řízení přístupu. Automatizováno L2 Úspěšné absolvování
1.2.14 Ujistěte se, že je nastavený modul plug-in NodeRestriction řízení přístupu. Automatizováno L2 Úspěšné absolvování
1.2.15 Ujistěte se, že --profiling je argument nastavený na false. Automatizováno L1 Úspěšné absolvování
1.2.16 Ujistěte se, že --audit-log-path je argument nastavený. Automatizováno L1 Úspěšné absolvování
1.2.17 Ujistěte se, že --audit-log-maxage je argument nastavený na hodnotu 30 nebo podle potřeby. Automatizováno L1 Ekvivalentní ovládací prvek
1.2.18 Ujistěte se, že --audit-log-maxbackup je argument nastavený na hodnotu 10 nebo podle potřeby. Automatizováno L1 Ekvivalentní ovládací prvek
1.2.19 Ujistěte se, že --audit-log-maxsize je argument nastavený na hodnotu 100 nebo podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.20 Ujistěte se, že --request-timeout je argument nastavený podle potřeby. Ruční L1 Úspěšné absolvování
1.2.21 Ujistěte se, že --service-account-lookup je argument nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
1.2.22 Ujistěte se, že --service-account-key-file je argument nastavený podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.23 Ujistěte se, že --etcd-certfile --etcd-keyfile jsou argumenty nastavené podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.24 Ujistěte se, že --tls-cert-file --tls-private-key-file jsou argumenty nastavené podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.25 Ujistěte se, že --client-ca-file je argument nastavený podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.26 Ujistěte se, že --etcd-cafile je argument nastavený podle potřeby. Automatizováno L1 Úspěšné absolvování
1.2.27 Ujistěte se, že --encryption-provider-config je argument nastavený podle potřeby. Ruční L1 Závisí na prostředí.
1.2.28 Ujistěte se, že jsou zprostředkovatelé šifrování správně nakonfigurovaní. Ruční L1 Závisí na prostředí.
1.2.29 Ujistěte se, že server rozhraní API využívá pouze silné kryptografické šifry. Ruční L1 Úspěšné absolvování
1.3 Správce kontroleru
1.3.1 Ujistěte se, že --terminated-pod-gc-threshold je argument nastavený podle potřeby. Ruční L1 Úspěšné absolvování
1.3.2 Ujistěte se, že --profiling je argument nastavený na false. Automatizováno L1 Úspěšné absolvování
1.3.3 Ujistěte se, že --use-service-account-credentials je argument nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
1.3.4 Ujistěte se, že --service-account-private-key-file je argument nastavený podle potřeby. Automatizováno L1 Úspěšné absolvování
1.3.5 Ujistěte se, že --root-ca-file je argument nastavený podle potřeby. Automatizováno L1 Úspěšné absolvování
1.3.6 Ujistěte se, že je argument RotateKubeletServerCertificate nastavený na hodnotu true. Automatizováno L2 Úspěšné absolvování
1.3.7 Ujistěte se, že --bind-address je argument nastavený na hodnotu 127.0.0.1. Automatizováno L1 Ekvivalentní ovládací prvek
1.4 Scheduler
1.4.1 Ujistěte se, že --profiling je argument nastavený na false. Automatizováno L1 Úspěšné absolvování
1.4.2 Ujistěte se, že --bind-address je argument nastavený na hodnotu 127.0.0.1. Automatizováno L1 Ekvivalentní ovládací prvek
2 etcd
2.1 Ujistěte se, že --cert-file --key-file jsou argumenty nastavené podle potřeby. Automatizováno L1 Úspěšné absolvování
2,2 Ujistěte se, že --client-cert-auth je argument nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
2.3 Ujistěte se, že --auto-tls argument není nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
2,4 Ujistěte se, že --peer-cert-file --peer-key-file jsou argumenty nastavené podle potřeby. Automatizováno L1 Úspěšné absolvování
2.5 Ujistěte se, že --peer-client-cert-auth je argument nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
2.6 Ujistěte se, že --peer-auto-tls argument není nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
2.7 Ujistěte se, že se pro atd. používá jedinečná certifikační autorita. Ruční L2 Úspěšné absolvování
3 Konfigurace řídicí roviny
3.1 Ověřování a autorizace
3.1.1 Ověřování klientských certifikátů by se nemělo používat pro uživatele. Ruční L1 Úspěšné absolvování
3.1.2 Ověřování tokenu účtu služby by se nemělo používat pro uživatele. Ruční L1 Úspěšné absolvování
3.1.3 Ověřování pomocí tokenu Bootstrap by se nemělo používat pro uživatele. Ruční L1 Úspěšné absolvování
3.2 Protokolování
3.2.1 Ujistěte se, že se vytvoří minimální zásada auditu. Ruční L1 Úspěšné absolvování
3.2.2 Ujistěte se, že zásady auditu pokrývají klíčové aspekty zabezpečení. Ruční L2 Úspěšné absolvování
4 Pracovní uzly
4.1 Konfigurační soubory pracovních uzlů
4.1.1 Ujistěte se, že jsou oprávnění souboru služby kubelet nastavená na 600 nebo více omezující. Automatizováno L1 Úspěšné absolvování
4.1.2 Ujistěte se, že je vlastnictví souboru služby kubelet nastavené na root:root. Automatizováno L1 Úspěšné absolvování
4.1.3 Pokud existuje soubor kubeconfig proxy serveru, ujistěte se, že jsou oprávnění nastavená na 600 nebo více omezující. Ruční L1
4.1.4 Pokud existuje soubor kubeconfig proxy serveru, ujistěte se, že je vlastnictví nastavené na root:root. Ruční L1
4.1.5 Ujistěte se, že --kubeconfig jsou oprávnění souboru kubelet.conf nastavená na 600 nebo více omezující. Automatizováno L1 Úspěšné absolvování
4.1.6 Ujistěte se, že --kubeconfig je vlastnictví souboru kubelet.conf nastavené na root:root. Automatizováno L1 Úspěšné absolvování
4.1.7 Ujistěte se, že jsou oprávnění k souborům certifikačních autorit nastavená na 600 nebo více omezující. Ruční L1 Úspěšné absolvování
4.1.8 Ujistěte se, že je vlastnictví souboru certifikačních autorit klienta nastavené na root:root. Ruční L1 Úspěšné absolvování
4.1.9 Pokud se používá konfigurační soubor kubelet config.yaml, ujistěte se, že jsou oprávnění nastavená na 600 nebo více omezující. Automatizováno L1 Úspěšné absolvování
4.1.10 Pokud se používá konfigurační soubor kubelet config.yaml, ujistěte se, že je vlastnictví souboru nastavené na root:root. Automatizováno L1 Úspěšné absolvování
4.2 Kubelet
4.2.1 Ujistěte se, že --anonymous-auth je argument nastavený na false. Automatizováno L1 Úspěšné absolvování
4.2.2 Ujistěte se, že --authorization-mode argument není nastavený na AlwaysAllow. Automatizováno L1 Úspěšné absolvování
4.2.3 Ujistěte se, že --client-ca-file je argument nastavený podle potřeby. Automatizováno L1 Úspěšné absolvování
4.2.4 Ujistěte se, že --read-only-port je argument nastavený na hodnotu 0. Ruční L1 Úspěšné absolvování
4.2.5 Ujistěte se, že --streaming-connection-idle-timeout argument není nastavený na hodnotu 0. Ruční L1 Úspěšné absolvování
4.2.6 Ujistěte se, že --make-iptables-util-chains je argument nastavený na hodnotu true. Automatizováno L1 Úspěšné absolvování
4.2.7 Ujistěte se, že --hostname-override argument není nastavený. Ruční L1 Úspěšné absolvování
4.2.8 Ujistěte se, že --eventRecordQPS je argument nastavený na úroveň, která zajišťuje odpovídající zachytávání událostí. Ruční L2 Úspěšné absolvování
4.2.9 Ujistěte se, že --tls-cert-file --tls-private-key-file jsou argumenty nastavené podle potřeby. Ruční L1 Úspěšné absolvování
4.2.10 Ujistěte se, že --rotate-certificates argument není nastavený na false. Automatizováno L1 Úspěšné absolvování
4.2.11 Ověřte, že je argument RotateKubeletServerCertificate nastavený na hodnotu true. Ruční L1 Neúspěch
4.2.12 Ujistěte se, že Kubelet využívá pouze silné kryptografické šifry. Ruční L1 Úspěšné absolvování
4.2.13 Ujistěte se, že je pro identifikátory PID podu nastavené omezení. Ruční L1 Úspěšné absolvování
4.3 kube-proxy
4.3.1 Ujistěte se, že je služba metrik kube-proxy vázána na localhost. Automatizováno L1 Úspěšné absolvování
5 Zásady
5,1 Účty RBAC a služby
5.1.1 Ujistěte se, že se role správce clusteru používá jenom v případě potřeby. Automatizováno L1 Závisí na prostředí.
5.1.2 Minimalizace přístupu k tajným kódům Automatizováno L1 Závisí na prostředí.
5.1.3 Minimalizace použití zástupných znaků v rolích a rolích clusteru Automatizováno L1 Závisí na prostředí.
5.1.4 Minimalizace přístupu k vytváření podů Automatizováno L1 Závisí na prostředí.
5.1.5 Ujistěte se, že se aktivně nepoužívají výchozí účty služeb. Automatizováno L1 Závisí na prostředí.
5.1.6 Ujistěte se, že jsou tokeny účtu služby připojené pouze v případě potřeby. Automatizováno L1 Závisí na prostředí.
5.1.7 Vyhněte se použití skupiny system:master Ruční L1 Závisí na prostředí.
5.1.8 Omezení použití oprávnění Bind, Impersonate a Escalate v clusteru Kubernetes Ruční L1 Závisí na prostředí.
5.1.9 Minimalizace přístupu k vytváření trvalých svazků Ruční L1 Závisí na prostředí.
5.1.10 Minimalizace přístupu k dílčímu prostředku proxy uzlů Ruční L1 Závisí na prostředí.
5.1.11 Minimalizace přístupu k dílčímu prostředku schválení objektů certificatesigningrequests Ruční L1 Závisí na prostředí.
5.1.12 Minimalizace přístupu k objektům konfigurace webhooku Ruční L1 Závisí na prostředí.
5.1.13 Minimalizace přístupu k vytvoření tokenu účtu služby Ruční L1 Závisí na prostředí.
5.2 Standardy zabezpečení podů
5.2.1 Ujistěte se, že cluster má alespoň jeden aktivní mechanismus řízení zásad. Ruční L1 Závisí na prostředí.
5.2.2 Minimalizace přístupu privilegovaných kontejnerů Ruční L1 Závisí na prostředí.
5.2.3 Minimalizace přístupu kontejnerů, které chtějí sdílet obor názvů ID procesu hostitele Ruční L1 Závisí na prostředí.
5.2.4 Minimalizace přístupu kontejnerů, které chtějí sdílet obor názvů IPC hostitele Ruční L1 Závisí na prostředí.
5.2.5 Minimalizace přístupu kontejnerů, které chtějí sdílet obor názvů hostitelské sítě Ruční L1 Závisí na prostředí.
5.2.6 Minimalizace přístupu kontejnerů pomocí allowPrivilegeEscalation Ruční L1 Závisí na prostředí.
5.2.7 Minimalizace přístupu kořenových kontejnerů Ruční L2 Závisí na prostředí.
5.2.8 Minimalizace přístupu kontejnerů s využitím funkce NET_RAW Ruční L1 Závisí na prostředí.
5.2.9 Minimalizace přístupu kontejnerů s přidanými funkcemi Ruční L1 Závisí na prostředí.
5.2.10 Minimalizace přístupu kontejnerů s přiřazenými možnostmi Ruční L2 Závisí na prostředí.
5.2.11 Minimalizace přístupu kontejnerů Windows HostProcess Ruční L1 Závisí na prostředí.
5.2.12 Minimalizace přístupu svazků HostPath Ruční L1 Závisí na prostředí.
5.2.13 Minimalizace přístupu kontejnerů, které používají HostPorts Ruční L1 Závisí na prostředí.
5.3 Zásady sítě a CNI
5.3.1 Ujistěte se, že CNI používané podporuje zásady sítě. Ruční L1 Úspěšné absolvování
5.3.2 Ujistěte se, že všechny obory názvů mají definované zásady sítě. Ruční L2 Závisí na prostředí.
5.4 Správa tajných kódů
5.4.1 Preferujete použití tajných kódů jako souborů před tajnými kódy jako proměnných prostředí. Ruční L2 Závisí na prostředí.
5.4.2 Zvažte externí úložiště tajných kódů. Ruční L2 Závisí na prostředí.
5.5 Rozšiřitelné řízení přístupu
5.5.1 Konfigurace image Provenance pomocí kontroleru přístupu ImagePolicyWebhook Ruční L2 Neúspěch
5.6 Obecné zásady
5.6.1 Vytváření hranic správy mezi prostředky pomocí oborů názvů Ruční L1 Závisí na prostředí.
5.6.2 Ujistěte se, že je profil seccomp nastavený na docker/default v definicích podů. Ruční L2 Závisí na prostředí.
5.6.3 Použití kontextu zabezpečení u podů a kontejnerů Ruční L2 Závisí na prostředí.
5.6.4 Výchozí obor názvů by neměl být použit. Ruční L2 Závisí na prostředí.

Poznámka:

Kromě srovnávacího testu CIS Kubernetes je k dispozici také srovnávací test AKS CIS.

Další poznámky

  • Zabezpečení posíleného operačního systému je vytvořené a udržované speciálně pro AKS a není podporováno mimo platformu AKS.
  • Kvůli dalšímu omezení prostoru pro útok jsou v operačním systému zakázány některé nepotřebné ovladače modulu jádra.

Další kroky

Další informace o zabezpečení AKS najdete v následujících článcích: