Zabezpieczanie kontenerów polega na implementacji narzędzi i zasad bezpieczeństwa dających pewność, że wszystko w kontenerze działa prawidłowo. Dotyczy to także ochrony infrastruktury, łańcucha dostaw oprogramowania, środowiska wykonawczego i wszystkiego pomiędzy.
Bezpieczeństwo kontenerów ma wiele zalet:
Zmienia wdrażanie aplikacji poprzez zwiększenie szybkości, wydajności zasobów i skalowalności. Może również enkapsulować aplikacje i ich zależności, przyspieszając wdrażanie i poprawiając wydajność wykorzystania zasobów systemowych.
Można je łatwo skalować w górę lub w dół, dzięki czemu idealnie nadają się do dynamicznych obciążeń. Jedną z najważniejszych zalet kontenerów jest ich przenośność w różnych środowiskach i platformach. Dzięki temu aplikacje mogą działać spójnie niezależnie od tego, gdzie są wdrażane, lokalnie, w chmurze lub w środowiskach hybrydowych.
Utrzymując spójne środowisko, bezpieczeństwo kontenerów eliminuje problem „działa na mojej maszynie”, prowadząc do najbardziej wydajnych przejść i bardziej niezawodnych wdrożeń.
Zapewnianie bezpieczeństwa kontenerów to proces ciągły. Powinien zostać zintegrowany z procesem tworzenia, zautomatyzowany, aby wyeliminować konieczność ręcznej ingerencji, oraz rozszerzony na konserwację i obsługę podstawowej infrastruktury. To oznacza konieczność ochrony procesu budowy obrazów kontenerów i hosta stanowiącego środowisko wykonawcze, platformy oraz warstw aplikacji. Implementacja zabezpieczeń w ramach cyklu ciągłego dostarczania pozwala ograniczyć ryzyko i zmniejszyć liczbę luk bezpieczeństwa na nieustannie rosnącej powierzchni ataku.
Przy zabezpieczaniu kontenerów najważniejsze są:
Celem cyberzabezpieczeń jest zapewnienie, aby to, co jest dostarczane w sposób ciągły, działało dokładnie tak, jak powinno.
Zabezpieczanie hosta zaczyna się od wyboru systemu operacyjnego. W miarę możliwości zawsze należy wybierać dystrybucje zoptymalizowane pod kątem obsługi kontenerów. Jeśli wybierzesz standardową dystrybucję systemu Linux® lub wersję Microsoft® Windows®, wyłącz lub usuń wszystkie niepotrzebne usługi i wzmocnij ogólny poziom bezpieczeństwa. Następnie dodaj kolejną warstwę zabezpieczeń i narzędzia monitoringu pozwalające kontrolować, czy host zachowuje się zgodnie z oczekiwaniami. Bardzo przydatne są narzędzia do kontroli aplikacji i systemy zapobiegania włamaniom (IPS).
Kiedy kontener zostanie wdrożony do środowiska produkcyjnego, będzie musiał komunikować się z innymi kontenerami i zasobami. Ten wewnętrzny ruch kontenerów musi być monitorowany i zabezpieczony, w związku z czym powinien w całości przechodzić przez system IPS. Nie pozostaje to bez znaczenia dla sposobu, w jaki należy wdrożyć środki bezpieczeństwa Zamiast implementować małą liczbę bardzo dużych tradycyjnych silników IPS na obwodzie, lepiej jest zaimplementować mniejsze rozwiązanie tego typu na każdym hoście. To umożliwia efektywniejsze monitorowanie całego ruchu bez uszczerbku dla wydajności.
Kontener działający w środowisku produkcyjnym nieustannie przetwarza dane aplikacji, generuje dzienniki, buforuje pliki itd. Środki bezpieczeństwa dają pewność, że żadne z tych działań nie jest przejawem złośliwej aktywności. Ochrona przed złośliwym oprogramowaniem zawartości kontenera w czasie rzeczywistym ma kluczowe znaczenie dla bezpieczeństwa.
Ważną rolę w tym wszystkim odgrywa także system IPS z tzw. funkcją wirtualnego wdrażania poprawek. Narzędzie to potrafi wykrywać próby wykorzystania exploitów i w przypadku zdalnego ujawnienia takiej luki może zastosować pakiety chroniące Twoją aplikację. W ten sposób zyskujesz czas na usunięcie przyczyny problemu w następnej wersji kontenera zamiast wdrażać poprawkę w trybie awaryjnym.
Poznaj niektóre nazwy związane z technologiami kontenerowymi: Docker®, Kubernetes®, Amazon Web Services™ (AWS) oraz Microsoft®.
Zanim zaczniesz zabezpieczać swoje kontenery, musisz poznać najważniejszych graczy w tej branży. Docker, lider w dziedzinie konteneryzacji, to platforma umożliwiająca budowę, zabezpieczanie aplikacji i zarządzanie nimi. Przy jej użyciu można wdrażać wszystkie rodzaje aplikacji, od tradycyjnych po najnowsze mikrousługi. Jak każda inna platforma tego typu, wymaga odpowiedniej ochrony. Więcej na temat Bezpieczeństwa kontenerów w środowisku Docker.
Kubernetes to kolejna ważna nazwa, którą należy znać. Kryje się za nią przenośna, rozszerzalna platforma typu open source umożliwiająca hostowanie zadań i usług w formie kontenerów. Choć Kubernetes zapewnia własne mechanizmy zabezpieczeń, rosnąca liczba ataków na klastry tej platformy wskazuje, że warto pokusić się o specjalne rozwiązania bezpieczeństwa dla niej. Przeczytaj więcej na temat zabezpieczania środowiska Kubernetes.
Następną ważną technologią jest Amazon Web Services (AWS). Twórcy tego rozwiązania rozumieją zapotrzebowanie na kontenery umożliwiające programistom szybsze dostarczanie aplikacji w bardziej skoordynowany sposób. Dlatego oferują wydajną usługę orkiestracji kontenerów wspierającą kontenery Docker o nazwie Amazon Elastic Container Service (Amazon ECS). Eliminuje ona konieczność samodzielnego zarządzania maszynami wirtualnymi i środowiskiem kontenerowym oraz umożliwia łatwe uruchamianie i skalowanie kontenerowych aplikacji AWS. Jednak podobnie jak w przypadku pozostałych kluczowych graczy opisanych powyżej, aby w pełni wykorzystać jej możliwości, należy zaimplementować odpowiednie zabezpieczenia. Przeczytaj więcej na temat Bezpieczeństwa kontenerów w środowisku AWS.
Ostatnia, ale nie mniej istotna od poprzednich, jest usługa Microsoft® Azure™ Container Instances (ACI). To rozwiązanie umożliwiające programistom wdrażanie kontenerów w chmurze publicznej Microsoft® Azure™ bez konieczności uruchamiania ani obsługi potrzebnej do tego infrastruktury. Użytkownik po prostu tworzy nowy kontener w portalu Microsoft® Azure™, a Microsoft automatycznie dostarcza i skaluje odpowiednie zasoby komputerowe. Usługa Azure Container Instances jest szybka i elastyczna, ale wymaga odpowiednich zabezpieczeń, aby można było w pełni wykorzystać jej możliwości.
Znasz już technologie najważniejszych graczy w branży, czas więc dowiedzieć się, jak zapewnić im ogólne bezpieczeństwo. Ewentualnie możesz też skorzystać z powyższych odnośników, aby przejść do szczegółów na temat wybranego rozwiązania. Przeczytaj więcej na temat Zabezpieczania usługi Microsoft Azure Container Instances.
Zabezpieczanie hosta zaczyna się od wyboru systemu operacyjnego. W miarę możliwości zawsze należy wybierać dystrybucje zoptymalizowane pod kątem obsługi kontenerów. Jeśli wybierzesz standardową dystrybucję systemu Linux® lub wersję Microsoft® Windows®, wyłącz lub usuń wszystkie niepotrzebne usługi i wzmocnij ogólny poziom bezpieczeństwa. Następnie dodaj kolejną warstwę zabezpieczeń i narzędzia monitoringu pozwalające kontrolować, czy host zachowuje się zgodnie z oczekiwaniami. Bardzo przydatne są narzędzia do kontroli aplikacji i systemy zapobiegania włamaniom (IPS).
Kiedy kontener zostanie wdrożony do środowiska produkcyjnego, będzie musiał komunikować się z innymi kontenerami i zasobami. Ten wewnętrzny ruch kontenerów musi być monitorowany i zabezpieczony, w związku z czym powinien w całości przechodzić przez system IPS. Nie pozostaje to bez znaczenia dla sposobu, w jaki należy wdrożyć środki bezpieczeństwa Zamiast implementować małą liczbę bardzo dużych tradycyjnych silników IPS na obwodzie, lepiej jest zaimplementować mniejsze rozwiązanie tego typu na każdym hoście. To umożliwia efektywniejsze monitorowanie całego ruchu bez uszczerbku dla wydajności.
Kontener działający w środowisku produkcyjnym nieustannie przetwarza dane aplikacji, generuje dzienniki, buforuje pliki itd. Środki bezpieczeństwa dają pewność, że żadne z tych działań nie jest przejawem złośliwej aktywności. Ochrona przed złośliwym oprogramowaniem zawartości kontenera w czasie rzeczywistym ma kluczowe znaczenie dla bezpieczeństwa.
Ważną rolę w tym wszystkim odgrywa także system IPS z tzw. funkcją wirtualnego wdrażania poprawek. Narzędzie to potrafi wykrywać próby wykorzystania exploitów i w przypadku zdalnego ujawnienia takiej luki może zastosować pakiety chroniące Twoją aplikację. W ten sposób zyskujesz czas na usunięcie przyczyny problemu w następnej wersji kontenera zamiast wdrażać poprawkę w trybie awaryjnym.
Przy wdrażaniu aplikacji na kontenerze dobrym pomysłem może być wykorzystanie funkcji samoochrony aplikacji w środowisku wykonawczym (runtime application self-protection – RASP). Funkcja taka działa w kodzie aplikacji i często przechwytuje kluczowe wywołania lub się pod nie podłącza. Funkcja RASP nie tylko zapewnia szereg usprawnień bezpieczeństwa, takich jak monitoring SQL, sprawdzanie zależności i rozwiązywanie związanych z nimi problemów, weryfikacja adresów URL i wiele innych, ale dodatkowo ułatwia identyfikację przyczyn problemu, która zawsze stanowi jedno z największych wyzwań.
Dzięki obecności w kodzie aplikacji funkcja ta może powiązać incydent bezpieczeństwa z wierszem kodu, który za niego odpowiada. Trudno przecenić wartość takiego narzędzia w zakresie jego wpływu na poprawę stanu bezpieczeństwa całego systemu.
Z punktu widzenia bezpieczeństwa często pomijanym elementem jest mechanizm zarządzania i koordynacji kontenerów. Każda organizacja poważnie podchodząca do wdrażania kontenerów nieuchronnie będzie miała do czynienia z dwiema kluczowymi technologiami wspomagającymi zarządzanie: prywatnym rejestrem kontenerów, takim jak Amazon ECS i platformą Kubernetes do orkiestracji wdrożeń kontenerów.
Połączenie rejestru kontenerów i platformy Kubernetes umożliwia automatyczne egzekwowanie przestrzegania zbioru zasad dotyczących jakości i bezpieczeństwa w odniesieniu do kontenerów przed ich ponownym wdrożeniem w środowisku oraz w trakcie tego procesu.
Rejestry ułatwiają współdzielenie kontenerów i wykorzystywanie istniejących jednostek do budowy nowych. Aby jednak mieć pewność, że każdy kontener spełnia podstawowe wymogi bezpieczeństwa i nie tylko, należy korzystać z automatycznego skanera. Skanowanie każdego kontenera pod kątem znanych luk bezpieczeństwa, złośliwego oprogramowania i zawartości tajnych danych przed jego udostępnieniem w rejestrze pozwala ograniczyć skalę problemów na dalszych etapach.
Ponadto należy także upewnić się, że rejestr również jest dobrze chroniony. Powinien być hostowany w systemie o podniesionym poziomie bezpieczeństwa lub w usłudze chmurowej o bardzo dobrej reputacji. Nawet w przypadku modelu usługowego należy pamiętać o podziale odpowiedzialności i zaimplementować solidny system dostępu do rejestru oparty na rolach.
Jeśli chodzi o orkiestrację, wdrożona i działająca w środowisku platforma Kubernetes zapewnia szereg istotnych udogodnień pozwalających Twoim zespołom optymalnie wykorzystać możliwości tego środowiska. Ponadto Kubernetes umożliwia implementację różnych środków bezpieczeństwa i operacyjnych, takich jak kapsuły (zasoby poziomu klastra) i zasady bezpieczeństwa sieci, dzięki czemu możesz elastycznie dostosowywać różne opcje do swojego poziomu tolerancji ryzyka.
Aby mieć pewność, że wykorzystywane przez Ciebie kontenery są godne zaufania i bezpieczne od typowych zagrożeń, musisz wdrożyć proces skanowania ich obrazów. Służące do tego narzędzia skanują zawartość kontenera w poszukiwaniu problemów zanim zostanie on wykorzystany do budowy aplikacji. Ponadto wykonują szereg testów ostatecznych przed wdrożeniem kontenera w środowisku produkcyjnym.
Prawidłowo zaimplementowany skaner staje się naturalnym elementem procesu tworzenia kodu. Jest to w pełni automatyczne narzędzie, które szybko i sprawnie identyfikuje wszelkie problemy powstałe w trakcie tworzenia aplikacji i jej kontenerów.
Hackerzy zaczynają przeprowadzać ataki na coraz wcześniejszych etapach procesu ciągłej integracji/ciągłego dostarczania (CI/CD). Jeśli cyberprzestępcy uda się złamać zabezpieczenia serwera budowania, repozytorium kodu lub stacji roboczych programistów, to może przetrwać w Twoim środowisku znacznie dłużej. Dlatego musisz utrzymywać solidny zbiór aktualnych środków bezpieczeństwa.
Zaimplementuj mocną strategię kontroli dostępu obejmującą cały proces, zaczynając od repozytorium kodu i strategię rozgałęziania, po repozytorium kontenerów. Ściśle przestrzegaj zasady najmniejszych możliwych uprawnień – udzielania jak najmniejszych praw dostępu umożliwiających realizację wymaganych zadań – i regularnie ją weryfikuj.
Zabezpieczanie kontenerów wymaga kompleksowego podejścia. Musisz upewnić się, że odpowiadasz na potrzeby wszystkich zespołów w Twojej organizacji. Zastosuj podejście, które można zautomatyzować w sposób pasujący do Twoich bieżących procesów DevOps przy zachowaniu pewności, że nie ucierpi na tym bezpieczeństwo, terminy zostaną dotrzymane, a aplikacje – szybko dostarczone. Bezpieczeństwa nie można już pomijać, przypominając sobie o nim w ostatniej chwili i żądając zmian w procesach roboczych. Budowa godnych zaufania zabezpieczeń i automatycznych procesów od samego początku pozwala rozwiązywać problemy dotyczące bezpieczeństwa i ułatwia współpracę.
Powiązane badania
Powiązane artykuły