Безопасность приложений и служб Service FabricService Fabric application and service security

Архитектура микрослужб может обеспечить множество преимуществ.A microservices architecture can bring many benefits. Тем не менее управление безопасностью микрослужб является непростой задачей и отличается от управления безопасностью традиционных неделимых приложений.Managing the security of microservices, however, is a challenge and different than managing traditional monolithic applications security.

Неделимое приложение, как правило, выполняется на одном или нескольких серверах в сети, и для него проще определить открытые порты, интерфейсы API и IP-адрес.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. Обычно имеется один периметр или граница и одна база данных, которую требуется защитить.There is often one perimeter or boundary and one database to protect. В случае компрометации такой системы из-за бреши в системе безопасности или атаки вполне вероятно, что все данные в системе будут доступны злоумышленнику.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. При использовании микрослужб система усложняется.With microservices, the system is more complex. Службы децентрализованы и распределены между несколькими узлами. Они также могут перемещаться с одного узла на другой.Services are decentralized and distributed across many hosts and migrate from host to host. При правильной системе безопасности ограничиваются как возможности злоумышленника для получения привилегий, так и объем данных, доступных для отдельной атаки, нарушающей безопасность одной службы.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. Обмен данными не является внутренним, но осуществляется по сети, и между службами существует много открытых портов и операций взаимодействия.Communication is not internal, but happens over a network, and there are many exposed ports and interactions between services. Знать, как именно и когда взаимодействуют службы, крайне важно для безопасности приложений.Knowing what these service interactions are and when they happen is crucial to your application security.

Эта статья не является руководством по безопасности микрослужбами, в Интернете представлено достаточно таких материалов. В ней описываются различные аспекты безопасности, реализуемые в Service Fabric.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.

Аутентификация и авторизацияAuthentication and authorization

Часто возникает необходимость ограничить доступ к ресурсам и интерфейсам API службы, предоставив его определенным доверенным пользователям или клиентам.It is often necessary for resources and APIs exposed by a service to be limited to certain trusted users or clients. Аутентификация — это процесс надежной проверки подлинности пользователя.Authentication is the process of reliably ascertaining a user’s identity. Авторизация — это процесс, который позволяет предоставить интерфейсы API или службы некоторым из аутентифицированных пользователей.Authorization is the process that makes APIs or services available to some authenticated users but not others.

АутентификацияAuthentication

Первым шагом для принятия решений о доверии уровня API является выбор аутентификации.The first step to making API-level trust decisions is authentication. Аутентификация — это процесс надежной проверки подлинности пользователя.Authentication is the process of reliably ascertaining a user’s identity. При использовании микрослужб управление проверкой подлинности обычно осуществляется централизованно.In microservice scenarios, authentication is typically handled centrally. При использовании шлюза API можно разгрузить аутентификацию на шлюз.If you are using an API Gateway, you can offload authentication to the gateway. При использовании этого подхода убедитесь, что к отдельным службам невозможно обратиться напрямую (минуя шлюз API), если только не реализована дополнительная защита для аутентификации сообщений — поступили они от шлюза или нет.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.

Если службы доступны напрямую, для проверки подлинности пользователей можно применять службу проверки подлинности, например Azure Active Directory или выделенную микрослужбу проверки подлинности, выступающую в роли службы токенов безопасности (STS).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. Сведения о доверии передаются между службами с помощью токенов безопасности или файлов cookie.Trust decisions are shared between services with security tokens or cookies.

Для ASP.NET Core основным механизмом аутентификации пользователей является система членства в ASP.NET Core Identity.For ASP.NET Core, the primary mechanism for authenticating users is the ASP.NET Core Identity membership system. В удостоверении ASP.NET Core хранятся сведения о пользователе (в том числе данные для входа, роли и утверждения). Само удостоверение находится в хранилище данных, которое настраивает разработчик.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 поддерживает двухфакторную проверку подлинности.ASP.NET Core Identity supports two-factor authentication. Кроме того, поддерживаются внешние поставщики проверки подлинности, поэтому пользователи могут выполнять вход с помощью существующих процессов проверки подлинности от таких поставщиков, как Microsoft, Google, Facebook или Twitter.External authentication providers are also supported, so users can sign in using existing authentication processes from providers like Microsoft, Google, Facebook, or Twitter.

АвторизацияAuthorization

После аутентификации службы должны предоставить пользователю доступ или определить, какие операции пользователь может выполнять.After authentication, services need to authorize user access or determine what a user is able to do. Этот процесс позволяет службе предоставлять API только избранным пользователям.This process allows a service to make APIs available to some authenticated users, but not to all. Авторизация является самостоятельной и не зависит от аутентификации, которая позволяет установить подлинность пользователя.Authorization is orthogonal and independent from authentication, which is the process of ascertaining who a user is. При использовании аутентификации возможно создание одного или нескольких удостоверений для текущего пользователя.Authentication may create one or more identities for the current user.

Авторизация ASP.NET Core может выполняться на основе ролей пользователей или пользовательской политики, которая может включать в себя проверку утверждений или другие эвристические методы.ASP.NET Core authorization can be done based on users’ roles or based on custom policy, which might include inspecting claims or other heuristics.

Ограничение и защита доступа с помощью шлюза APIRestrict and secure access using an API gateway

Обычно, облачным приложениям требуется интерфейсный шлюз, который предоставляет единую точку передачи входящего трафика пользователей, устройств или других приложений.Cloud applications typically need a front-end gateway to provide a single point of ingress for users, devices, or other applications. Шлюз API располагается между клиентами и службами и является точкой входа для всех служб, предоставляемых вашим приложением.An API gateway sits between clients and services and is the entry point to all the services that your application is providing. Он выполняет функцию обратного прокси, передавая запросы от клиентов к службам.It acts as a reverse proxy, routing requests from clients to services. Он также может выполнять различные перекрестные задачи, такие как проверка подлинности и авторизация, завершение TLS и ограничение скорости.It may also perform various cross-cutting tasks such as authentication and authorization, TLS termination, and rate limiting. Если этот шлюз не будет развернут, клиенты должны будут отправлять запросы непосредственно к внешним службам.If you don't deploy a gateway, clients must send requests directly to front-end services.

В Service Fabric в качестве шлюза может выступать любая служба без отслеживания состояния, например приложение ASP.NET Core, или другая служба, предназначенная для обработки входящего трафика, например Traefik, Центры событий, Центр Интернета вещей или Управление API Azure.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 непосредственно интегрируется с Service Fabric. Это позволяет публиковать интерфейсы API с широким набором правил маршрутизации к внутренним службам Service Fabric.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. Можно защитить доступ к внутренним службам, предотвращать DOS-атаки с помощью регулирования или проверять ключи API, токены JWT, сертификаты и другие учетные данные.You can secure access to backend services, prevent DOS attacks by using throttling, or verify API keys, JWT tokens, certificates, and other credentials. Чтобы узнать больше, прочитайте раздел Общие сведения о Service Fabric со службой управления API Azure.To learn more, read Service Fabric with Azure API Management overview.

Управление секретами приложенийManage application secrets

Секретом может считаться любая конфиденциальная информации, например строка подключения к хранилищу, пароль или другое значение, которое не должно обрабатываться в виде обычного текста.Secrets can be any sensitive information, such as storage connection strings, passwords, or other values that should not be handled in plain text. В этой статье для управления ключами и секретами используется Azure Key Vault.This article uses Azure Key Vault to manage keys and secrets. Однако Использование секретов в приложении не зависит от облачной платформы, что позволяет развертывать приложения в кластере, размещенном в любом месте.However, using secrets in an application is cloud platform-agnostic to allow applications to be deployed to a cluster hosted anywhere.

Для управления параметрами конфигурации службы рекомендуется использовать пакеты конфигурации службы.The recommended way to manage service configuration settings is through service configuration packages. Пакеты конфигурации имеют числовые версии, которые можно обновлять, используя управляемые последовательные обновления с проверкой работоспособности и автоматическим откатом обновления.Configuration packages are versioned and updatable through managed rolling upgrades with health-validation and auto rollback. Это предпочтительно для глобальной конфигурации, так как уменьшает вероятность глобального простоя службы.This is preferred to global configuration as it reduces the chances of a global service outage. Зашифрованные секреты не являются исключением.Encrypted secrets are no exception. Служба Service Fabric снабжена встроенными компонентами для шифрования и расшифровки значений в файле Settings.xml пакета конфигурации. При этом используется сертификат шифрования.Service Fabric has built-in features for encrypting and decrypting values in a configuration package Settings.xml file using certificate encryption.

На этой схеме показаны основные этапы процесса управления секретами в приложении Service Fabric:The following diagram illustrates the basic flow for secret management in a Service Fabric application:

обзор управления секретами

Этот поток состоит из четырех основных шагов.There are four main steps in this flow:

  1. Получение сертификата шифрования данных.Obtain a data encipherment certificate.
  2. Установка сертификата в кластере.Install the certificate in your cluster.
  3. Шифрование значений секретов при развертывании приложения с помощью сертификата и их включение в файл конфигурации Settings.xml службы.Encrypt secret values when deploying an application with the certificate and inject them into a service's Settings.xml configuration file.
  4. Чтение зашифрованных значений из файла Settings.xml. Для расшифровки используется тот же сертификат шифрования.Read encrypted values out of Settings.xml by decrypting with the same encipherment certificate.

В качестве безопасного расположения для хранения сертификатов здесь используется хранилище ключей Azure. С его помощью сертификаты также устанавливаются в кластеры Service Fabric в Azure.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. Если вы не выполняете развертывание в Azure, то использование хранилища ключей для управления секретами в приложениях Service Fabric не требуется.If you are not deploying to Azure, you do not need to use Key Vault to manage secrets in Service Fabric applications.

Пример доступен в разделе Управление секретами в приложениях Service Fabric.For an example, see Manage application secrets.

Защита среды размещенияSecure the hosting environment

Платформа Azure Service Fabric помогает защищать приложения, работающие в кластере под разными учетными записями.By using Azure Service Fabric, you can secure applications that are running in the cluster under different user accounts. Кроме того, платформа помогает защищать ресурсы, используемые приложениями при развертывании с помощью учетных записей, например файлы, каталоги и сертификаты.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. Это позволяет изолировать друг от друга выполняемые приложения, даже если они запущены в общей среде.This makes running applications, even in a shared hosted environment, more secure from one another.

В манифесте приложения объявляются субъекты безопасности (пользователи и группы), которым требуется выполнять службы, и защищенные ресурсы.The application manifest declares the security principals (users and groups) required run the service(s) and secure resources. Эти субъекты безопасности указываются в политиках, например в политиках запуска от имени, привязки конечных точек, безопасности, совместного доступа к пакетам или политиках безопасности доступа.These security principals are referenced in policies, for example the run-as, endpoint binding, package sharing, or security access policies. Эти политики применяются к ресурсам службы в разделе ServiceManifestImport манифеста приложения.Policies are then applied to service resources in the ServiceManifestImport section of the application manifest.

При объявлении субъектов можно также определить и создать группы пользователей, а затем добавить в них пользователей для совместного управления.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. Это полезно, если для разных точек входа службы есть несколько пользователей и у них должны быть определенные общие права, доступные на уровне группы.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.

По умолчанию приложения Service Fabric выполняются под учетной записью, используемой процессом Fabric.exe.By default, Service Fabric applications run under the account that the Fabric.exe process runs under. Платформа также позволяет запускать приложения под учетной записью локального пользователя или локальной системы, указанной в манифесте приложения.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. Дополнительные сведения см. в разделе Запуск службы с использованием учетной записи локального пользователя или локальной системы.For more information, see Run a service as a local user account or local system account. Можно также выполнить сценарий запуска службы с использованием локальной или системной учетной записи.You can also Run a service startup script as a local user or system account.

При запуске Service Fabric в изолированном кластере Windows службу можно запустить с помощью учетных записей домена Active Directory или групповых управляемых учетных записей службы.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.

Безопасные контейнерыSecure containers

Service Fabric предоставляет для служб в контейнере механизм, который обеспечивает доступ к сертификату, установленному на узлах кластера Windows или Linux (версии 5.7 или выше).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). Этот PFX-файл сертификата можно использовать для аутентификации приложения или службы, а также для безопасного обмена данными с другими службами.This PFX certificate can be used for authenticating the application or service or secure communication with other services. Дополнительные сведения см. в разделе Безопасность контейнера.For more information, see Import a certificate into a container.

Кроме того, Service Fabric поддерживает групповые управляемые учетные записи службы (gMSA) для контейнеров Windows.In addition, Service Fabric also supports gMSA (group Managed Service Accounts) for Windows containers. Дополнительные сведения см. в разделе Set up gMSA for Windows containers running on Service Fabric (Настройка групповой управляемой учетной записи службы для контейнеров Windows).For more information, see Set up gMSA for Windows containers.

Защита взаимодействия со службойSecure service communication

Служба Service Fabric, запущенная в кластере Service Fabric, обычно распределена между несколькими виртуальными машинами.In Service Fabric, a service runs somewhere in a Service Fabric cluster, typically distributed across multiple VMs. Service Fabric предоставляет несколько вариантов защиты взаимодействия со службой.Service Fabric provides several options for securing your service communications.

Можно включить конечные точки HTTPS в веб-службах ASP.NET Core или Java.You can enable HTTPS endpoints in your ASP.NET Core or Java web services.

Можно установить безопасное подключение между обратным прокси-сервером и службами, которое будет использоваться в качестве защищенного сквозного канала.You can establish secure connection between the reverse proxy and services, thus enabling an end to end secure channel. Подключение к защищенным службам поддерживается, только если обратный прокси-сервер настроен для прослушивания по протоколу HTTPS.Connecting to secure services is supported only when reverse proxy is configured to listen on HTTPS. Сведения о настройке обратного прокси-сервера см. в статье Обратный прокси-сервер в Azure Service Fabric.For information on configuring the reverse proxy, read Reverse proxy in Azure Service Fabric. В разделе Подключение к защищенной службе с помощью обратного прокси-сервера описывается установление безопасного подключения между обратным прокси-сервером и службами.Connect to a secure service describes how to establish secure connection between the reverse proxy and services.

Платформа приложений Reliable Services предоставляет несколько готовых стеков взаимодействия и средств, которыми можно воспользоваться для повышения безопасности.The Reliable Services application framework provides a few prebuilt communication stacks and tools that you can use to improve security. Узнайте, как повысить безопасность при использовании удаленного взаимодействия со службой (используя язык C# или Java) либо при использовании WCF.Learn how to improve security when you're using service remoting (in C# or Java) or using WCF.

Шифрование неактивных данных приложенияEncrypt application data at rest

Каждому типу узла в кластере Service Fabric в Azure соответствует масштабируемый набор виртуальных машин.Each node type in a Service Fabric cluster running in Azure is backed by a virtual machine scale set. С помощью шаблона Azure Resource Manager можно подключать диски данных к масштабируемым наборам, которые входят в кластер Service Fabric.Using an Azure Resource Manager template, you can attach data disks to the scale set(s) that make up the Service Fabric cluster. Если ваши службы сохраняют данные на подключенный диск данных, вы можете зашифровать этот диск данных, чтобы защитить данные приложения.If your services save data to an attached data disk, you can encrypt those data disks to protect your application data.

Дальнейшие действияNext steps