poniedziałek, 31 marca 2025

Wzorce MSA — Historia Darka i pewnego mikroserwisu

Darek był doświadczonym programistą backendowym. Pracował nad dużą aplikacją monolityczną obsługującą klientów w branży e-commerce. Kod miał swoje lata, swoje kruczki, ale ogólnie był w porządku — przynajmniej dopóki się nie psuł. A psuł się coraz częściej.



Pewnego dnia Darek postanowił, że nadszedł czas na zmiany. “Ten moduł płatności... aż się prosi, żeby go wydzielić do osobnego mikroserwisu!” — pomyślał.

Refaktoryzacja. Decoupling. Swoboda wdrożeń. Skalowalność. Brzmi pięknie. Co mogłoby pójść nie tak?

Przejście z komunikacji lokalnej do sieciowej

W monolicie wszystko było proste. Jedna metoda wywoływała drugą. Dane wędrowały po stosie w tym samym procesie JVM. Teraz — po wydzieleniu płatności do osobnego serwisu — zaczęło się dziać coś nowego. Darek wystawił endpoint REST i zaczął go wołać z głównego systemu.

Na lokalnym hoście działało to świetnie. Jednak po wdrożeniu na środowisko testowe okazało się, że...

DNS nie rozwiązuje się tak, jak Darek myślał.

Raz działał adres payment-service, raz payment.internal.local, innym razem... nie działał wcale. “Dlaczego curl działa, a HttpClient wyrzuca timeout?” — pytał ze złością. Zrozumiał, że sieć rządzi się swoimi prawami. I że trzeba się zaprzyjaźnić z service discovery.

Opóźnienia i retry

Wcześniej wszystko było instant. Teraz? Zdarzało się, że płatność odpowiadała po sekundzie, a czasem wcale. Timeout. I znowu.

“No to dorzucę retry” — pomyślał. I tak zrobił. Tyle że teraz system zaczął... powielać żądania. Dwukrotne opłaty, chaos w logach, sfrustrowani testerzy.

Nauczył się, że retry musi być idempotentne, a najlepiej opatrzone unikalnym ID żądania.

Circuit Breaker i fallback

Retry to nie wszystko. Mikroserwis płatności zaczął się czasem zawieszać przy dużym obciążeniu. A główny system... zawieszał się razem z nim.

Wtedy Darek odkrył Circuit Breaker. Dodał warstwę zabezpieczającą, która w razie błędu "odcinała" płatności i wrzucała je do kolejki z komunikatem: “usługa chwilowo niedostępna, spróbuj później”. Uratowało to resztę aplikacji.

Samodzielne wdrożenie... i nowe wyzwania

Wydzielenie mikroserwisu oznaczało możliwość niezależnego wdrażania kodu. Super. Do czasu.

Po wdrożeniu nowej wersji płatności logi z głównego systemu zaczęły krzyczeć: “500 Internal Server Error”. Co się okazało?

Nowa wersja zmieniła kontrakt API. Brak zgodności. Brak komunikacji między zespołami. Brak testów integracyjnych.

Darek nauczył się, że niezależność mikroserwisów nie oznacza dowolności. Kontrakty API muszą być święte — albo przynajmniej wersjonowane.

Brak kontraktu... czyli gorzkie lekcje integracji

W pewnym momencie frontend został zmodyfikowany tak, aby korzystał z nowej wersji mikroserwisu płatności. Ale… mikroserwis miał już też innych klientów. Nagle okazało się, że jedna z aplikacji mobilnych nie działa — nowy endpoint miał inny format odpowiedzi.

Darek odkrył wtedy Consumer-Driven Contract (CDC) — podejście, w którym to konsumenci mikroserwisu definiują oczekiwania wobec API, a producent (czyli mikroserwis) weryfikuje zgodność przy każdej zmianie. Narzędzia takie jak Pact pozwalają testować te kontrakty automatycznie w CI/CD.

💡 „Gdybyśmy mieli kontrakty konsumenckie wcześniej — uniknęlibyśmy błędów na produkcji i nieporozumień z zespołem mobilnym” – przyznał później Darek.

Monitoring, tracing i chaos w logach

Z czasem pojawiło się więcej mikroserwisów. I więcej pytań:

  • Gdzie utknęło żądanie?

  • Dlaczego płatność trwała 4 sekundy?

  • Kto wysłał ten dziwny request?

Logi z jednego serwisu przestały wystarczać. Darek wdrożył centralny monitoring (ELK Stack), a potem distributed tracing (np. Jaeger). I zrozumiał, że bez identyfikatora correlation-id w nagłówkach niczego nie da się poskładać.

DevOps

W miarę jak pojawiało się więcej mikroserwisów, więcej pipeline’ów CI/CD, więcej testów, Darek zrozumiał, że same zmiany w kodzie to za mało.

🔹 Musiał przygotować procesy wdrożeniowe z podziałem na środowiska.
🔹 Zautomatyzować testy integracyjne i rollback w przypadku błędów.
🔹 Wdrożyć monitoring stanu zdrowia usług (healthcheck, readiness, liveness).
🔹 I wreszcie — spiąć to wszystko z GitLab CI i ArgoCD.

„Mikroserwisy bez kultury DevOps to jak wyścigówka bez kierowcy – teoretycznie szybka, ale łatwo o kraksę.”

Skalowalność i autoscaling

Ruch wzrósł. Płatności musiały działać szybko, więc dorzucono autoscaling w Kubernetesie. Ale... przy skoku ruchu nowe instancje nie miały cache’a i ładowały dane z opóźnieniem.

Nauczył się, że skalowalność pozioma nie rozwiązuje wszystkiego, jeśli nie pomyślisz o stanie aplikacji, cache’ach i bazach danych.

Podsumowanie: Mikroserwisy? To nie tylko podział na pliki

Darek zaczął od pomysłu: "podzielmy system, będzie lepiej".

Ale każdy krok — DNS, retry, service discovery, tracing, versioning, deployment, skalowanie — wymagał świadomości, planowania i odpowiedzialności.

💡 Mikroserwisy to nie tylko “dzielenie systemu na kawałki”. To świadome projektowanie rozproszonego ekosystemu z wszystkimi jego pułapkami i możliwościami.


„Dziś, gdy ktoś mówi mi, że ‘chce sobie coś wydzielić’, pytam: ‘czy jesteś gotów na konsekwencje?’” – śmieje się Darek, patrząc na swój dashboard Prometheusa.


 


Część praktyk i wzorców zdążyłeś już poznać w moich poprzednich wpisach. Kolejne będą się pojawiać w następnych. Więc zapraszam do czytania i śledzenia mojego bloga!

wtorek, 25 marca 2025

EA - OWASP ASVS - Weryfikacja zgodności z OWASP API Security Top 10

 Interfejsy API stanowią jeden z najważniejszych elementów współczesnych aplikacji. Ich zabezpieczenie ma kluczowe znaczenie, ponieważ niekontrolowane podatności mogą prowadzić do wycieków danych, eskalacji uprawnień oraz ataków DDoS.

W ramach standardu OWASP Application Security Verification Standard (ASVS) znajdziemy konkretne wymagania dotyczące bezpieczeństwa API, które uzupełniają się z listą OWASP API Security Top 10. W tym artykule omówię najczęstsze zagrożenia, jak ich unikać oraz jak testować API pod kątem zgodności z OWASP ASVS.



OWASP API Security Top 10 – Najczęstsze zagrożenia dla API

Organizacja OWASP stworzyła API Security Top 10, czyli listę najczęściej występujących błędów związanych z bezpieczeństwem API. Poniżej przedstawiam kluczowe zagrożenia oraz sposoby ich eliminacji.

1. API1:2023 – Broken Object Level Authorization (BOLA)

🔴 Problem: Brak odpowiedniej kontroli dostępu do obiektów pozwala użytkownikom na odczytanie lub modyfikację zasobów innych użytkowników.
Jak się zabezpieczyć?

  • Weryfikuj autoryzację użytkownika dla każdego żądania.
  • Nie polegaj tylko na identyfikatorach przekazywanych w URL, ale sprawdzaj uprawnienia na poziomie serwera.

2. API2:2023 – Broken Authentication

🔴 Problem: Nieprawidłowe mechanizmy uwierzytelniania mogą prowadzić do przejęcia kont użytkowników.
Jak się zabezpieczyć?

  • Stosuj OAuth 2.0, OpenID Connect lub JWT z krótkim czasem życia tokena.
  • Zabezpieczaj hasła funkcją PBKDF2, bcrypt lub Argon2.
  • Wymuszaj wielopoziomową autoryzację (MFA).

3. API3:2023 – Broken Object Property Level Authorization

🔴 Problem: Aplikacja zwraca więcej danych niż powinna (np. dane poufne użytkownika).
Jak się zabezpieczyć?

  • W API zwracaj tylko te pola, które są niezbędne (technika whitelisting).
  • Filtruj odpowiedzi przed ich wysłaniem, aby ukryć wrażliwe dane.

4. API4:2023 – Unrestricted Resource Consumption

🔴 Problem: Brak ograniczeń na liczbę żądań API prowadzi do ataków DDoS i nadmiernego zużycia zasobów.
Jak się zabezpieczyć?

  • Wprowadź rate limiting i ograniczenia liczby jednoczesnych połączeń.
  • Stosuj mechanizmy cachingu i kompresji odpowiedzi.

5. API5:2023 – Broken Function Level Authorization

🔴 Problem: Brak weryfikacji uprawnień przy operacjach administracyjnych.
Jak się zabezpieczyć?

  • Wymagaj autoryzacji dla wszystkich endpointów administracyjnych.
  • Oddzielaj uprawnienia użytkowników (np. użytkownik vs. administrator).

6. API6:2023 – Unrestricted Access to Sensitive Business Flows

🔴 Problem: Brak zabezpieczeń w krytycznych procesach, np. resetowanie hasła.
Jak się zabezpieczyć?

  • Wprowadź dodatkowe potwierdzenie operacji (np. email lub SMS).
  • Loguj wszystkie operacje związane ze zmianami danych wrażliwych.

7. API7:2023 – Server Side Request Forgery (SSRF)

🔴 Problem: Aplikacja pozwala na wysyłanie żądań HTTP do wewnętrznych serwisów, co może prowadzić do wycieku danych.
Jak się zabezpieczyć?

  • Blokuj nieautoryzowane żądania wychodzące do zasobów wewnętrznych.
  • Używaj listy dozwolonych adresów IP (whitelist).

8. API8:2023 – Security Misconfiguration

🔴 Problem: Nieprawidłowe konfiguracje API mogą ujawniać wrażliwe dane i umożliwiać ataki.
Jak się zabezpieczyć?

  • Wyłączaj debugowanie w środowisku produkcyjnym.
  • Ukrywaj nagłówki serwera i wersję API.

9. API9:2023 – Improper Inventory Management

🔴 Problem: Brak kontroli nad wersjami API prowadzi do ataków na stare, nieaktualizowane endpointy.
Jak się zabezpieczyć?

  • Regularnie usuwaj nieużywane API.
  • Oznaczaj wersje API i wymuszaj migrację na najnowszą wersję.

10. API10:2023 – Unsafe Consumption of APIs

🔴 Problem: Brak walidacji odpowiedzi z zewnętrznych API może prowadzić do ataków (np. ataki XML Injection).
Jak się zabezpieczyć?

  • Waliduj odpowiedzi z API zewnętrznych.
  • Stosuj mechanizmy sanitizacji danych wejściowych.

Jak testować bezpieczeństwo API?

Testowanie API pod kątem zgodności z OWASP ASVS można zrealizować za pomocą różnych narzędzi:

OWASP ZAP – Dynamiczne testowanie API (DAST)

  • Można skanować API pod kątem podatności XSS, SQLi i innych ataków.
  • Wspiera testy REST i GraphQL.

zap-cli quick-scan -r -d -u https://api.mojaserwis.pl

Postman – Testowanie autoryzacji i odpowiedzi API

  • Możliwość ręcznego testowania nagłówków, tokenów JWT oraz metod HTTP.
  • Można pisać testy automatyczne w JavaScript.

pm.test("Sprawdź status odpowiedzi", function () { pm.response.to.have.status(200); });

Burp Suite – Ręczna analiza i ataki na API

  • Umożliwia przechwytywanie i modyfikację żądań API.
  • Może wykrywać błędy autoryzacji i podatności XSS.

Podsumowanie

🔹 Bezpieczeństwo API to jeden z najważniejszych aspektów współczesnych systemów – OWASP ASVS definiuje kluczowe wymagania dotyczące API.
🔹 Lista OWASP API Security Top 10 pomaga zrozumieć najczęstsze zagrożenia i sposoby ich eliminacji.
🔹 Testowanie API można zautomatyzować przy użyciu narzędzi takich jak OWASP ZAP, Postman i Burp Suite.
🔹 Regularne audyty bezpieczeństwa i monitoring API pozwalają unikać ataków i zwiększają odporność systemu.

wtorek, 18 marca 2025

Wzorce MSA: Ambasador (Ambassador Pattern)

W architekturze mikroserwisów (MSA) bardzo często mikroserwisy muszą komunikować się z zewnętrznymi usługami lub innymi mikroserwisami. W takich przypadkach kluczowe jest zapewnienie stabilności, bezpieczeństwa i odpowiedniej kontroli nad ruchem wychodzącym.
Jednym z rozwiązań ułatwiających te zadania jest Ambassador Pattern (wzorzec ambasador), który pozwala na odciążenie głównej logiki mikroserwisu i lepsze zarządzanie połączeniami z innymi systemami.



W tym artykule omówię:

  • Jak działa wzorzec ambasador?
  • Kiedy warto go stosować?
  • Przykłady implementacji w Kubernetes i Spring Cloud

Jak działa wzorzec Ambassador?

Ambassador Pattern zakłada, że zamiast bezpośredniego łączenia się z zewnętrznymi usługami, mikroserwis deleguje połączenia do specjalnej warstwy proxy (ambasadora). Proxy obsługuje komunikację, dodając dodatkowe funkcjonalności, takie jak:
Monitoring i logowanie ruchu
Buforowanie żądań
Circuit Breaker dla zwiększenia odporności
Autoryzacja i kontrola dostępu
Obsługa retrysów i time-outów

Z perspektywy mikroserwisu, ambasador działa jak lokalny serwis, a w rzeczywistości przekazuje żądania do rzeczywistego odbiorcy.

Kiedy warto stosować wzorzec Ambasador?

🔹 Gdy mikroserwis komunikuje się z zewnętrznymi API lub usługami
🔹 Gdy chcemy dodać mechanizmy odporności, np. Circuit Breaker lub Retry Logic
🔹 Gdy chcemy przechwycić ruch i logować zdarzenia na poziomie proxy
🔹 Gdy chcemy uprościć kod mikroserwisu i uniknąć bezpośredniej integracji z komponentami sieciowymi

Dzięki oddzieleniu odpowiedzialności za komunikację, możemy utrzymać czysty kod mikroserwisu, a konfiguracja ambasadora może być łatwo zmieniana bez konieczności ingerencji w główny serwis.

Przykład implementacji w Kubernetes – Ambassador Sidecar

W środowisku Kubernetes, wzorzec ambasador jest najczęściej realizowany za pomocą kontenera sidecar, który działa obok mikroserwisu w tym samym podzie.

Przykładowy manifest dla ambasadora w Kubernetes (Envoy Proxy)


apiVersion: v1 kind: Pod metadata: name: my-microservice labels: app: my-microservice spec: containers: - name: my-microservice image: my-microservice:latest ports: - containerPort: 8080 - name: ambassador image: envoyproxy/envoy:latest ports: - containerPort: 9901 volumeMounts: - name: envoy-config mountPath: /etc/envoy volumes: - name: envoy-config configMap: name: envoy-config

🔹 Pierwszy kontener (my-microservice) to aplikacja biznesowa.
🔹 Drugi kontener (ambasador – Envoy Proxy) przejmuje ruch wychodzący i zarządza komunikacją.

Dzięki temu mikroserwis nie musi zajmować się takimi aspektami jak retry logic, circuit breaker czy monitoring – wszystkim zarządza ambasador.

Przykład w Spring Cloud – Ambassador Pattern z Resilience4j

W Spring Cloud możemy zaimplementować wzorzec Ambasador za pomocą Resilience4j, który zapewnia obsługę Circuit Breaker, Retry i Rate Limiting.


@CircuitBreaker(name = "externalService", fallbackMethod = "fallbackResponse") @Retry(name = "externalService", maxAttempts = 3) public String callExternalService() { return restTemplate.getForObject("https://api.external.com/data", String.class); } public String fallbackResponse(Exception e) { return "Fallback: Serwis niedostępny"; }

Circuit Breaker – zapobiega przeciążeniu systemu, blokując wywołania do usługi, gdy wykryje jej awarię.
Retry Logic – podejmuje kilka prób ponownego wykonania żądania w przypadku błędu.

Dzięki temu mikroserwis nie musi samodzielnie obsługiwać problemów z siecią, a cała logika odpornościowa jest zarządzana przez warstwę ambasadora.

Korzyści z zastosowania wzorca Ambasador

Lepsza separacja odpowiedzialności – mikroserwis skupia się na logice biznesowej, a ambasador zarządza komunikacją.
Odporność na błędy sieciowe – retry logic, circuit breaker i load balancing poprawiają stabilność systemu.
Bezpieczeństwo – ambasador może obsługiwać autoryzację i szyfrowanie ruchu.
Łatwiejsza skalowalność – warstwa proxy może być dynamicznie konfigurowana i skalowana niezależnie od mikroserwisów.

Ambassador a API Gateway

Być może zwróciłeś uwagą na podobieństwo wzorca Ambasador do omawianego przeze mnie innego wzorca MSA - API Gateway. Jednak wzorce te, mają różne zastosowania i uzupełniają się w architekturze mikroserwisów.

Podsumowanie

🔹 Ambassador Pattern to skuteczny sposób na zarządzanie komunikacją mikroserwisów z zewnętrznymi usługami.
🔹 W Kubernetes ambasador jest często realizowany jako sidecar proxy, np. Envoy Proxy.
🔹 W Spring Cloud można wykorzystać Resilience4j do obsługi circuit breaker i retry logic.
🔹 Wzorzec ambasador pozwala na odporność, monitoring i bezpieczeństwo połączeń wychodzących, co znacząco zwiększa stabilność systemów opartych na MSA.

wtorek, 11 marca 2025

EA SAP HANA: Instalacja

 SAP HANA to zaawansowana platforma bazodanowa, która wymaga odpowiedniego przygotowania środowiska przed instalacją. W tym artykule przeprowadzimy Cię przez cały proces instalacji i konfiguracji SAP HANA, od wymagań systemowych po pierwsze kroki administracyjne.



Wymagania systemowe dla SAP HANA

Przed instalacją należy upewnić się, że środowisko spełnia wymagania sprzętowe i systemowe.

Wymagania sprzętowe

Procesor: Intel Xeon E7 lub nowszy / IBM Power Systems (dla HANA on Power)
Pamięć RAM: Min. 64 GB (zalecane 128 GB dla systemów produkcyjnych)
Dysk: SSD o wysokiej wydajności
Sieć: Karta 10 Gbit/s dla systemów rozproszonych

Wymagania systemowe

System operacyjny:

  • SUSE Linux Enterprise Server (SLES) 12/15
  • Red Hat Enterprise Linux (RHEL) 7/8

Dodatkowe zależności:

  • Instalacja pakietów SAP HANA z repozytoriów systemowych
  • Ustawienia czasu systemowego – maksymalna różnica między serwerami: 180 sekund

Przygotowanie systemu przed instalacją

Tworzenie użytkownika systemowego

SAP HANA działa pod dedykowanym użytkownikiem systemowym <sid>adm.

Tworzenie użytkownika (Linux):


useradd -m -d /usr/sap/SID -s /bin/bash -g sapsys <sid>adm passwd <sid>adm

Tworzenie struktury katalogów

SAP HANA wymaga określonej struktury katalogów:

  • /hana/shared/ – pliki binarne i konfiguracyjne
  • /hana/data/ – przechowywanie danych
  • /hana/log/ – logi systemowe

Konfiguracja katalogów i uprawnień:


mkdir -p /hana/{shared,data,log} chown -R <sid>adm:sapsys /hana/* chmod -R 775 /hana/*

Konfiguracja pamięci swap

SAP HANA nie używa klasycznego swap, ale zaleca się jego ustawienie dla bezpieczeństwa:


dd if=/dev/zero of=/swapfile bs=1G count=32 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

Instalacja SAP HANA

Instalację SAP HANA można przeprowadzić za pomocą SAP HANA Database Lifecycle Manager (HDBLCM), który oferuje interfejs graficzny i wiersz poleceń.

Pobranie pakietu instalacyjnego

Pakiety SAP HANA można pobrać z SAP Support Portal. Po pobraniu i rozpakowaniu należy przejść do katalogu instalacyjnego:


cd /sapmedia/SAPHANA ./hdblcmgui

Jeśli używasz instalacji w trybie CLI:


./hdblcm

Proces instalacji

Po uruchomieniu instalatora:
✅ Wybierz opcję "Install New SAP HANA Database"
✅ Podaj identyfikator systemu (SID) – np. HDB
✅ Wybierz katalog instalacyjny (domyślnie /hana/shared/)
✅ Podaj numer instancji (00-99, domyślnie 00)
✅ Ustaw hasło dla użytkownika SYSTEM
✅ Potwierdź konfigurację i rozpocznij instalację

Sprawdzenie poprawności instalacji

Po zakończeniu instalacji uruchom SAP HANA i sprawdź, czy wszystkie usługi działają:


su - <sid>adm HDB info

Oczekiwany wynik:


Instance HDB00 running Indexserver: ACTIVE Nameserver: ACTIVE

Podstawowa konfiguracja SAP HANA

Po instalacji warto wykonać kilka dodatkowych kroków konfiguracyjnych.

Tworzenie bazy tenantowej

SAP HANA może działać jako system wielobazodanowy (MDC), dlatego warto utworzyć pierwszą bazę tenantową:


CREATE DATABASE TENANT1 SYSTEM USER PASSWORD "SecurePass123";

Konfiguracja automatycznego startu SAP HANA

Aby SAP HANA automatycznie uruchamiała się po restarcie systemu, należy dodać ją do skryptów inicjalizacyjnych:


systemctl enable sapinit

Tworzenie pierwszego użytkownika administracyjnego

Nie zaleca się używania użytkownika SYSTEM na co dzień. Można utworzyć nowego użytkownika z odpowiednimi uprawnieniami:


CREATE USER admin IDENTIFIED BY "SecureAdmin123"; GRANT CATALOG READ, BACKUP ADMIN, MONITOR ADMIN TO admin;

Monitorowanie i zarządzanie SAP HANA

Po zakończeniu instalacji można zarządzać SAP HANA za pomocą kilku narzędzi:

🔹 SAP HANA Cockpit – narzędzie webowe do monitorowania i administracji.
🔹 SAP HANA Studio – klasyczna aplikacja desktopowa dla administratorów.
🔹 HDBSQL – narzędzie CLI do wykonywania zapytań SQL.

Przykładowe polecenia monitorowania systemu:


SELECT * FROM M_DATABASES; SELECT * FROM M_HOST_RESOURCE_UTILIZATION; SELECT * FROM M_SERVICE_MEMORY;

Podsumowanie

Instalacja i konfiguracja SAP HANA wymaga kilku kroków, ale po poprawnym przygotowaniu systemu proces ten przebiega sprawnie.

Przygotowaliśmy system operacyjny i użytkowników.
Zainstalowaliśmy SAP HANA przy użyciu HDBLCM.
Skonfigurowaliśmy bazę danych i pierwszego użytkownika administracyjnego.

środa, 5 marca 2025

EA - SAP HANA: Wprowadzenie

 Czym jest SAP HANA?

SAP HANA (High-Performance Analytic Appliance) to innowacyjna platforma bazodanowa oparta na technologii in-memory computing. Oznacza to, że dane są przetwarzane bezpośrednio w pamięci RAM, co pozwala na znaczne przyspieszenie operacji analitycznych i transakcyjnych w porównaniu do tradycyjnych baz danych opartych na dyskach.

SAP HANA została opracowana przez firmę SAP jako fundament dla nowoczesnych systemów ERP (np. SAP S/4HANA), aplikacji analitycznych oraz rozwiązań do zarządzania danymi w czasie rzeczywistym.



Główne cechy SAP HANA:

Technologia in-memory – wszystkie operacje są wykonywane w pamięci, eliminując opóźnienia związane z dostępem do dysku.
Przetwarzanie danych w czasie rzeczywistym – dzięki kolumnowemu przechowywaniu danych oraz równoległemu przetwarzaniu, analizy mogą być wykonywane natychmiast.
Wsparcie dla wielu modeli danych – SAP HANA obsługuje zarówno dane relacyjne (SQL), jak i nierelacyjne (JSON, XML, grafowe).
Jedna platforma dla OLTP i OLAP – eliminuje konieczność stosowania oddzielnych systemów dla transakcji i analityki.

Krótka historia SAP HANA

SAP rozpoczął prace nad bazą danych in-memory już w latach 2000, ale oficjalna premiera SAP HANA miała miejsce w 2010 roku. Na początku była to platforma analityczna, jednak z czasem ewoluowała w pełnoprawny system zarządzania bazami danych (DBMS), zastępując tradycyjne rozwiązania, takie jak Oracle, Microsoft SQL Server i IBM Db2.

W 2015 roku SAP wprowadził SAP S/4HANA, nowoczesny system ERP oparty na HANA, co zrewolucjonizowało sposób, w jaki firmy zarządzają swoimi danymi i operacjami.

Kamienie milowe SAP HANA:
📌 2010 – Premiera SAP HANA jako platformy analitycznej.
📌 2013 – SAP HANA staje się pełnoprawnym systemem bazodanowym.
📌 2015 – SAP S/4HANA – pierwsze ERP w pełni oparte na SAP HANA.
📌 2018 – Wprowadzenie SAP HANA 2.0 z dodatkowymi funkcjonalnościami w zakresie zarządzania pamięcią i wysokiej dostępności.

Architektura i technologia SAP HANA

SAP HANA składa się z kilku kluczowych komponentów, które wspólnie zapewniają jej wysoką wydajność i elastyczność:

🛠️ In-memory computing

Tradycyjne bazy danych zapisują dane na dyskach twardych, co powoduje opóźnienia w dostępie do informacji. SAP HANA przechowuje dane w pamięci RAM, eliminując ten problem i umożliwiając przetwarzanie w czasie rzeczywistym.

🗂️ Column Store vs Row Store

SAP HANA obsługuje dwa sposoby przechowywania danych:

  • Row Store – klasyczne przechowywanie wierszowe, idealne dla transakcji OLTP (np. systemy sprzedaży).
  • Column Store – przechowywanie kolumnowe, optymalne dla zapytań analitycznych OLAP (np. raportowanie i analiza dużych zbiorów danych).

Kolumnowe przechowywanie pozwala na lepszą kompresję danych i równoległe przetwarzanie, co jest kluczowe dla wydajności SAP HANA.

🔗 Procesy serwerowe

SAP HANA składa się z kilku kluczowych procesów:

  • Index Server – serce bazy danych, obsługujące zapytania SQL i transakcje.
  • Name Server – zarządza metadanymi i partycjonowaniem danych.
  • Preprocessor Server – odpowiada za operacje przetwarzania tekstu i wyszukiwania pełnotekstowego.
  • XS Engine – umożliwia uruchamianie aplikacji bezpośrednio na SAP HANA, eliminując konieczność stosowania zewnętrznych serwerów aplikacyjnych.

Główne zalety SAP HANA

SAP HANA to nie tylko szybkość, ale także ogromna elastyczność i uproszczenie architektury IT. Oto kluczowe korzyści:

Szybsze przetwarzanie danych – dzięki technologii in-memory operacje, które w tradycyjnych bazach trwały godziny, mogą być wykonane w sekundach.
Eliminacja duplikacji danych – SAP HANA łączy transakcje i analitykę w jednym systemie, redukując konieczność replikacji danych.
Lepsza kompresja danych – kolumnowa struktura pozwala na zaawansowaną kompresję i mniejsze zapotrzebowanie na pamięć.
Skalowalność – SAP HANA obsługuje zarówno małe instalacje lokalne, jak i ogromne środowiska rozproszone w chmurze.
Obsługa różnych źródeł danych – SAP HANA może integrować się z systemami IoT, Big Data, hurtowniami danych, a także bazami NoSQL.

Przykładowe zastosowania SAP HANA

SAP HANA jest używana w wielu branżach do różnych celów:

📊 Analityka biznesowa – analiza danych w czasie rzeczywistym, zaawansowane raportowanie, wizualizacja danych.
🏭 Zarządzanie produkcją – optymalizacja procesów produkcyjnych, prognozowanie popytu, zarządzanie łańcuchem dostaw.
📦 ERP (SAP S/4HANA) – wsparcie dla finansów, księgowości, logistyki, HR i innych kluczowych funkcji biznesowych.
🚀 Machine Learning i AI – wykorzystanie HANA do przetwarzania ogromnych ilości danych w zastosowaniach sztucznej inteligencji.
💡 Internet rzeczy (IoT) – analiza danych z urządzeń w czasie rzeczywistym, np. w logistyce czy monitoringu sprzętu.

Podsumowanie

SAP HANA to jedna z najnowocześniejszych platform bazodanowych, która łączy transakcje i analitykę w czasie rzeczywistym. Dzięki technologii in-memory oferuje niezrównaną wydajność i możliwość przetwarzania ogromnych zbiorów danych.

Dzięki SAP HANA firmy mogą przyspieszyć procesy biznesowe, zoptymalizować operacje i zyskać przewagę konkurencyjną poprzez natychmiastowy dostęp do informacji.



wtorek, 4 marca 2025

EA - OWASP ASVS Zabezpieczenia kryptograficzne – Jak unikać typowych błędów

 W zabezpieczeniach aplikacji kryptografia pełni kluczową rolę. Odpowiednie szyfrowanie i zarządzanie kluczami pozwalają na ochronę wrażliwych danych oraz zapewniają integralność komunikacji. Jednak błędy w implementacji mogą prowadzić do poważnych naruszeń bezpieczeństwa. OWASP Application Security Verification Standard (ASVS) zawiera szczegółowe wymagania dotyczące kryptografii, które pomagają unikać takich błędów i wdrażać najlepsze praktyki.

W tym artykule omówię kluczowe zagadnienia związane z kryptografią w kontekście OWASP ASVS, najczęstsze błędy oraz przykłady dobrych praktyk.



Wymagania OWASP ASVS dotyczące kryptografii

OWASP ASVS obejmuje kryptografię w kilku sekcjach, głównie w V7: Cryptographic Requirements, które koncentrują się na bezpiecznym szyfrowaniu, zarządzaniu kluczami oraz ochronie danych.

Oto najważniejsze wymagania:

  1. V7.1 – Algorytmy kryptograficzne

    • Unikaj przestarzałych algorytmów takich jak MD5, SHA-1 czy RC4.
    • Stosuj algorytmy rekomendowane, takie jak AES (Advanced Encryption Standard) dla szyfrowania symetrycznego i SHA-256 dla funkcji skrótu.
  2. V7.2 – Zarządzanie kluczami

    • Klucze kryptograficzne muszą być przechowywane w bezpieczny sposób, np. przy użyciu dedykowanych modułów HSM (Hardware Security Module) lub narzędzi takich jak HashiCorp Vault.
    • Nie przechowuj kluczy w kodzie źródłowym ani w plikach konfiguracyjnych.
  3. V7.3 – Szyfrowanie danych wrażliwych

    • Dane takie jak hasła, numery kart kredytowych czy tokeny autoryzacyjne powinny być szyfrowane z użyciem silnych algorytmów i unikalnych kluczy.
    • Hasła powinny być przechowywane jako skrót z solą (salt) przy użyciu funkcji takich jak bcrypt, Argon2 lub PBKDF2.
  4. V7.4 – Integralność i autentyczność danych

    • Wszystkie dane przesyłane przez sieć powinny być chronione przed modyfikacją przy użyciu mechanizmów HMAC (Hash-based Message Authentication Code).
    • Wymagana jest ochrona przed atakami typu replay.


Najczęstsze błędy kryptograficzne i jak ich unikać

1. Używanie przestarzałych algorytmów

Algorytmy takie jak MD5 czy SHA-1 są podatne na ataki kolizyjne. Mimo że nadal są powszechnie używane w starszych systemach, powinny być zastąpione przez bezpieczniejsze algorytmy.

Dobra praktyka:
Używaj SHA-256 lub nowszych algorytmów do funkcji skrótu oraz AES-256-GCM do szyfrowania danych.

2. Przechowywanie kluczy w kodzie źródłowym

To jeden z najczęstszych błędów, który może prowadzić do kompromitacji kluczy i naruszenia danych.

Dobra praktyka:
Korzystaj z narzędzi takich jak HashiCorp Vault, AWS Secrets Manager czy Azure Key Vault do bezpiecznego przechowywania i zarządzania kluczami.

3. Brak szyfrowania danych wrażliwych

Niektóre aplikacje przechowują dane wrażliwe w postaci zwykłego tekstu, co może być łatwo wykorzystane przez atakujących.

Dobra praktyka:
Szyfruj wszystkie dane wrażliwe, zarówno w spoczynku (at rest), jak i podczas transmisji (in transit).

4. Brak ochrony hasła odpowiednimi algorytmami

Użycie nieodpowiednich funkcji skrótu (np. SHA-256 bez soli) do przechowywania haseł może prowadzić do ich łatwego złamania.

Dobra praktyka:
Przechowuj hasła jako hashe z solą przy użyciu algorytmów takich jak bcrypt, Argon2 lub PBKDF2.


Przykład implementacji szyfrowania w Javie

Poniżej prosty przykład szyfrowania danych przy użyciu algorytmu AES w Javie:


import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class EncryptionExample { public static String encrypt(String data, SecretKey key) throws Exception { Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encryptedData = cipher.doFinal(data.getBytes()); return Base64.getEncoder().encodeToString(encryptedData); } public static void main(String[] args) throws Exception { KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(256); SecretKey key = keyGen.generateKey(); String originalData = "Wrażliwe dane"; String encryptedData = encrypt(originalData, key); System.out.println("Zaszyfrowane dane: " + encryptedData); } }


Monitorowanie algorytmów i zarządzanie cyklem życia kluczy

Integracja monitorowania kryptografii z procesami CI/CD oraz regularne audyty zgodnie z OWASP ASVS pomagają utrzymać wysoki poziom bezpieczeństwa. Narzędzia takie jak HashiCorp Vault, CryptCheck i Endoflife.date mogą być używane do weryfikacji aktualności algorytmów oraz statusu bibliotek kryptograficznych.


Podsumowanie

Kryptografia jest fundamentem bezpieczeństwa aplikacji, ale jej nieprawidłowa implementacja może prowadzić do poważnych zagrożeń. Dzięki wytycznym OWASP ASVS zespoły mogą unikać typowych błędów i wdrażać najlepsze praktyki, zapewniając lepszą ochronę swoich systemów. Regularne audyty, monitorowanie algorytmów oraz korzystanie z dedykowanych narzędzi to klucz do skutecznej ochrony danych.

poniedziałek, 3 marca 2025

EA - shorts #001



Świat Javy

Aktualizacje JDK:


  • OpenJDK 21.0.6, 17.0.14, 11.0.26 oraz 8u441 zostały wydane z poprawkami bezpieczeństwa i ulepszeniami wydajności.
  • Wersje wczesne JDK 24 i JDK 25 wprowadzają eksperymentalne funkcje, takie jak lepsze zarządzanie pamięcią i optymalizacje dla architektury ARM.

Źródło: OpenJDK Updates

Frameworki i narzędzia:


Spring Boot 3.2.2 wprowadza ulepszenia dla GraalVM Native Image oraz lepszą integrację z narzędziami DevOps.

Hibernate ORM dodaje wsparcie dla Jakarta EE 11, co jest kluczowe dla migracji starszych aplikacji Java EE.


Konferencje i wydarzenia:

  • Devoxx UK 2025 (maj) i JavaLand 2025 (marzec) zapowiadają sesje dotyczące przyszłości JVM oraz nowych technologii w ekosystemie Javy.

Źródło: Devoxx UK | JavaLand

Architektura korporacyjna

Trendy i nowości:


  • Data Mesh staje się popularnym podejściem do zarządzania danymi w dużych organizacjach, umożliwiając zespołom większą autonomię w zarządzaniu danymi.
  • API Management rozwija się jako kluczowy element integracji systemów wewnętrznych z partnerami zewnętrznymi.


Frameworki i narzędzia:


  • ArchiMate 5.0 wspiera modelowanie architektury korporacyjnej zgodnie z TOGAF, ułatwiając wizualizację procesów biznesowych.
  • Sparx Enterprise Architect zdobywa popularność dzięki nowym funkcjom wspierającym modelowanie w chmurze.


Wydarzenia branżowe:

  • Konferencja online o transformacji cyfrowej odbędzie się 5 marca, obejmując tematy takie jak chmury hybrydowe i automatyzacja procesów biznesowych.


Architektura systemów

Nowości technologiczne:


  • Zero Trust Architecture (ZTA) zyskuje na znaczeniu, szczególnie w sektorze finansowym, gdzie bezpieczeństwo danych jest kluczowe.
  • Kubernetes 1.29 wprowadza nowe funkcje ułatwiające zarządzanie systemami rozproszonymi.


Chmura i mikroserwisy:


  • AWS Lambda dodał funkcje precyzyjnego skalowania, co pozwala na bardziej efektywne zarządzanie kosztami w aplikacjach serverless.
  • Microsoft Azure rozszerzył swoją infrastrukturę w Europie, co ułatwia wdrażanie systemów zgodnych z RODO.
Źródło: AWS Lambda Updates | Microsoft Azure News

Wydarzenia branżowe:

  • Konferencja poświęcona mikroserwisom odbędzie się 4 marca – omówione zostaną najlepsze praktyki projektowania systemów o wysokiej dostępności.