Jak zbudować aplikację do otwartej bankowości w Azure?
Większość z nas ma po kilka kont w różnych bankach. Każde z nich posiada aplikację (desktopową lub mobilną), gdzie możemy się zalogować i wykonywać różne operacje. Gdy próbujemy zarządzać naszym budżetem i kontrolować wydatki, sprawdzanie historii transakcji oddzielnie na każdym koncie jest dość czasochłonne. O wiele łatwiej byłoby posiadać wszystkie dane w jednym miejscu. Właśnie w tym może pomóc dyrektywa PSD2. Wprowadziła ona możliwość korzystania z tzw. otwartej bankowości. Teraz możemy tworzyć i korzystać z aplikacji, dzięki którym możemy zarządzać wszystkimi naszymi kontami jednocześnie.
Czym jest dyrektywa PSD2?
Dyrektywa PSD2 (Payment Services Directive 2) została wprowadzona na początku 2018 r. przez Parlament Europejski. Zmusiła ona banki do dzielenia się danymi między sobą i (uprawnionymi) stronami trzecimi, dzięki czemu nowi usługodawcy mogą łatwiej wejść na rynek.
PSD2 pozwala bankom bezpiecznie udostępniać dane dotyczące konta i płatności klienta za jego zgodą, przez API, autoryzowanym stronom trzecim. Przykładem strony trzeciej są dostawcy usług dostępu do informacji o kontach (ang. Account Information Service Provider – AISP). Mogą oni w bezpieczny sposób zbierać dane z wielu kont. W efekcie, dyrektywa PSD2 umożliwia agregowanie danych z różnych rachunków bankowych.
Więcej informacji na temat ról w PSD2 znajdziecie na poniższym wykresie:
Role w dyrektywie PSD2
W tym artykule omówimy wdrożenie rozwiązania, które będzie działać jako AISP, czyli agregator danych pochodzących z różnych kont bankowych.
Jakie wymagania musimy wziąć pod uwagę, budując aplikację bankową?
Myśląc o rozwiązaniu, które obsługuje dane finansowe, pierwszą rzeczą, która przychodzi nam do głowy jest bezpieczeństwo. Przy wdrażaniu tego typu aplikacji należy wziąć pod uwagę pewne kluczowe kwestie z nim związane, takie jak:
- Autoryzacja– uwierzytelnieni użytkownicy mogą uzyskać dostęp tylko do tych funkcji biznesowych, do których mają uprawnienia.
- Poufność danych– aplikacja powinna przechowywać dane wrażliwe w dedykowanym i zabezpieczonym systemie plików. Nie można doprowadzić do wycieku tych informacji w logach czy komunikatach o błędach.
- Uwierzytelnianie– powinien istnieć silny mechanizm uwierzytelniający w celu weryfikacji tożsamości użytkownika, najlepiej oparty o uwierzytelnianie wieloetapowe (MFA).
- Połączenia szyfrowane– dla bezpieczeństwa, wszystkie połączenia inicjowane przez aplikację powinny być szyfrowane. Do połączenia z chmurą powinien być użyty protokół HTTPS.
- Szyfrowanie danych– wszystkie ważne pliki danych, takie jak plik właściwości lub plik konfiguracyjny, powinny być ukryte i zaszyfrowane.
Ale bezpieczeństwo to nie wszystko – są jeszcze inne problemy do rozwiązania:
- Wysoka dostępność i skalowalność– rozwiązanie musi być dostępne 24/7, niezależnie od natężenia ruchu.
- Automatyczne usuwanie konta i danych– na żądanie użytkownika, musi być możliwe usunięcie jego konta i wszystkich zgromadzonych przez niego danych.
- Odpowiednie powiadomienia– użytkownicy urządzeń przenośnych powinni otrzymywać personalizowane powiadomienia typu "push".
- Ochrona danych– wszelkie dane muszą być szyfrowane, tak podczas przesyłania jak i w spoczynku.
Chmura Azure zapewnia wszystkie usługi potrzebne do sprostania tym wyzwaniom, więc wykorzystując usługi Azure, udało nam się sprostać powyższym wymaganiom. Przejdźmy zatem do samego procesu.
Pora na nasz scenariusz!
Razem z moim zespołem w Predica pracujemy nad projektem rozwoju nowoczesnej aplikacji bankowej dla jednego z największych banków w Europie. Jest to ogromne przedsięwzięcie, wymagające zebrania danych z różnych kont bankowych w jednej aplikacji.
Celem jest stworzenie aplikacji dostępnej przez przeglądarkę i na smartfonie, która umożliwi użytkownikom logowanie się i przeglądanie historii transakcji z różnych, połączonych kont bankowych, dzięki czemu będą mogli planować swoje budżety na najbliższe miesiące.
Projekt interfejsu naszej aplikacji bankowej
Elementy naszej aplikacji bankowej
Microsoft Azure dostarcza wiele przydatnych narzędzi, które sprawiają, że aplikacja działa sprawnie i skutecznie. Oto niektóre z usług, które wykorzystaliśmy do jej budowy, wraz z krótkimi opisami, do czego służą.
Azure Container Registry
Docker staje się coraz bardziej popularny. Aplikacje budowane w kontenerach możemy w łatwy sposób przenosić wraz ze wszystkimi zależnościami. Azure Container Registry przechowuje i zarządza prywatnymi obrazami kontenerów Docker. Zapewnia to łatwą integrację z opisanym poniżej Azure Kubernetes Service.
Azure Kubernetes Service
Kubernetes jest usługą, która odpowiada za automatyzację wdrażania, skalowanie i zarządzanie skonteneryzowanymi aplikacjami w chmurze. Może być pomocna, gdy używamy architektury opartej na mikrousługach, tak jak my w naszym projekcie.
W Azure, Kubernetes jest dostępny jako Azure Kubernetes Service (AKS). Pomaga on w budowaniu wysokodostępnych mikrousług w chmurze Azure, np. mikrousług back-endowych.
Warto zauważyć, że w przypadku awarii aplikacji działającej w kontenerze Docker, Kubernetes automatycznie uruchomi nową instancję.
Azure Service Bus
Azure Service Bus jest najczęściej używany do oddzielania aplikacji od usług. Jest to efektywna i bezpieczna platforma do asynchronicznego przesyłania danych. Może być wykorzystywany do wymiany informacji pomiędzy różnymi usługami. Dane są przesyłane pomiędzy aplikacjami w formacie binarnym, w pliku, który może zawierać formaty JSON, XML lub po prostu tekst.
Azure API Management
Jest to bramka do komunikacji z wewnętrznymi mikrousługami (API), oparta na chmurze. Dzięki niej możliwe jest ustawienie polityk przychodzących i wychodzących, aby buforować dane odpowiedzi lub weryfikować tokeny autoryzacyjne.
Azure Application Insights
Kompleksowe rozwiązania wymagają monitorowania. Korzystając z Azure Application Insights możemy analizować i wykrywać anomalie w naszych rozwiązaniach, co pozwala szybko reagować i rozwiązywać problemy.
Aplikacje internetowe
Azure Web Apps (aplikacje internetowe) to usługa dedykowana do hostingu aplikacji internetowych, REST API oraz back endów mobilnych – doskonale współpracuje z ASP.NET, ASP.NET Core, Java czy Angular. Jest to usługa wysokodostępna na całym świecie, a także łatwo skalowalna.
Azure Notification Hub
Powiadomienia push są obecnie częścią każdej aplikacji mobilnej. Azure Notification Hub umożliwia wysyłanie powiadomień na dowolne platformy takie jak iOS, Android czy Windows. Możemy wykorzystać Azure Notification Hub do wysyłania powiadomień związanych np. z aktualizacjami budżetów.
Azure Active Directory B2C
Uwierzytelnienie i autoryzacja użytkownika są kluczowymi aspektami bezpieczeństwa. Dostęp do jakiegokolwiek rozwiązania powinien być możliwy tylko dla zweryfikowanego użytkownika. Zarządzanie kontami użytkowników, resetowanie haseł czy edycja profili bywają trudne. To właśnie tutaj pomaga nam Azure Active Directory B2C, znacznie upraszczając ten proces.
Azure SQL Database
Poufne dane, np. finansowe, wymagają bezpiecznego przechowywania. Relacyjna baza danych Azure SQL była dla nas właściwym wyborem. Możemy też dodać zaawansowaną ochronę przed zagrożeniami w celu wykrycia i sklasyfikowania danych wrażliwych, zarządzania lukami w bazie danych oraz wykrywania anomalii. Azure SQL umożliwia też replikację danych, co zwiększa odporność aplikacji na problemy z dostępnością.
Azure Storage Account
W niektórych przypadkach użytkownicy powinni mieć możliwość przesyłania plików, które powinny być potem przechowywane w bezpiecznym miejscu. Może nam w tym pomóc usługa Azure Storage Account, która szyfruje wszystkie przesyłane do niej dane.
Azure Functions
Azure Functions są bardzo przydatne przy automatyzacji konkretnych zadań, np. wywołanie powiadomienia, gdy plik w Azure Storage Account zostanie usunięty. Usługę można też zintegrować z Azure Active Directory B2C, aby bezpiecznie pozyskać potrzebne dane użytkownika z zewnętrznej bazy podczas procesu logowania.
Azure Key Vault
Azure Key Vault to bezpieczna pamięć masowa w chmurze, w której przechowywane są poufne dane uwierzytelniajace.
Jak połączyliśmy te elementy?
Powyższe usługi to główne elementy naszej aplikacji. Na samym początku przeprowadziliśmy dogłębną analizę wszystkich funkcjonalności, które powinny być uwzględnione w planowaniu interfejsu użytkownika, zarówno w aplikacji internetowej, jak i mobilnej. Zdefiniowaliśmy i wdrożyliśmy kilkanaście różnych mikrousług, m.in. dla planowania budżetu, obsługi użytkownika i zapewnienia wsparcia.
Korzystaliśmy z Azure Kubernetes Service oraz Azure Container Registry, aby zarządzać mikrousługami i wdrażać je. Pozwoliło nam to również zbudować solidny i wysoce niezawodny back-end. Mikrousługi są ukryte za Azure API Management, która jest bramą dostępu do back-endowego API.
Sam dostęp do aplikacji jest zabezpieczony przez Azure Active Directory B2C, więc tylko uwierzytelnieni użytkownicy mogą korzystać z jej funkcjonalności.
Aplikację internetową rozwijamy przy użyciu Angular i hostujemy ją w usłudze Azure Web App. Aplikacje mobilne tworzone są natywnie przy użyciu Java (Android) i Swift (iOS).
Ważne informacje związane z danymi użytkownika będą bezpiecznie przechowywane w bazie danych Azure SQL. Na koniec, wszystkie pliki, które użytkownik wyśle do aplikacji, zostaną przesłane do Azure Blob Storage.
Poniżej znajduje się diagram architektury. Jak widać, rozwiązanie jest dość obszerne.
Architektura naszej aplikacji bankowej
Stworzenie takiego produktu zajmuje trochę czasu, ale po jego ukończeniu zapewni on użytkownikom wiele użytecznych funkcji i ułatwi im bezpieczne i wygodne zarządzanie swoimi finansami.
Nie zapomnijmy o dobrych praktykach DevOps!
Jak wspomniałem powyżej, takie wielowymiarowe rozwiązanie wymaga sprawnego zarządzania dodawaniem nowych funkcji i ich wdrażaniem. To właśnie tutaj pojawiają się praktyki DevOps. Nie będę tutaj omawiał wszystkich z nich, ale zachęcam do przeczytania mojej serii o DevOps, zaczynając od tego artykułu.
Należy tu wspomnieć o tym, że posiadanie w rozwiązaniu więcej niż 10 mikrousług wymaga sprawnego procesu wdrożenia. W tym celu stosujemy Azure DevOps. Jest to narzędzie, które zapewnia programistom usługi wspierające zespoły w planowaniu pracy, współpracy przy tworzeniu kodu oraz budowaniu i wdrażaniu aplikacji.
Jeśli chcesz dowiedzieć się więcej o aplikacji lub o DevOps w ogóle, po prostu skontaktuj się ze mną, a chętnie odpowiem na wszystkie pytania!
MakeAnImpact - miej wpływ!
Artykuł powstał w ramach akcji #MakeAnImpact promującej projekty IT, które mają wpływ na otaczający nas świat. Skierowana jest do do społeczności IT.