Udostępnij za pośrednictwem


Test porównawczy platformy Kubernetes w usłudze Center for Internet Security (CIS)

Jako bezpieczna usługa usługa Azure Kubernetes Service (AKS) jest zgodna ze standardami SOC, ISO, PCI DSS i HIPAA. W tym artykule opisano wzmocnienie zabezpieczeń stosowane do usługi AKS na podstawie testu porównawczego CIS Kubernetes. Aby uzyskać więcej informacji na temat zabezpieczeń usługi AKS, zobacz Pojęcia dotyczące zabezpieczeń aplikacji i klastrów w usłudze Azure Kubernetes Service (AKS). Aby uzyskać więcej informacji na temat testu porównawczego CIS, zobacz Centrum testów porównawczych zabezpieczeń internetowych (CIS).

Test porównawczy ciS platformy Kubernetes

Poniżej przedstawiono wyniki zaleceń ciS Kubernetes V1.27 Benchmark v1.8.0 w usłudze AKS. Wyniki mają zastosowanie do usługi AKS 1.21.x do usługi AKS 1.27.x.

Wyniki zaleceń mają wpływ na wynik testu porównawczego, jeśli nie są stosowane, a rekomendacje nie są oceniane.

Testy porównawcze CIS zapewniają dwa poziomy ustawień zabezpieczeń:

  • L1 lub Poziom 1 zaleca podstawowe wymagania dotyczące zabezpieczeń, które można skonfigurować w dowolnym systemie i powinny powodować niewielkie przerwy w działaniu usługi lub ograniczonej funkcjonalności.
  • L2 lub Poziom 2 zaleca ustawienia zabezpieczeń dla środowisk wymagających większego bezpieczeństwa, co może spowodować zmniejszenie funkcjonalności.

Rekomendacje może mieć jeden z następujących stanów:

  • Pass — zalecenie zostało zastosowane.
  • Niepowodzenie — zalecenie nie zostało zastosowane.
  • Nie dotyczy — zalecenie dotyczy wymagań dotyczących uprawnień do pliku manifestu, które nie są istotne dla usługi AKS. Klastry Kubernetes domyślnie używają modelu manifestu do wdrażania zasobników płaszczyzny sterowania, które opierają się na plikach z maszyny wirtualnej węzła. Test porównawczy CIS Kubernetes zaleca, aby te pliki miały pewne wymagania dotyczące uprawnień. Klastry usługi AKS używają wykresu Helm do wdrażania zasobników płaszczyzny sterowania i nie polegają na plikach na maszynie wirtualnej węzła.
  • Zależy od środowiska — zalecenie jest stosowane w określonym środowisku użytkownika i nie jest kontrolowane przez usługę AKS. Wyniki zaleceń mają wpływ na ocenę porównawczą, czy zalecenie ma zastosowanie do określonego środowiska użytkownika, czy nie.
  • Równoważna kontrola — zalecenie zostało zaimplementowane w inny, równoważny sposób.
Identyfikator CIS Opis rekomendacji Typ oceniania Poziom Stan
1 Składniki płaszczyzny sterowania
1.1 Pliki konfiguracji węzła płaszczyzny sterowania
1.1.1 Upewnij się, że uprawnienia pliku specyfikacji zasobnika serwera interfejsu API są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.2 Upewnij się, że własność pliku specyfikacji zasobnika serwera interfejsu API jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.3 Upewnij się, że uprawnienia pliku specyfikacji zasobnika menedżera kontrolera są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.4 Upewnij się, że własność pliku specyfikacji zasobnika menedżera kontrolera jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.5 Upewnij się, że uprawnienia pliku specyfikacji zasobnika harmonogramu są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.6 Upewnij się, że własność pliku specyfikacji zasobnika harmonogramu jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.7 Upewnij się, że uprawnienia pliku specyfikacji zasobnika etcd są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.8 Upewnij się, że własność pliku specyfikacji zasobnika etcd jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.9 Upewnij się, że uprawnienia pliku interfejsu sieciowego kontenera są ustawione na 600 lub bardziej restrykcyjne Nie oceniliśmy L1 Nie dotyczy
1.1.10 Upewnij się, że własność pliku interfejsu sieciowego kontenera jest ustawiona na root:root Nie oceniliśmy L1 Nie dotyczy
1.1.11 Upewnij się, że uprawnienia katalogu danych etcd są ustawione na 700 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.12 Upewnij się, że właściwość katalogu danych etcd została ustawiona na etcd:etcd Zdobył L1 Nie dotyczy
1.1.13 Upewnij się, że uprawnienia pliku admin.conf są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.14 Upewnij się, że własność pliku admin.conf jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.15 Upewnij się, że uprawnienia pliku scheduler.conf są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.16 Upewnij się, że własność pliku scheduler.conf jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.17 Upewnij się, że uprawnienia pliku controller-manager.conf są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.18 Upewnij się, że własność pliku controller-manager.conf jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.19 Upewnij się, że katalog I własność pliku PKI platformy Kubernetes jest ustawiona na root:root Zdobył L1 Nie dotyczy
1.1.20 Upewnij się, że uprawnienia pliku certyfikatu PKI platformy Kubernetes są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
1.1.21 Upewnij się, że uprawnienia pliku klucza PKI platformy Kubernetes są ustawione na 600 Zdobył L1 Nie dotyczy
1.2 Serwer interfejsu API
1.2.1 Upewnij się, że --anonymous-auth argument ma wartość false Nie oceniliśmy L1 Zdane
1.2.2 Upewnij się, że --token-auth-file parametr nie został ustawiony Zdobył L1 Niepowodzenie
1.2.3 Upewnij się, że --DenyServiceExternalIPs nie ustawiono Zdobył L1 Niepowodzenie
1.2.4 Upewnij się, że --kubelet-client-certificate argumenty i --kubelet-client-key są ustawione odpowiednio Zdobył L1 Zdane
1.2.5 Upewnij się, że --kubelet-certificate-authority argument jest ustawiony zgodnie z potrzebami Zdobył L1 Niepowodzenie
1.2.6 Upewnij się, że --authorization-mode argument nie jest ustawiony na Wartość AlwaysAllow Zdobył L1 Zdane
1.2.7 Upewnij się, że --authorization-mode argument zawiera węzeł Zdobył L1 Zdane
1.2.8 Upewnij się, że argument zawiera kontrolę dostępu opartą na rolach --authorization-mode Zdobył L1 Zdane
1.2.9 Upewnij się, że ustawiono wtyczkę kontroli dostępu EventRateLimit Nie oceniliśmy L1 Niepowodzenie
1.2.10 Upewnij się, że wtyczka AlwaysAdmit kontroli dostępu nie jest ustawiona Zdobył L1 Zdane
1.2.11 Upewnij się, że ustawiono wtyczkę kontroli dostępu AlwaysPullImages Nie oceniliśmy L1 Niepowodzenie
1.2.12 Upewnij się, że wtyczka kontroli dostępu SecurityContextDeny jest ustawiona, jeśli podSecurityPolicy nie jest używany Nie oceniliśmy L1 Niepowodzenie
1.2.13 Upewnij się, że ustawiono wtyczkę kontroli dostępu ServiceAccount Zdobył L1 Zdane
1.2.14 Upewnij się, że ustawiono wtyczkę kontroli dostępu NamespaceLifecycle Zdobył L1 Zdane
1.2.15 Upewnij się, że ustawiono wtyczkę kontroli dostępu NodeRestriction Zdobył L1 Zdane
1.2.16 Upewnij się, że --secure-port argument nie jest ustawiony na 0 Zdobył L1 Zdane
1.2.17 Upewnij się, że --profiling argument ma wartość false Zdobył L1 Zdane
1.2.18 Upewnij się, że --audit-log-path argument jest ustawiony Zdobył L1 Równoważna kontrolka
1.2.19 Upewnij się, że --audit-log-maxage argument jest ustawiony na 30 lub odpowiednio Zdobył L1 Równoważna kontrolka
1.2.20 Upewnij się, że --audit-log-maxbackup argument jest ustawiony na 10 lub odpowiednio Zdobył L1 Zdane
1.2.21 Upewnij się, że --audit-log-maxsize argument jest ustawiony na 100 lub odpowiednio Zdobył L1 Zdane
1.2.22 Upewnij się, że --request-timeout argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
1.2.23 Upewnij się, że --service-account-lookup argument ma wartość true Zdobył L1 Zdane
1.2.24 Upewnij się, że --service-account-key-file argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
1.2.25 Upewnij się, że --etcd-certfile argumenty i --etcd-keyfile są ustawione odpowiednio Zdobył L1 Zdane
1.2.26 Upewnij się, że --tls-cert-file argumenty i --tls-private-key-file są ustawione odpowiednio Zdobył L1 Zdane
1.2.27 Upewnij się, że --client-ca-file argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
1.2.28 Upewnij się, że --etcd-cafile argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zależy od środowiska
1.2.29 Upewnij się, że --encryption-provider-config argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zależy od środowiska
1.2.30 Upewnij się, że dostawcy szyfrowania są odpowiednio skonfigurowani Zdobył L1 Zależy od środowiska
1.2.31 Upewnij się, że serwer api używa tylko silnych szyfrów kryptograficznych Nie oceniliśmy L1 Zdane
1.3 Menedżer kontrolera
1.3.1 Upewnij się, że --terminated-pod-gc-threshold argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
1.3.2 Upewnij się, że --profiling argument ma wartość false Zdobył L1 Zdane
1.3.3 Upewnij się, że --use-service-account-credentials argument ma wartość true Zdobył L1 Zdane
1.3.4 Upewnij się, że --service-account-private-key-file argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
1.3.5 Upewnij się, że --root-ca-file argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
1.3.6 Upewnij się, że argument RotateKubeletServerCertificate ma wartość true Zdobył L2 Niepowodzenie
1.3.7 Upewnij się, że --bind-address argument jest ustawiony na 127.0.0.1 Zdobył L1 Równoważna kontrolka
1.4 Planista
1.4.1 Upewnij się, że --profiling argument ma wartość false Zdobył L1 Zdane
1.4.2 Upewnij się, że --bind-address argument jest ustawiony na 127.0.0.1 Zdobył L1 Równoważna kontrolka
2 etcd
2.1 Upewnij się, że --cert-file argumenty i --key-file są ustawione odpowiednio Zdobył L1 Zdane
2,2 Upewnij się, że --client-cert-auth argument ma wartość true Zdobył L1 Zdane
2.3 Upewnij się, że --auto-tls argument nie jest ustawiony na true Zdobył L1 Zdane
2,4 Upewnij się, że --peer-cert-file argumenty i --peer-key-file są ustawione odpowiednio Zdobył L1 Zdane
2,5 Upewnij się, że --peer-client-cert-auth argument ma wartość true Zdobył L1 Zdane
2.6 Upewnij się, że --peer-auto-tls argument nie jest ustawiony na true Zdobył L1 Zdane
2.7 Upewnij się, że używany jest unikatowy urząd certyfikacji itp. Nie oceniliśmy L2 Zdane
3 Konfiguracja płaszczyzny sterowania
3.1 Uwierzytelnianie i autoryzacja
3.1.1 Uwierzytelnianie certyfikatu klienta nie powinno być używane dla użytkowników Nie oceniliśmy L2 Zdane
3.1.2 Uwierzytelnianie tokenu konta usługi nie powinno być używane dla użytkowników Nie oceniliśmy L2 Zdane
3.1.3 Uwierzytelnianie tokenu bootstrap nie powinno być używane dla użytkowników Nie oceniliśmy L2 Zdane
3.2 Rejestrowanie
3.2.1 Upewnij się, że utworzono minimalne zasady inspekcji Zdobył L1 Zdane
3.2.2 Upewnij się, że zasady inspekcji obejmują kluczowe zagadnienia dotyczące zabezpieczeń Nie oceniliśmy L2 Zdane
100 Węzły procesu roboczego
4.1 Pliki konfiguracji węzła procesu roboczego
4.1.1 Upewnij się, że uprawnienia pliku usługi kubelet są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Zdane
4.1.2 Upewnij się, że własność pliku usługi kubelet jest ustawiona na root:root Zdobył L1 Zdane
4.1.3 Jeśli plik kubeconfig serwera proxy istnieje, upewnij się, że uprawnienia są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Nie dotyczy
4.1.4 Jeśli plik kubeconfig serwera proxy istnieje, upewnij się, że właściwość jest ustawiona na root:root Zdobył L1 Nie dotyczy
4.1.5 Upewnij się, że --kubeconfig uprawnienia pliku kubelet.conf są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Zdane
4.1.6 Upewnij się, że --kubeconfig własność pliku kubelet.conf jest ustawiona na root:root Zdobył L1 Zdane
4.1.7 Upewnij się, że uprawnienia do plików urzędów certyfikacji są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Zdane
4.1.8 Upewnij się, że własność pliku urzędu certyfikacji klienta jest ustawiona na root:root Zdobył L1 Zdane
4.1.9 Jeśli jest używany plik konfiguracji kubelet config.yaml, upewnij się, że uprawnienia są ustawione na 600 lub bardziej restrykcyjne Zdobył L1 Zdane
4.1.10 Jeśli używany jest plik konfiguracji kubelet config.yaml, upewnij się, że właściwość własności pliku jest ustawiona na root:root Zdobył L1 Zdane
4.2 Kubelet
4.2.1 Upewnij się, że --anonymous-auth argument ma wartość false Zdobył L1 Zdane
4.2.2 Upewnij się, że --authorization-mode argument nie jest ustawiony na Wartość AlwaysAllow Zdobył L1 Zdane
4.2.3 Upewnij się, że --client-ca-file argument jest ustawiony zgodnie z potrzebami Zdobył L1 Zdane
4.2.4 Upewnij się, że --read-only-port argument ma wartość 0 Zdobył L1 Zdane
4.2.5 Upewnij się, że --streaming-connection-idle-timeout argument nie jest ustawiony na 0 Zdobył L1 Zdane
4.2.6 Upewnij się, że --protect-kernel-defaults argument ma wartość true Zdobył L1 Zdane
4.2.7 Upewnij się, że --make-iptables-util-chains argument ma wartość true Zdobył L1 Zdane
4.2.8 Upewnij się, że --hostname-override argument nie został ustawiony Nie oceniliśmy L1 Zdane
4.2.9 Upewnij się, że argument eventRecordQPS jest ustawiony na poziom, który zapewnia odpowiednie przechwytywanie zdarzeń Nie oceniliśmy L2 Zdane
4.2.10 Upewnij się, że --tls-cert-fileargumenty i --tls-private-key-file są ustawione odpowiednio Zdobył L1 Zdane
4.2.11 Upewnij się, że --rotate-certificates argument nie jest ustawiony na wartość false Zdobył L1 Zdane
4.2.12 Upewnij się, że argument RotateKubeletServerCertificate ma wartość true Zdobył L1 Zdane
4.2.13 Upewnij się, że rozwiązanie Kubelet korzysta tylko z silnych szyfrów kryptograficznych Nie oceniliśmy L1 Zdane
5 Zasady
5,1 Kontrola dostępu oparta na rolach i konta usługi
5.1.1 Upewnij się, że rola administratora klastra jest używana tylko wtedy, gdy jest to wymagane Nie oceniliśmy L1 Zależy od środowiska
5.1.2 Minimalizowanie dostępu do wpisów tajnych Nie oceniliśmy L1 Zależy od środowiska
5.1.3 Minimalizowanie użycia symboli wieloznacznych w rolach i rolach klastra Nie oceniliśmy L1 Zależy od środowiska
5.1.4 Minimalizowanie dostępu do tworzenia zasobników Nie oceniliśmy L1 Zależy od środowiska
5.1.5 Upewnij się, że domyślne konta usług nie są aktywnie używane Zdobył L1 Zależy od środowiska
5.1.6 Upewnij się, że tokeny konta usługi są instalowane tylko w razie potrzeby Nie oceniliśmy L1 Zależy od środowiska
5.1.7 Unikaj używania grupy system:masters Nie oceniliśmy L1 Zależy od środowiska
5.1.8 Ograniczanie użycia uprawnień wiązania, personifikacji i eskalacji w klastrze Kubernetes Nie oceniliśmy L1 Zależy od środowiska
5.1.9 Minimalizowanie dostępu do tworzenia woluminów trwałych Nie oceniliśmy L1 Zależy od środowiska
5.1.10 Minimalizuj dostęp do podrzędnego zasobu serwera proxy węzłów Nie oceniliśmy L1 Zależy od środowiska
5.1.11 Zminimalizuj dostęp do zasobu podrzędnego zatwierdzania obiektów certificatesigningrequests Nie oceniliśmy L1 Zależy od środowiska
5.1.12 Minimalizowanie dostępu do obiektów konfiguracji elementu webhook Nie oceniliśmy L1 Zależy od środowiska
5.1.13 Minimalizowanie dostępu do tworzenia tokenu konta usługi Nie oceniliśmy L1 Zależy od środowiska
5.2 Zasady zabezpieczeń zasobnika
5.2.1 Upewnij się, że klaster ma co najmniej jeden aktywny mechanizm kontroli zasad Nie oceniliśmy L1 Zależy od środowiska
5.2.2 Minimalizuj przyznanie uprzywilejowanych kontenerów Nie oceniliśmy L1 Zależy od środowiska
5.2.3 Zminimalizuj przyznanie kontenerów, które chcą udostępnić przestrzeń nazw identyfikatora procesu hosta Zdobył L1 Zależy od środowiska
5.2.4 Zminimalizowanie wpływu kontenerów, które chcą udostępnić przestrzeń nazw IPC hosta Zdobył L1 Zależy od środowiska
5.2.5 Zminimalizowanie wpływu kontenerów, które chcą współużytkować przestrzeń nazw sieci hosta Zdobył L1 Zależy od środowiska
5.2.6 Minimalizowanie wpływu kontenerów na element allowPrivilegeEscalation Zdobył L1 Zależy od środowiska
5.2.6 Minimalizowanie wpływu kontenerów głównych Nie oceniliśmy L2 Zależy od środowiska
5.2.7 Minimalizowanie wpływu kontenerów na NET_RAW możliwości Nie oceniliśmy L1 Zależy od środowiska
5.2.8 Minimalizowanie wpływu kontenerów z dodanymi możliwościami Nie oceniliśmy L1 Zależy od środowiska
5.2.9 Zminimalizowanie wpływu kontenerów z przypisanymi możliwościami Nie oceniliśmy L1 Zależy od środowiska
5.2.10 Zminimalizowanie wpływu kontenerów z przypisanymi możliwościami Nie oceniliśmy L2
5.2.11 Minimalizowanie wpływu kontenerów HostProcess systemu Windows Nie oceniliśmy L1 Zależy od środowiska
5.2.12 Minimalizuj przyznanie woluminów HostPath Nie oceniliśmy L1 Zależy od środowiska
5.2.13 Minimalizowanie wpływu kontenerów korzystających z hostPorts Nie oceniliśmy L1 Zależy od środowiska
5.3 Zasady sieci i sieć CNI
5.3.1 Upewnij się, że używana sieć CNI obsługuje zasady sieciowe Nie oceniliśmy L1 Zdane
5.3.2 Upewnij się, że wszystkie przestrzenie nazw mają zdefiniowane zasady sieciowe Zdobył L2 Zależy od środowiska
5,4 Zarządzanie wpisami tajnymi
5.4.1 Preferuj używanie wpisów tajnych jako plików wpisów tajnych jako zmiennych środowiskowych Nie oceniliśmy L1 Zależy od środowiska
5.4.2 Rozważ zewnętrzny magazyn wpisów tajnych Nie oceniliśmy L2 Zależy od środowiska
5,5 Rozszerzalna kontrola przyjęcia
5.5.1 Konfigurowanie narzędzia Image Provenance przy użyciu kontrolera przyjęcia elementu ImagePolicyWebhook Nie oceniliśmy L2 Niepowodzenie
5.7 Zasady ogólne
5.7.1 Tworzenie granic administracyjnych między zasobami przy użyciu przestrzeni nazw Nie oceniliśmy L1 Zależy od środowiska
5.7.2 Upewnij się, że profil seccomp jest ustawiony na platformę Docker/default w definicjach zasobników Nie oceniliśmy L2 Zależy od środowiska
5.7.3 Stosowanie kontekstu zabezpieczeń do zasobników i kontenerów Nie oceniliśmy L2 Zależy od środowiska
5.7.4 Nie należy używać domyślnej przestrzeni nazw Zdobył L2 Zależy od środowiska

Uwaga

Oprócz testu porównawczego CIS platformy Kubernetes dostępny jest również test porównawczy usługi AKS CIS.

Dodatkowe uwagi

  • System operacyjny ze wzmocnionymi zabezpieczeniami jest kompilowany i obsługiwany specjalnie dla usługi AKS i nie jest obsługiwany poza platformą AKS.
  • Aby jeszcze bardziej zmniejszyć obszar powierzchni podatnej na ataki, niektóre niepotrzebne sterowniki modułów jądra zostały wyłączone w systemie operacyjnym.

Następne kroki

Aby uzyskać więcej informacji na temat zabezpieczeń usługi AKS, zobacz następujące artykuły: