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 innym rozwiązaniem niż zarządzanie 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 jeden obwód lub granica 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 ramach pojedynczego 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 po zabezpieczeniach 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 określania 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.

Authentication

Pierwszym krokiem do podejmowania decyzji dotyczących zaufania na poziomie interfejsu API jest uwierzytelnianie. Uwierzytelnianie to proces niezawodnego określania 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 będą 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 Azure Active Directory 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 przez usługi za pomocą tokenów zabezpieczających lub plików 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, role i oświadczenia) 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, czyli procesu 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, routing żądań od klientów do usług. Może również wykonywać różne zadania przekrojowe, 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 dla ruchu przychodzącego, takich jak Traefik, Event Hubs, IoT Hub lub Azure API Management.

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 SYSTEMU 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 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ń stopniowych z walidacją kondycji i automatycznym wycofywaniem. Jest to preferowane dla 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 wpisami tajnymi w aplikacji usługi Service Fabric:

Omówienie zarządzania wpisami tajnymi

Ten przepływ obejmuje cztery główne kroki:

  1. Uzyskiwanie certyfikatu szyfrowania danych.
  2. Zainstaluj certyfikat w klastrze.
  3. Szyfruj wartości wpisów tajnych podczas wdrażania aplikacji przy użyciu certyfikatu i wstrzykiwania ich do pliku konfiguracji Settings.xml usługi.
  4. Odczytywanie zaszyfrowanych wartości z Settings.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 na zainstalowanie certyfikatów 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 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 uruchomione w klastrze na różnych kontach użytkowników. Usługa Service Fabric pomaga również zabezpieczyć zasoby 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ązanie punktu końcowego, udostępnianie pakietów lub zasady dostępu do zabezpieczeń. Zasady są następnie 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ć jednego lub więcej użytkowników 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.

W przypadku uruchamiania usługi Service Fabric w klastrze autonomicznym systemu Windows można uruchomić usługę w obszarze Konta domeny usługi Active Directory lub konta 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 usługi zarządzane przez grupę dla kontenerów systemu Windows. Aby uzyskać więcej informacji, zobacz Konfigurowanie konta gMSA dla kontenerów systemu Windows.

Bezpieczna komunikacja z usługami

W usłudze Service Fabric usługa jest uruchamiana gdzieś w klastrze usługi Service Fabric, zwykle dystrybuowana na wielu maszynach wirtualnych. 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żliwia zakończenie bezpiecznego kanału. 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 zwrotnego serwera proxy, przeczytaj zwrotny serwer proxy w usłudze Azure Service Fabric. Nawiązywanie połączenia z bezpieczną usługą opisuje sposób ustanawiania bezpiecznego połączenia między zwrotnym serwerem proxy i usługami.

Platforma aplikacji Reliable Services udostępnia kilka wstępnie utworzonych stosów komunikacji 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 programu WCF.

Uwzględnianie 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 uruchomionym na platformie Azure jest wspierany 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