Безопасное управление веб-приложениямиSecurely managed web applications

В этом сценарии представлен обзор развертывания безопасных приложений с помощью Среда службы приложений Azure (ASE).This scenario provides an overview of deploying secure applications using the Azure App Service Environment (ASE). Чтобы ограничить доступ приложений из Интернета, используются служба шлюза приложений Azure и брандмауэр веб-приложения.To restrict application access from the Internet, the Azure Application Gateway service and Web Application Firewall are used. В этой статье также приводятся рекомендации по непрерывной интеграции и непрерывному развертыванию (CI/CD) для сред службы приложений с помощью Azure DevOps.This article also provides guidance about continuous integration and continuous deployment (CI/CD) for App Service Environments using Azure DevOps.

Этот сценарий обычно развертывается в таких отраслях, как банковская и страховая страхование, где клиентам важна безопасность на уровне платформы в дополнение к безопасности на уровне приложений.This scenario is commonly deployed in industries such as banking and insurance where customers are conscious of platform-level security in addition to application level security. Чтобы продемонстрировать эти концепции, мы будем использовать приложение, позволяющее пользователям отправлять отчеты о расходах.To demonstrate these concepts, we'll use an application that allows users to submit expense reports.

Варианты соответствующего использованияRelevant use cases

Рассмотрите этот сценарий для следующих вариантов использования:Consider this scenario for the following use cases:

  • Создание веб-приложения Azure, где требуется дополнительная защита.Building an Azure Web App where additional security is required.
  • Предоставление выделенной аренды, а не общих планов службы приложений клиента.Providing dedicated tenancy, rather than shared tenant App Service Plans.
  • Использование Azure DevOps с внутренней средой службы приложений с балансировкой нагрузки (часто НАЗЫВАЕТСЯ ilB ASE).Using Azure DevOps with an internally load-balanced Application Service Environment (often called an ILB ASE).

АрхитектураArchitecture

Пример архитектуры сценария для безопасного развертывания ILB ASE

Данные передаются в сценарии следующим образом:Data flows through the scenario as follows:

  1. Запросы HTTP/HTTPS впервые попадают в шлюз приложений.HTTP/HTTPS requests first hit the Application Gateway.
  2. При необходимости (не показано на схеме) можно включить проверку подлинности Azure Active Directory (Azure AD) для веб-приложения.Optionally (not shown in the diagram), you can have Azure Active Directory (Azure AD) authentication enabled for the Web App. После первого попадания трафика в шлюз приложений пользователь получает запрос на ввод учетных данных для проверки подлинности в приложении.After the traffic first hits the Application Gateway, the user is then prompted to supply credentials to authenticate with the application.
  3. Запросы пользователей проходят через внутренний балансировщик нагрузки (ILB) ASE, который, в свою очередь, направляет трафик в веб-приложение расходов.User requests flow through the internal load balancer (ILB) of the ASE, which in turn routes the traffic to the Expenses Web App.
  4. Затем пользователь переходит к созданию отчета о расходах.The user then proceeds to create an expense report.
  5. В рамках создания отчета о расходах развернутое приложение API вызывается для получения имени и электронной почты руководителя пользователя.As part of creating the expense report, the deployed API App is invoked to retrieve the user's manager name and email.
  6. Созданный отчет о расходах хранится в базе данных SQL Azure.The created expense report is stored in Azure SQL Database.
  7. Чтобы упростить непрерывное развертывание, код возвращается в экземпляр Azure DevOps.To facilitate continuous deployment, code is checked into the Azure DevOps instance.
  8. На виртуальной машине сборки установлен агент Azure DevOps, позволяющий виртуальной машине сборки получать биты веб-приложения для развертывания в ASE (так как виртуальная машина сборки развертывается в подсети в той же виртуальной сети).The build VM has the Azure DevOps Agent installed, allowing the build VM to pull the bits for the Web App to deploy to the ASE (since the Build VM is deployed in a subnet inside the same virtual network).

КомпонентыComponents

  • Среда службы приложений предоставляет полностью изолированную выделенную среду для безопасного запуска приложения в высоком масштабе.The App Service Environment provides a fully isolated, dedicated environment for securely running the application at high scale. Кроме того, так как ASE и рабочие нагрузки, запущенные на нем, находятся за виртуальной сетью, она также обеспечивает дополнительный уровень безопасности и изоляции.In addition, since ASE and the workloads that run on it are behind a virtual network, it also provides an additional layer of security and isolation. Требование высокого масштаба и изоляции выделено выбором ILB ASE.The requirement of high scale and isolation drove the selection of ILB ASE.
  • Эта Рабочая нагрузка использует ценовую категорию службы приложений, поэтому приложение работает в частной выделенной среде в центре обработки данных Azure с помощью виртуальных машин серии Dv2 с более быстрыми процессорами, хранилищем SSD и удвоенным коэффициентом "память — ядро" по сравнению со стандартом.This workload is using the isolated App Service pricing tier, so the application is running in a private dedicated environment in an Azure datacenter using Dv2-series VMs with faster processors, SSD storage, and double the memory-to-core ratio compared to Standard.
  • Веб - приложения служб приложений Azure и приложения API размещения веб-приложений и API RESTful.Azure App Services Web App and API App host web applications and RESTful APIs. Они размещаются в плане "изолированная ценовая категория", которая также предлагает Автомасштабирование, Пользовательские домены и т. д., но на выделенном уровне.These are hosted on the Isolated Pricing Tier plan that also offers autoscaling, custom domains, and so on, but in a dedicated tier.
  • Шлюз приложений Azure — это балансировщик нагрузки веб-трафика, работающий на уровне 7, который управляет трафиком к веб-приложению.Azure Application Gateway is a web traffic load balancer operating at Layer 7 that manages traffic to the web application. Она предлагает разгрузку SSL, которая устраняет дополнительные издержки с веб-серверов, на которых размещается веб-приложение, для повторной расшифровки трафика.It offers SSL offloading, which removes additional overhead from the web servers hosting the web app to decrypt traffic again.
  • Брандмауэр веб-приложения (WAF) является компонентом шлюза приложений.Web Application Firewall (WAF) is a feature of Application Gateway. Включение WAF в шлюзе приложений улучшает безопасность.Enabling the WAF in the Application Gateway further enhances security. WAF использует правила OWASP для защиты веб-приложения от атак, таких как межсайтовые сценарии, перехваты сеансов и внедрение кода SQL.The WAF uses OWASP rules to protect the web application against attacks such as cross-site scripting, session hijacks, and SQL injection.
  • Выбрана база данных SQL Azure , так как большая часть данных в этом приложении является реляционными данными, а некоторые данные — как документы и большие двоичные объекты.Azure SQL Database was selected because the majority of the data in this application is relational data, with some data as documents and Blobs.
  • Сети Azure предоставляют разнообразные возможности работы с сетью в Azure, и сети могут быть соединены с другими виртуальными сетями в службе "подключение к Azure", а также с локальными центрами обработки данных через ExpressRoute или "сеть — сеть".Azure Networking provides a variety of networking capabilities in Azure, and the networks can be peered with other virtual networks in Azure Connectivity can also be established with on-premises datacenters via ExpressRoute or site-to-site. В этом случае Конечная точка службы будет включена в виртуальной сети, чтобы обеспечить передачу данных только между виртуальной сетью Azure и экземпляром базы данных SQL.In this case, a service endpoint is enabled on the virtual network to ensure the data is flowing only between the Azure virtual network and the SQL Database instance.
  • Azure DevOps помогает группам совместно работать во время многих спринтов, используя функции Azure DevOps, поддерживающие гибкую разработку, и создавать конвейеры сборки и выпуска.Azure DevOps is used to help teams collaborate during many sprints, using features of Azure DevOps that support Agile Development, and to create build and release pipelines.
  • Создана Виртуальная машина Azure Build, поэтому установленный агент может извлечь соответствующую сборку и развернуть веб-приложение в среде ASE.An Azure build VM was created so that the installed agent can pull down the respective build, and deploy the web app to the ASE environment.

Альтернативные вариантыAlternatives

ASE может запускать обычные веб-приложения в Windows или, как в этом примере, веб-приложения, развернутые внутри ASE, работают как контейнеры Linux.ASE can run regular web apps on Windows or, as in this example, the web apps deployed inside the ASE are each running as Linux containers. ASE был выбран для размещения этих приложений в контейнере с одним экземпляром.ASE was selected to host these single-instance containerized applications. Существуют альтернативные варианты, которые следует — учитывать при проектировании решения.There are alternatives available—review the considerations below when designing your solution.

  • Azure Service Fabric. Если среда работает в основном на основе Windows, а рабочие нагрузки основаны .NET Framework, и вы еще не планируете изменять архитектуру до .NET Core, используйте Service Fabric для поддержки и развертывания контейнеров Windows Server.Azure Service Fabric: If your environment is predominantly Windows-based, and your workloads are primarily .NET Framework-based, and you are not yet considering rearchitecting to .NET Core, then use Service Fabric to support and deploy Windows Server Containers. Кроме того, Service Fabric поддерживает API-интерфейсы программирования C# или Java, а также для разработки собственных микрослужб можно подготовить кластеры в Windows или Linux.Additionally, Service Fabric supports C# or Java programming APIs, and for developing native microservices, the clusters can be provisioned on Windows or Linux.
  • Служба Azure Kubernetes Service (AKS) — это проект с открытым исходным кодом, который более подходит для размещения сложных многокомпонентных приложений, которые обычно используют архитектуру на основе микрослужб.Azure Kubernetes Service (AKS) is an open source project and an orchestration platform more suited to hosting complex multicontainer applications that typically use a microservices-based architecture. AKS — это управляемая служба Azure, которая абстрагирует сложности подготовки и настройки кластера Kubernetes.AKS is a managed Azure service that abstracts away the complexities of provisioning and configuring a Kubernetes cluster. Тем не менее, знание платформы Kubernetes по-прежнему требуется для поддержки и обслуживания, поэтому размещение нескольких одноэкземплярных контейнеров веб-приложений может быть не лучшим вариантом.However, significant knowledge of the Kubernetes platform is still required to support and maintain it,so hosting a handful of single-instance containerized web applications may not be the best option.

Другие варианты для уровня данных:Other options for the data tier include:

  • Azure Cosmos DB. Если большая часть данных находится в нереляционном формате, Cosmos DB является хорошим вариантом.Azure Cosmos DB: If the majority of the data is in non-relational format, Cosmos DB is a good alternative. Это платформа для запуска других моделей данных, таких как Mongo DB, Cassandra, Graph или простого хранения табличных данных.This service provides a platform to run other data models such as Mongo DB, Cassandra, Graph data, or simple table storage.

ОсобенностиConsiderations

При работе с сертификатами в ILB ASE необходимо учитывать определенные моменты.There are certain considerations to be aware of when dealing with certificates on ILB ASE. Реальная хитрость заключается в создании сертификата, который связан с доверенным корнем без необходимости создания запроса подписи сертификата, созданного сервером, на котором в конечном итоге будет размещен сертификат.The real trick here is generating a certificate that is chained up to a trusted root without requiring a Certificate Signing Request generated by the server on which the cert will be eventually placed. Например, в IIS первым шагом является создание CSR на сервере IIS и отправка его в центр сертификации, выдавший сертификат SSL.With IIS, for example, the first step is to generate a CSR from your IIS server and then send it to the SSL certificate issuing authority.

Вы не можете выдать CSR из внутреннего Load Balancer (ILB) ASE.You cannot issue a CSR from the Internal Load Balancer (ILB) of an ASE. Чтобы справиться с этим, используйте эту процедуру.The way to handle this is to use this procedure.

Приведенный выше параметр позволяет использовать подтверждение владения DNS-именем вместо CSR.The above allows you to use proof of DNS name ownership instead of a CSR. Если вы владеете пространством имен DNS, вы можете указать запись в записи типа TXT DNS, указанная выше служба проверяет, что запись находится там, и, если она найдена, знает, что вы владеете DNS-сервером, так как у вас правильная запись.If you own a DNS namespace, you can put in special DNS TXT record, the above service checks that the record is there, and if found, knows that you own the DNS server because you have the right record. На основе этой информации он выдает сертификат, зарегистрированный в доверенном корневом каталоге, который затем можно отправить в ILB.Based on that information, it issues a certificate that is signed up to a trusted root, which you can then upload to your ILB. Вам не нужно ничего делать с отдельными хранилищами сертификатов в веб-приложениях, так как у вас есть доверенный корневой сертификат SSL на ILB.You don't need to do anything with the individual certificate stores on the Web Apps because you have a trusted root SSL certificate at the ILB.

Создайте самоподписанный или внутреннно выданный SSL-сертификат, если мы хотим обеспечить безопасных вызовов между службами, работающими в ILB ASE другом решении, чтобы учесть , как сделать ilB ASE работать с внутренним сертификатом SSL и как загрузить внутренний ЦС в доверенное корневое хранилище.Make self-signed or internally issued SSL cert work if we want to make secure calls between services running in ILB ASE Another solution to consider on how to make ILB ASE work with internally issued SSL certificate and how to load the internal CA to the trusted root store.

При подготовке ASE необходимо учитывать следующие ограничения при выборе доменного имени для ASE.While provisioning the ASE, consider the following limitations when choosing a domain name for the ASE. Имена доменов не могут быть:Domain names cannot be:

  • net;net
  • azurewebsites.net;azurewebsites.net
  • p.azurewebsites.net;p.azurewebsites.net
  • nameofthease.p.azurewebsites.netnameofthease.p.azurewebsites.net

Кроме того, имя пользовательского домена, используемое для приложений и доменного имени, используемого ILB ASE, не может перекрываться.Additionally, the custom domain name used for apps and the domain name used by the ILB ASE cannot overlap. В среде ASE с внутренним балансировщиком нагрузки с доменным именем contoso.com нельзя использовать следующие пользовательские доменные имена для приложений:For an ILB ASE with the domain name contoso.com, you can't use custom domain names for your apps like:

  • www.contoso.comwww.contoso.com
  • abcd.def.contoso.com;abcd.def.contoso.com
  • abcd.contoso.com.abcd.contoso.com

Выберите домен для ILB ASE, который не будет конфликтовать с этими пользовательскими доменными именами.Choose a domain for the ILB ASE that won't have a conflict with those custom domain names. В этом примере можно использовать нечто вроде contoso-internal.com для домена ASE, так как это не противоречит именам личных доменов, которые заканчиваются на contoso.com.You can use something like contoso-internal.com for the domain of your ASE for the example here, because that won't conflict with custom domain names that end in .contoso.com.

Еще один момент, который следует рассмотреть, — это относительно DNS.Another point to consider is regarding DNS. Чтобы приложения в ASE могли взаимодействовать друг с другом, например, для взаимодействия веб-приложения с API необходимо настроить DNS для виртуальной сети, содержащей ASE.In order to allow applications within the ASE to communicate with each other, for instance a web application to talk to an API, you will need to have DNS configured for your virtual network holding the ASE. Можно либо использовать собственную службу DNS , либо воспользоваться частными зонами Azure DNSYou can either bring your own DNS or you can use Azure DNS private zones

ДоступностьAvailability

МасштабируемостьScalability

БезопасностьSecurity

УстойчивостьResiliency

Развертывание сценарияDeploy the scenario

Для развертывания этого сценария вы можете следовать этому пошаговому руководству, демонстрирующему, как развернуть каждый компонент вручную.To deploy this scenario, you can follow this step-by-step tutorial demonstrating how to manually deploy each component. В этом руководстве также представлен пример приложения .NET, которое запускает простое приложение для создания отчетов о расходах contoso.This tutorial also provides a .NET sample application that runs a simple Contoso expense reporting application.

ЦеныPricing

Чтобы изучить стоимость выполнения этого сценария, все услуги были предварительно сконфигурированы в калькуляторе стоимости.Explore the cost of running this scenario, all of the services are pre-configured in the cost calculator. Чтобы узнать, как изменится цена для вашего конкретного варианта использования, измените соответствующие переменные в соответствии с ожидаемым трафиком.To see how the pricing would change for your particular use case change the appropriate variables to match your expected traffic.

Здесь предоставлено три примера профиля затрат в зависимости от объема трафика, который планируется принимать.We have provided three sample cost profiles based on amount of traffic you expect to get:

  • Малый. Этот профиль предполагает наличие компонентов, необходимых для создания минимального экземпляра уровня рабочей среды.Small: This pricing example represents the components necessary to build the out for a minimum production level instance. Предполагается небольшое количество пользователей (несколько тысяч в месяц).Here we are assuming a small number of users, numbering only in a few thousand per month. Приложение использует один экземпляр стандартного веб-приложения, которого будет достаточно для автомасштабирования.The app is using a single instance of a standard web app that will be enough to enable autoscaling. Каждый из остальных компонентов масштабируется до уровня Basic, который обеспечивает минимальный объем затрат, но по-прежнему гарантирует поддержку соглашений об уровне обслуживания и достаточную емкость для работы рабочей нагрузки на уровне рабочего уровня.Each of the other components is scaled to a basic tier that will allow for a minimum amount of cost but still ensure that there is SLA support and enough capacity to handle a production-level workload.
  • Средний. Этот профиль предполагает наличие компонентов развертывания среднего размера.Medium: This pricing example represents the components indicative of a moderate size deployment. По нашим оценкам систему в течении месяца использует приблизительно 100 000 пользователей.Here we estimate approximately 100,000 users using the system over the course of a month. Ожидаемый трафик обрабатывается в одном экземпляре службы приложения со средним стандартным уровнем.The expected traffic is handled in a single app service instance with a moderate standard tier. Кроме того, в калькулятор добавляются средние уровни когнитивных и поисковых служб.Additionally, moderate tiers of cognitive and search services are added to the calculator.
  • Большой. Этот профиль предполагает развертывание крупномасштабного приложения с миллионами пользователей в месяц и трафиком в терабайты данных.Large: This pricing example represents an application meant for high scale, at the order of millions of users per month moving terabytes of data. На этом уровне потребления требуются высокопроизводительные веб-приложения уровня "Премиум", развернутые во многих регионах, где работает диспетчер трафика.At this level of usage high performance, premium tier web apps deployed in multiple regions fronted by traffic manager is required. Данные состоят из следующих компонентов: хранилище, базы данных и сеть CDN, настроенные для хранения данных.Data consists of the following components: storage, databases, and CDN, are configured for terabytes of data.