Service Fabric-Anwendungs- und -DienstsicherheitService Fabric application and service security

Eine Microservicesarchitektur kann zahlreiche Vorteile mit sich bringen.A microservices architecture can bring many benefits. Die Verwaltung der Sicherheit von Microservices ist jedoch eine Herausforderung und unterscheidet sich von der Verwaltung traditioneller monolithischer Anwendungen.Managing the security of microservices, however, is a challenge and different than managing traditional monolithic applications security.

Bei einer monolithischen Anwendung wird die Anwendung normalerweise auf mindestens einem Server in einem Netzwerk ausgeführt, und es ist einfacher, die verfügbar gemachten Ports und APIs sowie die IP-Adresse zu identifizieren.With a monolith, the application is typically running on one or more servers within a network and it's easier to identify the exposed ports and APIs and IP address. Es gibt häufig einen Umkreis oder eine Begrenzung, und es muss eine Datenbank geschützt werden.There is often one perimeter or boundary and one database to protect. Wenn dieses System aufgrund einer Sicherheitsverletzung oder eines Angriffs kompromittiert wird, ist es wahrscheinlich, dass dem Angreifer innerhalb des Systems alle Informationen zur Verfügung stehen.If that system is compromised because of a security breach or attack, it is likely that everything within the system will be available to the attacker. Bei Microservices ist das System komplexer.With microservices, the system is more complex. Die Dienste sind dezentralisiert und auf viele Hosts verteilt und migrieren von Host zu Host.Services are decentralized and distributed across many hosts and migrate from host to host. Mit der ordnungsgemäßen Sicherheit schränken Sie die Berechtigungen ein, die ein Angreifer erhalten kann, sowie die Datenmenge, die in einem einzigen Angriff verfügbar ist, wenn ein Dienst verletzt wird.With proper security, you limit the privileges an attacker can get and the amount of data available in a single attack by breaching one service. Die Kommunikation erfolgt nicht intern, sondern über ein Netzwerk, und es sind viele verfügbar gemachte Ports und Interaktionen zwischen den Diensten vorhanden.Communication is not internal, but happens over a network, and there are many exposed ports and interactions between services. Zu wissen, was diese Dienstinteraktionen sind und wann sie stattfinden, ist entscheidend für die Anwendungssicherheit.Knowing what these service interactions are and when they happen is crucial to your application security.

Dieser Artikel ist kein Leitfaden für die Sicherheit von Microservices (es sind viele solcher Ressourcen online verfügbar), sondern er beschreibt, wie verschiedene Aspekte der Sicherheit in Service Fabric erreicht werden können.This article is not a guide to microservices security, there are many such resources available online, but describes how different aspects of security can be accomplished in Service Fabric.

Authentifizierung und AutorisierungAuthentication and authorization

Es ist häufig erforderlich, die Verwendung von Ressourcen und APIs, die von einem Dienst verfügbar gemacht werden, auf bestimmte vertrauenswürdige Benutzer oder Clients einzuschränken.It is often necessary for resources and APIs exposed by a service to be limited to certain trusted users or clients. Authentifizierung ist der Vorgang, bei dem die Identität eines Benutzers zuverlässig ermittelt wird.Authentication is the process of reliably ascertaining a user’s identity. Autorisierung ist der Vorgang, durch den APIs oder Dienste einigen authentifizierten Benutzern, aber nicht allen zur Verfügung gestellt werden.Authorization is the process that makes APIs or services available to some authenticated users but not others.

AuthenticationAuthentication

Der erste Schritt, Entscheidungen zur Vertrauenswürdigkeit auf API-Ebene zu treffen, ist die Authentifizierung.The first step to making API-level trust decisions is authentication. Authentifizierung ist der Vorgang, bei dem die Identität eines Benutzers zuverlässig ermittelt wird.Authentication is the process of reliably ascertaining a user’s identity. Die Authentifizierung wird in Microserviceszenarien in der Regel zentral vorgenommen.In microservice scenarios, authentication is typically handled centrally. Wenn Sie ein API-Gateway verwenden, können Sie die Authentifizierung an das Gateway auslagern.If you are using an API Gateway, you can offload authentication to the gateway. Wenn Sie diesen Ansatz verwenden, stellen Sie sicher, dass die einzelnen Dienste nicht direkt (ohne das API-Gateway) erreicht werden können, es sei denn, es ist zusätzliche Sicherheit für die Authentifizierung von Nachrichten vorhanden, und zwar unabhängig davon, ob sie vom Gateway stammen oder nicht.If you use this approach, make sure that the individual services cannot be reached directly (without the API Gateway) unless additional security is in place to authenticate messages whether they come from the gateway or not.

Wenn auf Dienste direkt zugegriffen werden kann, kann ein Authentifizierungsdienst wie Azure Active Directory oder ein dedizierter Authentifizierungsmicroservice verwendet werden, der als Sicherheitstokendienst (Security Token Service, STS) fungiert, um Benutzer zu authentifizieren.If services can be accessed directly, an authentication service like Azure Active Directory or a dedicated authentication microservice acting as a security token service (STS) can be used to authenticate users. Vertrauensentscheidungen werden zwischen Diensten mit Sicherheitstoken oder Cookies geteilt.Trust decisions are shared between services with security tokens or cookies.

Für ASP.NET Core ist der primäre Mechanismus für die Authentifizierung von Benutzern das ASP.NET Core Identity-Mitgliedschaftssystem.For ASP.NET Core, the primary mechanism for authenticating users is the ASP.NET Core Identity membership system. ASP.NET Core Identity speichert Benutzerinformationen (einschließlich Anmeldeinformationen, Rollen und Ansprüche) in einem vom Entwickler konfigurierten Datenspeicher.ASP.NET Core Identity stores user information (including sign-in information, roles, and claims) in a data store configured by the developer. ASP.NET Core Identity unterstützt zweistufige Authentifizierung.ASP.NET Core Identity supports two-factor authentication. Externe Authentifizierungsanbieter werden ebenfalls unterstützt, sodass Benutzer sich mit vorhandenen Authentifizierungsverfahren von Anbietern wie Microsoft, Google, Facebook oder Twitter anmelden können.External authentication providers are also supported, so users can sign in using existing authentication processes from providers like Microsoft, Google, Facebook, or Twitter.

AuthorizationAuthorization

Nach der Authentifizierung müssen Dienste den Benutzerzugriff autorisieren oder ermitteln, welche Aktionen ein Benutzer ausführen kann.After authentication, services need to authorize user access or determine what a user is able to do. Dieser Prozess ermöglicht es einem Dienst, APIs für einige authentifizierte Benutzer zur Verfügung zu stellen, aber nicht für alle.This process allows a service to make APIs available to some authenticated users, but not to all. Die Autorisierung ist orthogonal und unabhängig von der Authentifizierung, d.h. der Feststellung, wer ein Benutzer ist.Authorization is orthogonal and independent from authentication, which is the process of ascertaining who a user is. Die Authentifizierung kann mindestens eine Identität für den aktuellen Benutzer erstellen.Authentication may create one or more identities for the current user.

ASP.NET Core-Autorisierung kann basierend auf den Rollen der Benutzer oder auf benutzerdefinierten Richtlinien ausgeführt werden, die die Überprüfung von Ansprüchen oder andere Heuristiken beinhalten können.ASP.NET Core authorization can be done based on users’ roles or based on custom policy, which might include inspecting claims or other heuristics.

Einschränken und Sichern des Zugriffs mithilfe eines API-GatewaysRestrict and secure access using an API gateway

Cloudanwendungen benötigen normalerweise ein Front-End-Gateway, um für Benutzer, Geräte oder andere Anwendungen einen zentralen Eingangspunkt bereitzustellen.Cloud applications typically need a front-end gateway to provide a single point of ingress for users, devices, or other applications. Ein API-Gateway befindet sich zwischen Clients und Diensten und ist der Einstiegspunkt zu allen Diensten, die Ihre Anwendung bereitstellt.An API gateway sits between clients and services and is the entry point to all the services that your application is providing. Es fungiert als Reverseproxy und leitet Anforderungen von Clients an Dienste weiter.It acts as a reverse proxy, routing requests from clients to services. Darüber hinaus kann es verschiedene übergreifende Aufgaben wie Authentifizierung und Autorisierung, SSL-Terminierung und Ratenbegrenzung übernehmen.It may also perform various cross-cutting tasks such as authentication and authorization, SSL termination, and rate limiting. Wenn Sie kein Gateway bereitstellen, müssen Clients Anforderungen direkt an Front-End-Dienste senden.If you don't deploy a gateway, clients must send requests directly to front-end services.

In Service Fabric kann ein Gateway ein beliebiger zustandsloser Dienst sein (etwa eine ASP.NET Core-Anwendung) oder ein anderer Dienst, der für den Eingang von Datenverkehr ausgelegt ist (etwa Traefik, Event Hubs, IoT Hub oder Azure API Management).In Service Fabric, a gateway can be any stateless service such as an ASP.NET Core application, or another service designed for traffic ingress, such as Traefik, Event Hubs, IoT Hub, or Azure API Management.

API Management ist direkt in Service Fabric integriert, sodass Sie APIs mit einem umfassenden Satz von Routingregeln für Ihre Service Fabric-Back-End-Dienste veröffentlichen können.API Management integrates directly with Service Fabric, allowing you to publish APIs with a rich set of routing rules to your back-end Service Fabric services. Sie können den Zugriff auf Back-End-Dienste sichern, DOS-Angriffe durch Drosselung verhindern oder API-Schlüssel, JWT-Token, Zertifikate und andere Anmeldeinformationen überprüfen.You can secure access to backend services, prevent DOS attacks by using throttling, or verify API keys, JWT tokens, certificates, and other credentials. Weitere Informationen finden Sie unter Service Fabric mit Azure API Management: Übersicht.To learn more, read Service Fabric with Azure API Management overview.

Verwalten von AnwendungsgeheimnissenManage application secrets

Geheimnisse beinhalten jegliche Art von vertraulichen Informationen (z.B. Speicherverbindungszeichenfolgen, Kennwörter oder andere Werte, die nicht als Nur-Text verarbeitet werden sollen).Secrets can be any sensitive information, such as storage connection strings, passwords, or other values that should not be handled in plain text. In diesem Artikel wird Azure Key Vault für die Verwaltung von Schlüsseln und Geheimnissen verwendet.This article uses Azure Key Vault to manage keys and secrets. Die Verwendung von Geheimnissen in einer Anwendung ist jedoch cloudplattformunabhängig, sodass Anwendungen auf einem Cluster bereitgestellt werden können, der an einem beliebigen Standort gehostet wird.However, using secrets in an application is cloud platform-agnostic to allow applications to be deployed to a cluster hosted anywhere.

Es wird empfohlen, Dienstkonfigurationseinstellungen über Dienstkonfigurationspakete zu verwalten.The recommended way to manage service configuration settings is through service configuration packages. Konfigurationspakete verfügen über eine Versionsangabe und können über parallele Upgrades aktualisiert werden. Außerdem kann die Integrität überprüft und ein automatischer Rollback durchgeführt werden.Configuration packages are versioned and updatable through managed rolling upgrades with health-validation and auto rollback. Dies wird der globalen Konfiguration vorgezogen, da die Wahrscheinlichkeit eines globalen Dienstausfalls verringert wird.This is preferred to global configuration as it reduces the chances of a global service outage. Verschlüsselte Geheimnisse stellen keine Ausnahme dar.Encrypted secrets are no exception. Service Fabric verfügt über integrierte Features zum Verschlüsseln und Entschlüsseln von Werten in der Konfigurationspaketdatei „Settings.xml“ mithilfe der Zertifikatverschlüsselung.Service Fabric has built-in features for encrypting and decrypting values in a configuration package Settings.xml file using certificate encryption.

Das Diagramm unten zeigt den grundlegenden Ablauf bei der Verwaltung von Geheimnissen in einer Service Fabric-Anwendung:The following diagram illustrates the basic flow for secret management in a Service Fabric application:

Übersicht über die Verwaltung von Geheimnissen

Dieser Vorgang besteht im Wesentlichen aus vier Schritten:There are four main steps in this flow:

  1. Abrufen eines DatenverschlüsselungszertifikatsObtain a data encipherment certificate.
  2. Installieren des Zertifikats in Ihrem ClusterInstall the certificate in your cluster.
  3. Verschlüsseln von Geheimnissen bei der Bereitstellung einer Anwendung mit dem Zertifikat und Einfügen dieser Geheimnisse in die Konfigurationsdatei „Settings.xml“ des DienstsEncrypt secret values when deploying an application with the certificate and inject them into a service's Settings.xml configuration file.
  4. Lesen der verschlüsselten Werte aus der Datei „Settings.xml“, indem diese mit demselben Verschlüsselungszertifikat entschlüsselt werdenRead encrypted values out of Settings.xml by decrypting with the same encipherment certificate.

Azure Key Vault wird hier als sicherer Speicherort für Zertifikate sowie zum Installieren von Zertifikaten auf Service Fabric-Clustern in Azure verwendet.Azure Key Vault is used here as a safe storage location for certificates and as a way to get certificates installed on Service Fabric clusters in Azure. Wenn die Bereitstellung nicht in Azure erfolgt, muss Key Vault nicht zum Verwalten von Geheimnissen in Service Fabric-Anwendungen eingesetzt werden.If you are not deploying to Azure, you do not need to use Key Vault to manage secrets in Service Fabric applications.

Ein Beispiel finden Sie unter Verwalten von Anwendungsgeheimnissen.For an example, see Manage application secrets.

Sichern der HostumgebungSecure the hosting environment

Durch Verwenden von Azure Service Fabric können Sie Anwendungen sichern, die im Cluster unter verschiedenen Benutzerkonten ausgeführt werden.By using Azure Service Fabric, you can secure applications that are running in the cluster under different user accounts. Mit Service Fabric werden auch die Ressourcen gesichert, die von Anwendungen zum Zeitpunkt der Bereitstellung in den Benutzerkonten genutzt werden, z.B. Dateien, Verzeichnisse und Zertifikate.Service Fabric also helps secure the resources that are used by applications at the time of deployment under the user accounts--for example, files, directories, and certificates. So lässt sich erreichen, dass ausgeführte Anwendungen auch in einer gemeinsamen gehosteten Umgebung sicher voneinander abgegrenzt sind.This makes running applications, even in a shared hosted environment, more secure from one another.

Das Anwendungsmanifest deklariert die Sicherheitsprinzipale (Benutzer und Gruppen), die für die Ausführung der Dienste und das Sichern von Ressourcen erforderlich sind.The application manifest declares the security principals (users and groups) required run the service(s) and secure resources. Auf diese Sicherheitsprinzipale wird in Richtlinien verwiesen, z.B. in den RunAs-, Endpunktbindungs-, Paketfreigabe- oder Sicherheitszugriffsrichtlinien.These security principals are referenced in policies, for example the run-as, endpoint binding, package sharing, or security access policies. Richtlinien werden dann im Abschnitt ServiceManifestImport des Anwendungsmanifests auf Dienstressourcen angewendet.Policies are then applied to service resources in the ServiceManifestImport section of the application manifest.

Beim Deklarieren von Prinzipalen können Sie auch Benutzergruppen definieren und erstellen, sodass jeder Gruppe ein oder mehrere Benutzer hinzugefügt werden können, die gemeinsam verwaltet werden sollen.When declaring principals, you can also define and create user groups so that one or more users can be added to each group to be managed together. Dies ist nützlich, wenn es für verschiedene Diensteinstiegspunkte mehrere Benutzer gibt, die auf Gruppenebene bestimmte allgemeine Berechtigungen benötigen.This is useful when there are multiple users for different service entry points and they need to have certain common privileges that are available at the group level.

Standardmäßig werden Service Fabric-Anwendungen unter dem Konto ausgeführt, unter dem der Prozess „Fabric.exe“ ausgeführt wird.By default, Service Fabric applications run under the account that the Fabric.exe process runs under. Darüber hinaus bietet Service Fabric die Möglichkeit zur Ausführung von Anwendungen in einem lokalen Benutzer- oder Systemkonto, das im Manifest der Anwendung angegeben wird.Service Fabric also provides the capability to run applications under a local user account or local system account, which is specified within the application manifest. Weitere Informationen finden Sie unter Ausführen eines Diensts als lokales Benutzerkonto oder lokales Systemkonto.For more information, see Run a service as a local user account or local system account. Sie können auch ein Dienststartskript als lokaler Benutzer oder Systemkonto ausführen.You can also Run a service startup script as a local user or system account.

Wenn Sie Service Fabric auf einem eigenständigen Windows-Cluster ausführen, können Sie einen Dienst unter Active Directory-Domänenkonten oder gruppenverwalteten Dienstkonten ausführen.When you're running Service Fabric on a Windows standalone cluster, you can run a service under Active Directory domain accounts or group managed service accounts.

Sichere ContainerSecure containers

Service Fabric bietet einen Mechanismus, über den Dienste innerhalb eines Containers auf ein Zertifikat zugreifen können, das auf den Knoten eines Windows- oder Linux-Clusters (ab Version 5.7) installiert ist.Service Fabric provides a mechanism for services inside a container to access a certificate that is installed on the nodes in a Windows or Linux cluster (version 5.7 or higher). Dieses PFX-Zertifikat kann verwendet werden, um die Anwendung oder den Dienst zu authentifizieren oder die Kommunikation mit anderen Diensten zu schützen.This PFX certificate can be used for authenticating the application or service or secure communication with other services. Weitere Informationen finden Sie unter Importieren eines Zertifikats in einen Container.For more information, see Import a certificate into a container.

Für Windows-Container unterstützt Service Fabric zudem auch gruppenverwaltete Dienstkonten (group Managed Service Accounts, gMSAs).In addition, Service Fabric also supports gMSA (group Managed Service Accounts) for Windows containers. Weitere Informationen finden Sie unter Einrichten von gMSA für Windows-Container.For more information, see Set up gMSA for Windows containers.

Sichern der DienstkommunikationSecure service communication

In Service Fabric wird ein Dienst an irgendeinem Ort in einem Service Fabric-Cluster ausgeführt, der sich in der Regel auf mehreren virtuellen Computern befindet.In Service Fabric, a service runs somewhere in a Service Fabric cluster, typically distributed across multiple VMs. Service Fabric bietet mehrere Optionen zum Sichern der Dienstkommunikation.Service Fabric provides several options for securing your service communications.

Sie können HTTPS-Endpunkte in Ihren ASP.NET Core- oder Java-Webdiensten aktivieren.You can enable HTTPS endpoints in your ASP.NET Core or Java web services.

Sie können eine sichere Verbindung zwischen dem Reverseproxy und Diensten herstellen und so einen sicheren End-to-End-Kanal ermöglichen.You can establish secure connection between the reverse proxy and services, thus enabling an end to end secure channel. Die Herstellung einer Verbindung mit sicheren Diensten wird nur unterstützt, wenn der Reverseproxy für das Lauschen von HTTPS konfiguriert ist.Connecting to secure services is supported only when reverse proxy is configured to listen on HTTPS. Informationen zum Konfigurieren des Reverseproxys finden Sie unter Reverseproxy in Azure Service Fabric.For information on configuring the reverse proxy, read Reverse proxy in Azure Service Fabric. Unter Herstellen einer Verbindung mit einem sicheren Dienst wird beschrieben, wie eine sichere Verbindung zwischen dem Reverseproxy und Diensten hergestellt wird.Connect to a secure service describes how to establish secure connection between the reverse proxy and services.

Das Reliable Services-Anwendungsframework stellt einige fertige Kommunikationsstapel und Tools bereit, die Sie verwenden können, um die Sicherheit zu verbessern.The Reliable Services application framework provides a few prebuilt communication stacks and tools that you can use to improve security. Erfahren Sie, wie Sie die Sicherheit verbessern können, wenn Sie Dienstremoting (in C# oder Java) oder WCF verwenden.Learn how to improve security when you're using service remoting (in C# or Java) or using WCF.

Verschlüsseln von ruhenden AnwendungsdatenEncrypt application data at rest

Jedem Knotentyp in einem in Azure ausgeführten Service Fabric-Cluster liegt eine VM-Skalierungsgruppe zugrunde.Each node type in a Service Fabric cluster running in Azure is backed by a virtual machine scale set. Mit einer Azure Resource Manager-Vorlage können Sie Datenträger an die Skalierungsgruppen anfügen, aus denen sich der Service Fabric-Cluster zusammensetzt.Using an Azure Resource Manager template, you can attach data disks to the scale set(s) that make up the Service Fabric cluster. Wenn Ihre Dienste Daten auf einem angefügten Datenträger speichern, können Sie diese Datenträger verschlüsseln, um Ihre Anwendungsdaten zu schützen.If your services save data to an attached data disk, you can encrypt those data disks to protect your application data.

Nächste SchritteNext steps