Zabezpieczenia aplikacji i usługi Service Fabric

Architektura mikrousług może przynieść wiele korzyści. Zarządzanie zabezpieczeniami mikrousług jest jednak wyzwaniem i różni się od zarządzania tradycyjnymi zabezpieczeniami aplikacji monolitycznych.

W przypadku monolitu aplikacja jest zwykle uruchomiona na co najmniej jednym serwerze w sieci i łatwiej jest zidentyfikować uwidocznione porty i interfejsy API oraz adresy IP. Często istnieje jedna granica lub obwód i jedna baza danych do ochrony. Jeśli ten system zostanie naruszony z powodu naruszenia zabezpieczeń lub ataku, prawdopodobnie wszystko w systemie będzie dostępne dla osoby atakującej. Dzięki mikrousługom system jest bardziej złożony. Usługi są zdecentralizowane i dystrybuowane na wielu hostach i migrowane z hosta do hosta. Dzięki odpowiednim zabezpieczeniom można ograniczyć uprawnienia, które osoba atakująca może uzyskać, oraz ilość danych dostępnych w jednym ataku, naruszając jedną usługę. Komunikacja nie jest wewnętrzna, ale odbywa się za pośrednictwem sieci i istnieje wiele uwidocznionych portów i interakcji między usługami. Znajomość tych interakcji z usługą i ich wystąpienia ma kluczowe znaczenie dla bezpieczeństwa aplikacji.

Ten artykuł nie jest przewodnikiem dotyczącym zabezpieczeń mikrousług, istnieje wiele takich zasobów dostępnych w trybie online, ale opisuje, jak można osiągnąć różne aspekty zabezpieczeń w usłudze Service Fabric.

Uwierzytelnianie i autoryzacja

Często konieczne jest, aby zasoby i interfejsy API uwidocznione przez usługę ograniczały się do określonych zaufanych użytkowników lub klientów. Uwierzytelnianie to proces niezawodnego ustalania tożsamości użytkownika. Autoryzacja to proces, który sprawia, że interfejsy API lub usługi są dostępne dla niektórych uwierzytelnionych użytkowników, ale nie dla innych.

Uwierzytelnianie

Pierwszym krokiem do podejmowania decyzji dotyczących zaufania na poziomie interfejsu API jest uwierzytelnianie. Uwierzytelnianie to proces niezawodnego ustalania tożsamości użytkownika. W scenariuszach mikrousług uwierzytelnianie jest zwykle obsługiwane centralnie. Jeśli używasz bramy interfejsu API, możesz odciążyć uwierzytelnianie do bramy. Jeśli używasz tej metody, upewnij się, że poszczególne usługi nie mogą być dostępne bezpośrednio (bez bramy interfejsu API), chyba że zostaną wprowadzone dodatkowe zabezpieczenia w celu uwierzytelnienia komunikatów niezależnie od tego, czy pochodzą z bramy, czy nie.

Jeśli dostęp do usług można uzyskać bezpośrednio, można użyć usługi uwierzytelniania, takiej jak Microsoft Entra ID lub dedykowanej mikrousługi uwierzytelniania działającej jako usługa tokenu zabezpieczającego (STS) do uwierzytelniania użytkowników. Decyzje dotyczące zaufania są współużytkowane między usługami z tokenami zabezpieczającymi lub plikami cookie.

W przypadku ASP.NET Core podstawowym mechanizmem uwierzytelniania użytkowników jest system członkostwa ASP.NET Core Identity. ASP.NET Core Identity przechowuje informacje o użytkowniku (w tym informacje o logowaniu, rolach i oświadczeniach) w magazynie danych skonfigurowanym przez dewelopera. ASP.NET Core Identity obsługuje uwierzytelnianie dwuskładnikowe. Zewnętrzni dostawcy uwierzytelniania są również obsługiwani, dzięki czemu użytkownicy mogą logować się przy użyciu istniejących procesów uwierzytelniania od dostawców, takich jak Microsoft, Google, Facebook lub Twitter.

Autoryzacja

Po uwierzytelnieniu usługi muszą autoryzować dostęp użytkowników lub określić, co użytkownik może zrobić. Ten proces umożliwia usłudze udostępnianie interfejsów API niektórym uwierzytelnionymi użytkownikom, ale nie wszystkim. Autoryzacja jest ortogonalna i niezależna od uwierzytelniania, co jest procesem ustalania, kim jest użytkownik. Uwierzytelnianie może utworzyć co najmniej jedną tożsamość dla bieżącego użytkownika.

ASP.NET Core autoryzacji można wykonywać na podstawie ról użytkowników lub na podstawie zasad niestandardowych, które mogą obejmować inspekcję oświadczeń lub innych heurystyki.

Ograniczanie i zabezpieczanie dostępu przy użyciu bramy interfejsu API

Aplikacje w chmurze zwykle potrzebują bramy frontonu, aby udostępniać pojedynczy punkt danych przychodzących dla użytkowników, urządzeń lub innych aplikacji. Brama interfejsu API znajduje się między klientami i usługami i jest punktem wejścia do wszystkich usług zapewnianych przez aplikację. Działa jako zwrotny serwer proxy, rozsyłanie żądań od klientów do usług. Może również wykonywać różne zadania krzyżowe, takie jak uwierzytelnianie i autoryzacja, kończenie żądań protokołu TLS i ograniczanie szybkości. Jeśli brama nie zostanie wdrożona, klienci muszą wysyłać żądania bezpośrednio do usług frontonu.

W usłudze Service Fabric brama może być dowolną usługą bezstanową, taką jak aplikacja ASP.NET Core lub inna usługa przeznaczona do ruchu przychodzącego, takich jak Traefik, Event Hubs, IoT Hub lub Azure API Management.

Usługa API Management integruje się bezpośrednio z usługą Service Fabric, umożliwiając publikowanie interfejsów API z bogatym zestawem reguł routingu w usługach zaplecza usługi Service Fabric. Możesz zabezpieczyć dostęp do usług zaplecza, zapobiegać atakom DOS przy użyciu ograniczania przepustowości lub weryfikować klucze interfejsu API, tokeny JWT, certyfikaty i inne poświadczenia. Aby dowiedzieć się więcej, przeczytaj artykuł Service Fabric with Azure API Management overview (Omówienie usługi Service Fabric z usługą Azure API Management).

Zarządzanie wpisami tajnymi aplikacji

Wpisy tajne mogą być informacjami poufnymi, takimi jak parametry połączenia magazynu, hasła lub inne wartości, które nie powinny być obsługiwane w postaci zwykłego tekstu. W tym artykule użyto usługi Azure Key Vault do zarządzania kluczami i wpisami tajnymi. Jednak używanie wpisów tajnych w aplikacji jest niezależne od platformy w chmurze, aby umożliwić wdrażanie aplikacji w klastrze hostowanym w dowolnym miejscu.

Zalecanym sposobem zarządzania ustawieniami konfiguracji usługi jest użycie pakietów konfiguracji usługi. Pakiety konfiguracji są wersjonowane i możliwe do aktualizacji za pośrednictwem zarządzanych uaktualnień stopniowego z walidacją kondycji i automatycznym wycofywaniem. Jest to preferowane do konfiguracji globalnej, ponieważ zmniejsza prawdopodobieństwo awarii usługi globalnej. Zaszyfrowane wpisy tajne nie są wyjątkiem. Usługa Service Fabric ma wbudowane funkcje szyfrowania i odszyfrowywania wartości w pakiecie konfiguracji Ustawienia.xml przy użyciu szyfrowania certyfikatów.

Na poniższym diagramie przedstawiono podstawowy przepływ zarządzania wpisami tajnymi w aplikacji usługi Service Fabric:

secret management overview

W tym przepływie znajdują się cztery główne kroki:

  1. Uzyskaj certyfikat szyfrowania danych.
  2. Zainstaluj certyfikat w klastrze.
  3. Szyfrowanie wartości wpisów tajnych podczas wdrażania aplikacji przy użyciu certyfikatu i wstrzykiwanie ich do pliku konfiguracji Ustawienia.xml usługi.
  4. Odczytywanie zaszyfrowanych wartości z pliku Ustawienia.xml przez odszyfrowywanie przy użyciu tego samego certyfikatu szyfrowania.

Usługa Azure Key Vault jest używana w tym miejscu jako bezpieczna lokalizacja przechowywania certyfikatów i jako sposób pobierania certyfikatów zainstalowanych w klastrach usługi Service Fabric na platformie Azure. Jeśli nie wdrażasz na platformie Azure, nie musisz używać usługi Key Vault do zarządzania wpisami tajnymi w aplikacjach usługi Service Fabric.

Aby zapoznać się z przykładem, zobacz Zarządzanie wpisami tajnymi aplikacji.

Zabezpieczanie środowiska hostingu

Za pomocą usługi Azure Service Fabric można zabezpieczyć aplikacje działające w klastrze na różnych kontach użytkowników. Usługa Service Fabric pomaga również zabezpieczyć zasoby, które są używane przez aplikacje w czasie wdrażania w ramach kont użytkowników — na przykład pliki, katalogi i certyfikaty. Dzięki temu uruchamianie aplikacji, nawet w udostępnionym środowisku hostowanym, jest bezpieczniejsze od siebie.

Manifest aplikacji deklaruje podmioty zabezpieczeń (użytkowników i grupy) wymagane do uruchamiania usług i zabezpieczania zasobów. Do tych podmiotów zabezpieczeń odwołuje się zasady, na przykład zasady uruchamiania jako, powiązania punktu końcowego, udostępniania pakietów lub zasad dostępu do zabezpieczeń. Następnie zasady są stosowane do zasobów usługi w sekcji ServiceManifestImport manifestu aplikacji.

Podczas deklarowania podmiotów zabezpieczeń można również definiować i tworzyć grupy użytkowników, aby można było dodać co najmniej jednego użytkownika do każdej grupy, która ma być zarządzana razem. Jest to przydatne, gdy istnieje wielu użytkowników dla różnych punktów wejścia usługi i muszą mieć pewne wspólne uprawnienia, które są dostępne na poziomie grupy.

Domyślnie aplikacje usługi Service Fabric są uruchamiane na koncie, w ramach którego działa proces Fabric.exe. Usługa Service Fabric zapewnia również możliwość uruchamiania aplikacji w ramach konta użytkownika lokalnego lub lokalnego konta systemowego określonego w manifeście aplikacji. Aby uzyskać więcej informacji, zobacz Uruchamianie usługi jako konta użytkownika lokalnego lub lokalnego konta systemowego. Możesz również uruchomić skrypt uruchamiania usługi jako konto użytkownika lokalnego lub konta systemowego.

Jeśli używasz usługi Service Fabric w autonomicznym klastrze systemu Windows, możesz uruchomić usługę w ramach kont domeny usługi Active Directory lub kont usług zarządzanych przez grupę.

Zabezpieczanie kontenerów

Usługa Service Fabric udostępnia mechanizm usług wewnątrz kontenera w celu uzyskania dostępu do certyfikatu zainstalowanego w węzłach w klastrze systemu Windows lub Linux (wersja 5.7 lub nowsza). Ten certyfikat PFX może służyć do uwierzytelniania aplikacji lub usługi lub bezpiecznej komunikacji z innymi usługami. Aby uzyskać więcej informacji, zobacz Importowanie certyfikatu do kontenera.

Ponadto usługa Service Fabric obsługuje również konta gMSA (konta usługi zarządzane przez grupę) dla kontenerów systemu Windows. Aby uzyskać więcej informacji, zobacz Konfigurowanie usługi gMSA dla kontenerów systemu Windows.

Bezpieczna komunikacja z usługą

W usłudze Service Fabric usługa działa gdzieś w klastrze usługi Service Fabric, zwykle dystrybuowana między wieloma maszynami wirtualnymi. Usługa Service Fabric oferuje kilka opcji zabezpieczania komunikacji z usługą.

Punkty końcowe HTTPS można włączyć w usługach internetowych ASP.NET Core lub Java .

Możesz ustanowić bezpieczne połączenie między zwrotnym serwerem proxy i usługami, co umożliwi kompleksowe bezpieczne kanał. Połączenie zabezpieczanie usług jest obsługiwane tylko wtedy, gdy zwrotny serwer proxy jest skonfigurowany do nasłuchiwania przy użyciu protokołu HTTPS. Aby uzyskać informacje na temat konfigurowania zwrotnego serwera proxy, przeczytaj zwrotny serwer proxy w usłudze Azure Service Fabric. Połączenie do bezpiecznej usługi opisuje sposób nawiązywania bezpiecznego połączenia między zwrotnym serwerem proxy i usługami.

Struktura aplikacji Reliable Services udostępnia kilka wstępnie utworzonych stosów komunikacyjnych i narzędzi, których można użyć do poprawy bezpieczeństwa. Dowiedz się, jak poprawić bezpieczeństwo podczas korzystania z komunikacji wirtualnej usługi (w języku C# lub Java) lub przy użyciu usługi WCF.

Dołączanie certyfikatu punktu końcowego w aplikacjach usługi Service Fabric

Aby skonfigurować certyfikat punktu końcowego aplikacji, dołącz certyfikat, dodając element EndpointCertificate wraz z elementem User dla konta głównego do manifestu aplikacji. Domyślnie główne konto to NetworkService. Zapewni to zarządzanie listą ACL klucza prywatnego certyfikatu aplikacji dla podanego podmiotu zabezpieczeń.

<ApplicationManifest … >
  ...
  <Principals>
    <Users>
      <User Name="Service1" AccountType="NetworkService" />
    </Users>
  </Principals>
  <Certificates>
    <EndpointCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbprint]"/>
  </Certificates>
</ApplicationManifest>

Szyfrowanie danych aplikacji magazynowanych

Każdy typ węzła w klastrze usługi Service Fabric uruchomiony na platformie Azure jest obsługiwany przez zestaw skalowania maszyn wirtualnych. Za pomocą szablonu usługi Azure Resource Manager możesz dołączać dyski z danymi do zestawów skalowania tworzących klaster usługi Service Fabric. Jeśli usługi zapisują dane na dołączonym dysku danych, możesz zaszyfrować te dyski danych, aby chronić dane aplikacji.

Następne kroki