Aplicativos web gerenciados com segurançaSecurely managed web applications

Este cenário fornece uma visão geral da implantação de aplicativos seguros usando o ambiente do serviço de aplicativo do Azure (ase).This scenario provides an overview of deploying secure applications using the Azure App Service Environment (ASE). Para restringir o acesso do aplicativo da Internet, o serviço de gateway Aplicativo Azure e o Firewall do aplicativo Web são usados.To restrict application access from the Internet, the Azure Application Gateway service and Web Application Firewall are used. Este artigo também fornece orientação sobre integração contínua e implantação contínua (CI/CD) para ambientes de serviço de aplicativo usando o Azure DevOps.This article also provides guidance about continuous integration and continuous deployment (CI/CD) for App Service Environments using Azure DevOps.

Esse cenário é normalmente implantado em setores como o setor bancário e seguro, onde os clientes estão preocupados com a segurança em nível de plataforma, além da segurança em nível de aplicativo.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. Para demonstrar esses conceitos, usaremos um aplicativo que permite aos usuários enviar relatórios de despesas.To demonstrate these concepts, we'll use an application that allows users to submit expense reports.

Casos de uso relevantesRelevant use cases

Considere este cenário para os casos de uso a seguir:Consider this scenario for the following use cases:

  • Criar um aplicativo Web do Azure onde é necessária segurança adicional.Building an Azure Web App where additional security is required.
  • Fornecendo locação dedicada, em vez de planos de serviço de aplicativo de locatário compartilhado.Providing dedicated tenancy, rather than shared tenant App Service Plans.
  • Usando o Azure DevOps com um ambiente de serviço de aplicativo com balanceamento de carga internamente (geralmente chamado de ase ILB).Using Azure DevOps with an internally load-balanced Application Service Environment (often called an ILB ASE).

ArquiteturaArchitecture

Arquitetura de cenário de exemplo para implantação segura do ASE ILB

O fluxo de dados deste cenário ocorre da seguinte forma:Data flows through the scenario as follows:

  1. As solicitações HTTP/HTTPS primeiro atingem o gateway de aplicativo.HTTP/HTTPS requests first hit the Application Gateway.
  2. Opcionalmente (não mostrado no diagrama), você pode ter a autenticação do Azure Active Directory (Azure AD) habilitada para o aplicativo Web.Optionally (not shown in the diagram), you can have Azure Active Directory (Azure AD) authentication enabled for the Web App. Depois que o tráfego chega pela primeira vez no gateway de aplicativo, o usuário é solicitado a fornecer credenciais para autenticar com o aplicativo.After the traffic first hits the Application Gateway, the user is then prompted to supply credentials to authenticate with the application.
  3. As solicitações do usuário fluem pelo ILB (balanceador de carga interno) do ASE, que, por sua vez, roteia o tráfego para o aplicativo Web despesas.User requests flow through the internal load balancer (ILB) of the ASE, which in turn routes the traffic to the Expenses Web App.
  4. Em seguida, o usuário continua criando um relatório de despesas.The user then proceeds to create an expense report.
  5. Como parte da criação do relatório de despesas, o aplicativo de API implantado é invocado para recuperar o nome e o email do gerente do usuário.As part of creating the expense report, the deployed API App is invoked to retrieve the user's manager name and email.
  6. O relatório de despesas criado é armazenado no banco de dados SQL do Azure.The created expense report is stored in Azure SQL Database.
  7. Para facilitar a implantação contínua, o código é verificado na instância do Azure DevOps.To facilitate continuous deployment, code is checked into the Azure DevOps instance.
  8. A VM de compilação tem o agente DevOps do Azure instalado, permitindo que a VM de compilação Extraia os bits para que o aplicativo Web seja implantado no ASE (já que a VM de compilação é implantada em uma sub-rede dentro da mesma rede virtual).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).

ComponentesComponents

  • O ambiente do serviço de aplicativo fornece um ambiente dedicado e totalmente isolado para executar com segurança o aplicativo em alta escala.The App Service Environment provides a fully isolated, dedicated environment for securely running the application at high scale. Além disso, como o ASE e as cargas de trabalho executadas nele estão por trás de uma rede virtual, ele também fornece uma camada adicional de segurança e isolamento.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. O requisito de alta escala e isolamento levou a seleção do ASE ILB.The requirement of high scale and isolation drove the selection of ILB ASE.
  • Essa carga de trabalho está usando o tipo de preço do serviço de aplicativo isolado, de modo que o aplicativo está sendo executado em um ambiente dedicado privado em um datacenter do Azure usando VMs da série Dv2 com processadores mais rápidos, armazenamento SSD e o dobro da taxa de memória para núcleo em comparação com o padrão.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.
  • Aplicativo Web de serviços de Azure app e aplicativos Web do host de aplicativo de API e APIs RESTful.Azure App Services Web App and API App host web applications and RESTful APIs. Eles são hospedados no plano do tipo de preço isolado que também oferece dimensionamento automático, domínios personalizados e assim por diante, mas em uma camada dedicada.These are hosted on the Isolated Pricing Tier plan that also offers autoscaling, custom domains, and so on, but in a dedicated tier.
  • O Gateway de aplicativo do Azure é uma operação de balanceador de carga de tráfego da Web na camada 7 que gerencia o tráfego para o aplicativo Web.Azure Application Gateway is a web traffic load balancer operating at Layer 7 that manages traffic to the web application. Ele oferece descarregamento de SSL, o que remove a sobrecarga adicional dos servidores Web que hospedam o aplicativo Web para descriptografar o tráfego novamente.It offers SSL offloading, which removes additional overhead from the web servers hosting the web app to decrypt traffic again.
  • O WAF ( Firewall do aplicativo Web ) é um recurso do gateway de aplicativo.Web Application Firewall (WAF) is a feature of Application Gateway. Habilitar o WAF no gateway de aplicativo aprimora ainda mais a segurança.Enabling the WAF in the Application Gateway further enhances security. O WAF usa regras de OWASP para proteger o aplicativo Web contra ataques como scripts entre sites, seqüestros de sessão e injeção de SQL.The WAF uses OWASP rules to protect the web application against attacks such as cross-site scripting, session hijacks, and SQL injection.
  • Banco de dados SQL do Azure foi selecionado porque a maioria dos dados nesse aplicativo é um dado relacional, com alguns dados como documentos e blobs.Azure SQL Database was selected because the majority of the data in this application is relational data, with some data as documents and Blobs.
  • A rede do Azure fornece uma variedade de recursos de rede no Azure, e as redes podem ser emparelhadas com outras redes virtuais na conectividade do Azure também podem ser estabelecidas com data centers locais via ExpressRoute ou site a site.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. Nesse caso, um ponto de extremidade de serviço é habilitado na rede virtual para garantir que os dados estejam fluindo somente entre a rede virtual do Azure e a instância do banco de dados 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.
  • O Azure DevOps é usado para ajudar as equipes a colaborar durante muitos sprints, usando recursos do Azure DevOps que dão suporte ao desenvolvimento ágil e para criar pipelines de compilação e versão.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.
  • Uma VM de compilação do Azure foi criada para que o agente instalado possa extrair a respectiva compilação e implantar o aplicativo Web no ambiente do 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.

AlternativasAlternatives

O ASE pode executar aplicativos Web regulares no Windows ou, como neste exemplo, os aplicativos Web implantados dentro do ASE são executados como contêineres do 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. O ASE foi selecionado para hospedar esses aplicativos em contêineres de instância única.ASE was selected to host these single-instance containerized applications. Há alternativas disponíveis — examine as considerações abaixo ao projetar sua solução.There are alternatives available—review the considerations below when designing your solution.

  • Service Fabric do Azure: se seu ambiente for baseado em Windows predominantemente, e suas cargas de trabalho forem basicamente baseadas em .NET Framework e você ainda não estiver pensando em rearquitetar para o .NET Core, use Service Fabric para dar suporte e implantar contêineres do 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. Além disso, Service Fabric dá suporte a APIs de programação C# ou Java e para desenvolver microserviços nativos, os clusters podem ser provisionados no Windows ou no Linux.Additionally, Service Fabric supports C# or Java programming APIs, and for developing native microservices, the clusters can be provisioned on Windows or Linux.
  • O AKs ( serviço kubernetes do Azure ) é um projeto de software livre e uma plataforma de orquestração mais adequada para hospedar aplicativos multicontêineres complexos que normalmente usam uma arquitetura baseada em microserviços.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. O AKS é um serviço gerenciado do Azure que abstrai as complexidades de provisionamento e configuração de um cluster kubernetes.AKS is a managed Azure service that abstracts away the complexities of provisioning and configuring a Kubernetes cluster. No entanto, o conhecimento significativo da plataforma kubernetes ainda é necessário para dar suporte e mantê-la, portanto, hospedar alguns aplicativos Web em contêineres de instância única pode não ser a melhor opção.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.

Outras opções para a camada de dados incluem:Other options for the data tier include:

  • Azure Cosmos DB: se a maioria dos dados estiver em formato não relacional, Cosmos DB será uma boa alternativa.Azure Cosmos DB: If the majority of the data is in non-relational format, Cosmos DB is a good alternative. Isso fornece uma plataforma para executar outros modelos de dados, como Mongo DB, Cassandra, dados do Graph ou armazenamento de tabela simples.This service provides a platform to run other data models such as Mongo DB, Cassandra, Graph data, or simple table storage.

ConsideraçõesConsiderations

Há algumas considerações a serem consideradas ao lidar com certificados no ASE ILB.There are certain considerations to be aware of when dealing with certificates on ILB ASE. O truque real aqui é a geração de um certificado que é encadeado para uma raiz confiável sem a necessidade de uma solicitação de assinatura de certificado gerada pelo servidor no qual o certificado será eventualmente colocado.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. Com o IIS, por exemplo, a primeira etapa é gerar um CSR do servidor IIS e, em seguida, enviá-lo para a autoridade de emissão do certificado 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.

Você não pode emitir um CSR do Load Balancer interno (ILB) de um ASE.You cannot issue a CSR from the Internal Load Balancer (ILB) of an ASE. A maneira de lidar com isso é usar este procedimento.The way to handle this is to use this procedure.

O acima permite que você use a verificação da Propriedade do nome DNS em vez de um CSR.The above allows you to use proof of DNS name ownership instead of a CSR. Se você possui um namespace DNS, pode colocar em um registro de DNS TXT especial, o serviço acima verifica se o registro está lá e, se encontrado, sabe que você possui o servidor DNS porque tem o registro correto.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. Com base nessas informações, ele emite um certificado que está inscrito em uma raiz confiável, que você pode carregar em seu 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. Você não precisa fazer nada com os repositórios de certificados individuais nos aplicativos Web porque tem um certificado SSL de raiz confiável no 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.

Crie um trabalho de certificado SSL autoassinado ou emitido internamente se quisermos fazer chamadas seguras entre serviços em execução no ILB ASE outra solução para considerar como fazer o ILB ase funcionar com o certificado SSL emitido internamente e como carregar a autoridade de certificação interna para o repositório de raiz confiável.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.

Ao provisionar o ASE, considere as seguintes limitações ao escolher um nome de domínio para o ASE.While provisioning the ASE, consider the following limitations when choosing a domain name for the ASE. Os nomes de domínio não podem ser:Domain names cannot be:

  • netnet
  • azurewebsites.netazurewebsites.net
  • p.azurewebsites.netp.azurewebsites.net
  • nameofthease.p.azurewebsites.netnameofthease.p.azurewebsites.net

Além disso, o nome de domínio personalizado usado para aplicativos e o nome de domínio usados pelo ASE ILB não podem se sobrepor.Additionally, the custom domain name used for apps and the domain name used by the ILB ASE cannot overlap. Em um ASE ILB com o nome de domínio contoso.com, não é possível usar nomes de domínio personalizados para seus aplicativos, como: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.comabcd.def.contoso.com
  • abcd.contoso.comabcd.contoso.com

Escolha um domínio para o ASE ILB que não terá um conflito com esses nomes de domínio personalizados.Choose a domain for the ILB ASE that won't have a conflict with those custom domain names. Você pode usar algo como contoso-internal.com para o domínio do ASE para o exemplo aqui, porque isso não entrará em conflito com nomes de domínio personalizados que terminam em. 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.

Outro ponto a considerar é sobre o DNS.Another point to consider is regarding DNS. Para permitir que os aplicativos dentro do ASE se comuniquem entre si, por exemplo, um aplicativo Web para se comunicar com uma API, você precisará ter o DNS configurado para sua rede virtual que contém o 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. Você pode trazer seu próprio DNS ou pode usar zonas privadas do DNS do AzureYou can either bring your own DNS or you can use Azure DNS private zones

DisponibilidadeAvailability

EscalabilidadeScalability

SegurançaSecurity

ResiliênciaResiliency

Implantar o cenárioDeploy the scenario

Para implantar este cenário, você pode seguir este tutorial passo a passo que demonstra como implantar manualmente cada componente.To deploy this scenario, you can follow this step-by-step tutorial demonstrating how to manually deploy each component. Este tutorial também fornece um aplicativo de exemplo .NET que executa um aplicativo de relatório de despesas da Contoso simples.This tutorial also provides a .NET sample application that runs a simple Contoso expense reporting application.

PreçosPricing

Explore o custo de executar esse cenário, todos os serviços são pré-configurados na calculadora de custos.Explore the cost of running this scenario, all of the services are pre-configured in the cost calculator. Para ver como o preço seria alterado para o seu uso específico altere as variáveis apropriadas para que eles sejam correspondentes ao tráfego esperada.To see how the pricing would change for your particular use case change the appropriate variables to match your expected traffic.

Fornecemos três perfis de custo de exemplo com base na quantidade de tráfego que você espera receber:We have provided three sample cost profiles based on amount of traffic you expect to get:

  • Pequeno: esse exemplo de preço representa os componentes necessários para criar a saída de uma instância de nível mínimo de produção.Small: This pricing example represents the components necessary to build the out for a minimum production level instance. Aqui, estamos supondo uma pequena quantidade de usuários, com um total de apenas alguns milhares por mês.Here we are assuming a small number of users, numbering only in a few thousand per month. O aplicativo está usando uma única instância de um aplicativo Web padrão que será suficiente para habilitar o dimensionamento automático.The app is using a single instance of a standard web app that will be enough to enable autoscaling. Cada um dos outros componentes é dimensionado para uma camada básica que permitirá uma quantidade mínima de custos, mas que ainda garante que haja suporte a SLA e capacidade suficiente para lidar com uma carga de trabalho de nível de produção.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.
  • Médio: esse exemplo de preço representa os componentes indicativos de uma implantação de tamanho moderado.Medium: This pricing example represents the components indicative of a moderate size deployment. Aqui, podemos estimar aproximadamente 100.000 usuários usando o sistema ao longo de um mês.Here we estimate approximately 100,000 users using the system over the course of a month. O tráfego esperado é tratado em uma única instância de serviço de aplicativo com uma camada standard moderada.The expected traffic is handled in a single app service instance with a moderate standard tier. Além disso, camadas moderadas de serviços cognitivos e de pesquisa são adicionados à calculadora.Additionally, moderate tiers of cognitive and search services are added to the calculator.
  • Grande: esse exemplo de preço representa um aplicativo de alta escala, na ordem de milhões de usuários por mês para mover terabytes de dados.Large: This pricing example represents an application meant for high scale, at the order of millions of users per month moving terabytes of data. Nesse nível de alto desempenho de uso, são necessários aplicativos Web da camada premium implantados em várias regiões administrados pelo gerenciador de tráfego.At this level of usage high performance, premium tier web apps deployed in multiple regions fronted by traffic manager is required. Os dados consistem nos seguintes componentes: armazenamento, bancos de dados e CDN, que são configurados para terabytes.Data consists of the following components: storage, databases, and CDN, are configured for terabytes of data.