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