Udostępnij za pośrednictwem


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 przekazać uwierzytelnianie na bramę. 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 platformy ASP.NET Core podstawowym mechanizmem uwierzytelniania użytkowników jest system członkostwa w 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 X.

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.

Autoryzacja w ASP.NET Core może być realizowana na podstawie ról użytkowników lub zasad niestandardowych, które mogą obejmować inspekcję roszczeń lub innych heurystyk.

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

Aplikacje w chmurze zazwyczaj potrzebują przedniej bramy, aby zapewnić pojedynczy punkt wejściowy 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 serwer proxy odwrócony, rozsyłając żądania 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 nie wdrożysz bramy, klienci muszą wysyłać żądania bezpośrednio do usług front-endowych.

W usłudze Service Fabric brama może być dowolną usługą bezstanową, taką jak aplikacja ASP.NET Core lub inna usługa przeznaczona dla 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 tajnymi danymi aplikacji

Tajne dane mogą być dowolnymi poufnymi informacjami, takimi jak ciągi połączeń z magazynem, hasła lub inne wartości, które nie powinny być przechowywane 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 tajnych danych w aplikacji jest niezależne od platformy chmurowej, co umożliwia wdrażanie aplikacji na klaster hostowany 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 stopniowych uaktualnień z walidacją stanu systemu 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 Settings.xml pliku przy użyciu szyfrowania certyfikatu.

Na poniższym diagramie przedstawiono podstawowy przepływ zarządzania tajnymi informacjami w aplikacji Service Fabric.

Omówienie zarządzania tajemnicami

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

  1. Uzyskaj certyfikat szyfrowania danych.
  2. Zainstaluj certyfikat w klastrze.
  3. Szyfruj wartości tajne podczas wdrażania aplikacji przy użyciu certyfikatu i wstrzyknij je do pliku konfiguracji Settings.xml usługi.
  4. Odczyt zaszyfrowanych wartości z Settings.xml poprzez odszyfrowanie za pomocą 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ć Key Vault do zarządzania sekretami w aplikacjach Service Fabric.

Aby zapoznać się z przykładem, zobacz Zarządzanie tajemnicami 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łują się zasady, takie jak uruchamianie jako inna tożsamość, powiązanie punktu końcowego, udostępnianie pakietów lub dostęp do zabezpieczeń. Następnie zasady są stosowane do zasobów usługi w sekcji ServiceManifestImport manifestu aplikacji.

Podczas deklarowania głównych elementów, można również definiować i tworzyć grupy użytkowników, aby każda grupa mogła być zarządzana razem, dodając do niej co najmniej jednego użytkownika. 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ę.

Bezpieczne kontenery

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 usługowa

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 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 a usługami, co umożliwi kompleksowy bezpieczny kanał. Nawiązywanie połączenia z bezpiecznymi usługami 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 reverse proxy, przeczytaj Reverse Proxy w usłudze Azure Service Fabric. Nawiązywanie połączenia z bezpieczną usługą 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 ze zdalnej komunikacji usługowej (w języku C# lub Java) lub przy użyciu 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 głównego podmiotu.

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

Szyfrowanie danych aplikacji w spoczynku

Każdy typ węzła w klastrze usługi Service Fabric uruchomionym na platformie Azure jest wspierany przez zestaw skalowania maszyn wirtualnych. Za pomocą szablonu usługi Azure Resource Manager można dołączać dyski danych 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.

Dalsze kroki