Czemu powinniśmy separować środowiska?

20 Stycznia 2023

Czy tego chcemy czy nie, promocja i marketing własnej marki wymusza często na firmach posiadanie e-wizytówki, która często przybiera formę strony WWW, lub nawet aplikacji na urządzenia mobilne. Każda taka strona potrzebuje wprowadzania zmian. Zmian, którymi niekiedy będzie migracja na maszynę wirtualną, a innym razem aktualizacja wersji oprogramowania. Firmy stanowią jednak jedynie ułamek użytkowników nowych technologii. Większą część stanowią zwykli użytkownicy, którzy nie separują środowisk na których pracują. Czy miałoby to z resztą sens z perspektywy konsumenta? I dlaczego firmy powinny to jednak robić?

 

Czemu więc nie pomijać separacji środowisk?

Skoro mamy tak wiele namacalnych przykładów, gdzie nie mamy odseparowanych instancji i wykonujemy zmiany na jednym środowisku, które jest produkcją i nic wielkiego się nie dzieje, to czemu mamy te środowiska separować?

Przykładu z życia nie trzeba szukać daleko. Prawie każdy z nas posiada jakiś elektroniczny gadżet i wykonuje na nim dziesiątki zmian. Niektórzy z nas dokonują nawet kilku zmian w ciągu jednego dnia, a niektórzy tylko wtedy, gdy jest im to tak naprawdę potrzebne. Nie znam osoby, która wyciąga z szuflady swój zapasowy smartfon, synchronizuje z nim całą konfigurację i robi na nim aktualizację systemu lub ulubionej aplikacji, a następnie wykonuję tę samą operację na smartfonie, który nosi codziennie. Dlaczego o tym się nie mówi i nikt nie pisze „Kup dwa smartfony w cenie jednego, byś mógł testować nowe aktualizacje, zanim wgrasz je na swój sprzęt podstawowy?” Coś stoi za tym, że nikt z nas nie musi sam tego robić.

Z raportów o ilości użytkowników smartfonów wynika, że na całym świecie w 2022 roku było ich łącznie 7,26 miliarda [1]. 15 listopada 2022 roku na świecie było nas już 8 miliardów [2]. Wychodzi więc na to, że 91% ludności świata, korzysta ze smartfonów. Przy tak ogromnej ilości użytkowników, pojawienie się błędu w aplikacji czy urządzeniu, jest pewne, choć traktowane jako statystyka. Nie zmienia to faktu, że dla twórców aplikacji i sprzętu, to nie jest tylko statystka i wszystkie zgłoszone problemy są przez nich analizowane i rozwiązywane. Jednak tylko osoby czytające listę zmian (change log), są świadome co zostało rzeczywiście naprawione. Ponadto statystyka kończy się gdy nasze urządzenie płonie, eksploduje, lub stwarza dla nas zagrożenie… oraz gdy np. jeden z banków robi testy wiadomości push, a użytkownicy widzą na swoich ekranach „ęśąćż”. Takie sytuacje są natomiast nagłaśniane i nawet osoby nie dotknięte tym problemem dowiadują się o nim. Wiemy więc już, że nawet gdy my indywidualnie nie posiadamy dwóch różnych urządzeń – jednego do pracy na co dzień i drugiego do testów aktualizacji – to jednak ktoś testuje te rozwiązania za nas, niezależnie czy jest to nowa wersja systemu operacyjnego czy aplikacji mobilnej.

 

Co może spowodować brak separacji środowisk?

Tak naprawdę jak patrzymy na urządzenie z którego korzystamy na co dzień, to najgorsze co może nas spotkać, to utrata wszystkich danych. Niezależnie czy mówimy tu o sprzęcie od pewnej firmy o „owocowo brzmiącej nazwie”, czy producenta Androidów.

Utratę danych z naszego urządzenia odczujemy bardzo szybko. Proponuję zrobić szybki test. Odpowiedz sobie na pytanie czy znasz na pamięć numer do chociaż jednej, najbliższej Ci osoby? Na szczęście na tym się świat nie kończy, bo producenci naszych smartfonów (o ile z tego skorzystamy), oferują bezpłatną kopię naszych najważniejszych danych na swoich serwerach. Wystarczy zalogować się na nowym urządzeniu i wykonać import chociażby kontaktów.

Co jednak gdy problem nie powstał na urządzeniu znajdującym się w naszej kieszeni, a na stronie WWW naszej ulubionej marki podczas robienia zakupów?

Scenariusz jest prosty. Dostawca serwisu WWW postanawia zrobić jego aktualizację. Wykonuje wyczekiwane przez nas wdrożenie kolejnej wersji strony wraz z dodatkowymi funkcjonalnościami. Nie wykonał on jednak testów wdrażanej wersji oprogramowania. Pośród normalnych użytkowników znalazł się atakujący, który wykorzystał podatność w celu wstrzyknięcia złośliwego kodu dodającego niepożądaną funkcjonalność w naszym serwisie. Nowa wersja strony i nowe funkcjonalności nie wzbudziły w użytkownikach obaw i dokonują oni zakupów. Złośliwy kod wykonuje kopię danych wprowadzanych przez użytkowników i przesyła ją osobie atakującej. Nasze dane mogą być teraz sprzedane osobom trzecim – wbrew naszej woli i bez naszej wiedzy.

Schemat 1

Zauważmy jednak, że nie opisuję tutaj ataku phishingowego, bo nikt nie wysyła do nas spamu z dziwnie wyglądającym linkiem. Piszę o sytuacji, w której wchodząc na stronę ulubionego sklepu, nie wychodzimy poza jego ramy, a nasze dane są powielane bez naszej wiedzy i gdzieś wysyłane. Nie musi to być sklep, może to być dowolna inna witryna. Nie musi to być także strona WWW – wystarczy aplikacja mobilna z której codziennie korzystamy.

Cykl wydawniczy oprogramowania nigdy nie rozpoczyna się od udostępnienia klientom wczesnej wersji aplikacji takich jak koncepcyjna, pre-alfa, alfa, beta… Do większości z nich dostęp posiadać będą jedynie deweloperzy, projektanci, testerzy czy inwestorzy. Celem producenta jest wypuszczenie na rynek produktu, który został wcześniej poddany wielu testom oraz zostały naprawione znalezione w nim błędy i podatności. Dopiero wersja finalna (pozbawiona wad) trafia na rynek, dzięki czemu potencjalny klient/użytkownik, nie zrazi się do naszego rozwiązania, a jego dane nie zostaną wykradzione.

wdrozenie

 

Czy podział na wersję produkcyjną i testową nam wystarczy?

To jak szczegółowo podzielimy nasze środowisko, powinno zależeć od jego celu, dostępności (szczególnie z sieci Internet), częstotliwości zmian, złożoności i odrobiny zdrowego rozsądku.

Separowanie środowisk

Przyjmując, że odseparowanie środowisk od siebie, zwiększa nam bezpieczeństwo, będziemy chcieli dążyć do jak największej granularności dla przekazywanego kodu, tak by najlepiej każdy etap miał swoje środowisko. Oczywiście taki podział nie wyjaśnia w jaki sposób wykonać podział między np. serwerem WWW, bazą danych dla Produkcji i Pre-Produkcji czy UAT. Wyznaczamy jedynie podział na pewnej warstwie logicznej, między którymi chcemy przekazywać zmiany, a jednocześnie dla tych warstw mieć stałą konfigurację połączeń (np. do bazy danych).

Separowanie środowisk

Skoro możemy użyć bezpieczeństwa jako miary, to czemu nie wykorzystać do tego celu złożoności implementacji? Musimy pamiętać, że pojedyncze środowisko będące jednocześnie produkcją i testem, wcale nie jest takie łatwe w implementacji. Samo zabezpieczenie i odtworzenie danych może być bardziej czasochłonne, niż przygotowanie dwóch środowisk i uprzednie przetestowanie zmian na oddzielnym środowisku.

Na tych dwóch schematach, moglibyśmy omówić więcej przypadków, takich jak koszty implementacji, bezpieczeństwo, rozliczalność pracy zespołów bądź dopasowanie do norm ISO.

 

Podsumowanie

Spróbujmy więc ostatecznie odpowiedzieć na pytanie: Czemu powinniśmy separować środowiska? Ponieważ chcemy chronić nasze dane, czy też dane naszych klientów, jak również wizerunek naszej firmy.

Czy w takim układzie powinniśmy separować wszystkie środowiska? Patrząc na przykładzie ponad 7 miliardów użytkowników smartfonów, jest to raczej koniecznie, jeżeli nie chcemy stracić klientów. Musimy mieć pewność, że posiadając czystą instancję produktu, oraz kopię konfiguracji i kopię danych sprzed wdrożenia zmiany, jesteśmy w stanie przywrócić produkt do stanu sprzed prac, tak jak możemy to zrobić ze swoim smartfonem, gdy kupiliśmy nowe urządzenie tego samego producenta.

Czy jednak jako firma potrzebujemy zweryfikować nasz nowy produkt przed przekazaniem go klientom? Czy wystarczy nam środowisko produkcyjne i testowe? O ile na dwa wcześniejsze pytania można było udzielić jednoznacznej odpowiedzi twierdzącej, tak w tym przypadku jest to niemal niemożliwe. Wracając do dwóch ostatnich schematów i tego jak wiele różnych przypadków miary można na nich omówić, musimy określić wady i zalety każdej albo chociaż kilku wariantów separacji. Nie powinniśmy od razu skreślać przypadku najprostszego i najtrudniejszego do implementacji.

 

Źródła:

[1] https://www.statista.com/statistics/218984/number-of-global-mobile-users-since-2010/ (dostęp 18.01.2023)

[2] https://www.un.org/en/global-issues/population (dostęp 18.01.2023)

 

Opublikowane przez: Jerzy Pielichowski

Inne artykuły_