Kubernetes gwałtownie staje się wiodącą technologią orkiestracji i zarządzania kontenerami. Jak w przypadku wszystkich nowinek, przyciąga on wiele uwagi — również ze strony atakujących. Potwierdza to jedna z ankiet opublikowana w State of Kubernetes Security Repor t, z której dowiadujemy się, iż 94% przepytanych firm przyznało się do wystąpienia incydentu bezpieczeństwa w ich środowisku K8s w ciągu ostatnich 12 miesięcy.
Czym jest Kubernetes?
Kubernetes to platforma open source do zarządzania grupami kontenerów, w których działają aplikacje i usługi. Często określa się ją mianem „systemu operacyjnego dla chmury”. Kubernetes został zaprojektowany przez Joego Bedę, Brendana Burnsa i Craiga McLuckiego — inżynierów z Google — w 2014 roku. Po niedługim czasie udostępniono go na zasadach open source i stał się prężnie działającym ekosystemem chmurowym. Dziś system zarządzany jest przez fundację Cloud Native Computing Foundation (CNCF), będącą częścią Linux Foundation. Niedawno w powszechnym użyciu pojawił się skrót „K8s”, oparty na pominięciu środkowych 8 liter z przydługiego dla IT słowa „Kubernetes”.
Kontenery działają w sposób zbliżony do maszyn wirtualnych, ale mają mniejszy stopnień wzajemnej izolacji, współdzieląc ten sam system operacyjny. Kontenery określane są mianem „lekkich”. Podobnie jak maszyna wirtualna, kontener posiada własny system plików, udział w zasobach procesora, pamięć, przestrzeń procesów itd. Ponieważ kontenery nie są związane z leżącymi poniżej warstwami infrastruktury, mogą być łatwiej przenoszone pomiędzy chmurami i różnymi dystrybucjami systemu operacyjnego. Wiele tłumaczy poniższy schemat:
Co można zrobić, aby zabezpieczyć środowisko Kubernetes?
Przede wszystkich warto zacząć od małych, najprostszych kroków, które zgodnie z zasadą Pareto mogą pomóc wyeliminować większość zagrożeń.
1. Zacznij od weryfikacji procesu IaC przy fazie check-in
Wiadomo, iż Infrastructure as Code (IaC) pomaga przyspieszyć i uprościć wdrożenia w chmurze. Wiadomo też, iż jeżeli pojawiają się tutaj jakieś problemy, to skutki idą lawinowo. Monitorując IaC przy samej odprawie, można identyfikować i usuwać problemy u źródła, zanim zostaną szeroko rozpowszechnione. Rada jest więc oczywista. Trzeba skanować kod przed wrzuceniem go na repozytoria wykorzystywane potem do stawiania kontenerów. W kodzie należy szukać błędnych konfiguracji lub podatności i gwałtownie dostarczać szczegóły naruszeń do obsługi repozytorium kodu.
2. Sprawdź konfigurację kontenera w czasie kompilacji
„Budowa” kontenera zwykle trwa niedługo i nie ma tutaj czasu i zasobów na dodatkowe kontrole. Chcesz manualnie sprawdzać setki, a choćby tysiące kontenerów w kilku środowiskach chmurowych? jeżeli tak, nadszedł czas na automatyzację tego procesu. Przeprowadzanie automatycznych kontroli bezpieczeństwa w ramach CI/CD ma najważniejsze znaczenie dla utrzymania nieskazitelnego środowiska produkcyjnego. Zanim wprowadzisz kontenery do rejestrów, przeprowadź zintegrowane skanowanie, aby chronić systemy operacyjne, pakiety i biblioteki przed błędami konfiguracji lub lukami w zabezpieczeniach. Zaleca się wykorzystanie do tego procesu narzędzia K8s Admission Controller jako ostatecznego sprawdzenia wszystkiego przed procesem budowy.
3. Wykorzystaj kontrolę dostępu opartego na rolach (RBAC)
Kubernetes oferuje wbudowaną strukturę RBAC, pozwalającą kontrolować dostęp i uprawnienia do interfejsu API. Dzięki temu możliwe jest ograniczanie użytkowników i grup tylko do czynności i zadań, których potrzebują, zgodnie z zasadą najmniejszych wymaganych uprawnień. Warto pamiętać, aby zastosować ją nie tylko do użytkowników fizycznych, ale też kont serwisowych, aplikacji i usług, które komunikują się przez API. W miarę możliwości najlepiej unikać domyślnych kont i uprawnień w całym klastrze Kubernetes. Dodatkowo do uwierzytelnienia i nowej integracji API można wykorzystać MFA w celu zwiększenia bezpieczeństwa uprawnień krytycznych.
4. Monitoruj wszystko
Przemijający charakter kontenerów sprawia, iż niezwykle trudno zorientować się, co dzieje się w chmurze. Trzeba zadbać o dobry mechanizm telemetrii, by przechwycić wszystkie zdarzenia we wszystkich warstwach: zarządzenia Kubernetes, kontenerów, workload itp. Widoczność ma najważniejsze znaczenie, ponieważ Kubernetes nie oferuje żadnych gotowych narzędzi mapujących połączenia sieciowe lub wykrywających samoistnie sieciowe skany. Warto poszukać rozwiązania, które zapewni głęboką widoczność i kontekst oraz pokaże połączenia pochodzące z węzłów. Zrozumienie, jak wygląda normalny ruch sieciowy, może umożliwić rozwiązaniu do monitorowania środowiska wykonawczego wykrywanie nietypowego ruchu i zdarzeń – takich jak problemy operacyjne, które prowadzą do wzrostu liczby błędów w ruchu wschód-zachód lub zbyt wielu wywołań zewnętrznego interfejsu API blokowanych przez dostawcę. Musisz także monitorować przychodzące punkty końcowe. Jednym z głównych problemów zespołów DevOps jest przypadkowe ujawnienie usługi wewnętrznej w Internecie. Łatwo dodać zewnętrzny system load balancing w Kubernetes i przypadkowo udostępnić usługę, która nie posiada odpowiedniego uwierzytelnienia i autoryzacji wymaganej dla punktów końcowych.
5. Zautomatyzuj wykrywanie zagrożeń
Spójrzmy prawdzie w oczy: jeżeli chodzi o znajdowanie nieznanych lub zaawansowanych zagrożeń w środowisku Kubernetes, najlepszą opcją jest użycie zautomatyzowanego systemu bazującego na uczeniu maszynowym. Wykrywanie anomalii może identyfikować odchylenia od linii bazowej, odkrywając wszelkie nieprawidłowe działania. Taki system w środowisku Kubernetes sprawdzi się najlepiej, gdyż wszelkie ataki będą czymś nowym i nieopisanym wcześniej w żadnych regułach czy sygnaturach. Oprócz tego odciąży to zespół ds. bezpieczeństwa, który będzie mógł zająć się innymi środowiskami, wymagającymi zwykle więcej uwagi.
Weryfikacja tych kilku kroków pozwoli zadbać o bezpieczeństwo Kubernetesa w organizacji. Środowiska chmurowe są już codziennością i mnożą się z każdym dniem. Systemy oraz aplikacje kontenerowe to idealne rozwiązanie dla chmury i z pewnością możemy spodziewać się coraz większego zainteresowania tym tematem przez cyberprzestępców.