Tutorial: Criar uma aplicação segura N-tier no Serviço de Aplicações do Azure

Muitas aplicações têm mais do que um único componente. Por exemplo, pode ter um frontend que é acessível publicamente e liga-se a uma API de backend ou a uma aplicação web. Os recursos do backend podem ligar-se a uma base de dados, conta de armazenamento, cofre de chaves, outra máquina virtual ou uma combinação destes recursos. Esta arquitetura é a base de uma aplicação de nível N. É importante que aplicações como esta sejam concebidas para proteger os recursos de backend ao máximo.

Este tutorial descreve como implementar uma aplicação segura N-tier com uma aplicação web frontend que se liga a outra aplicação web isolada na rede. Todo o tráfego é isolado na sua Rede Virtual do Azure através da utilização da integração com a Rede Virtual e de pontos finais privados. Para obter orientações mais abrangentes que incluam outros cenários, consulte:

Neste tutorial, você:

  • Criar uma rede virtual e sub-redes para integração de redes virtuais de Serviços de Aplicações
  • Criar zonas DNS privadas e endpoints privados
  • Configurar a integração da rede virtual no App Service
  • Desativar a autenticação básica no serviço de aplicação
  • Efetuar a implementação contínua numa aplicação Web de back-end fortemente protegida

Pré-requisitos

O tutorial utiliza duas aplicações de exemplo Node.js alojadas no GitHub. Se você ainda não tem uma conta no GitHub, crie uma conta gratuitamente.

Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.

Para concluir este tutorial:

Revê a arquitetura do cenário

Este tutorial demonstra como configurar uma arquitetura ilustrada no diagrama seguinte. O cenário representa uma das possíveis configurações N-tier no App Service. Você pode usar os conceitos abordados neste tutorial para criar aplicativos de N camadas mais complexos.

Diagrama da arquitetura de um App Service em N camadas, incluindo integração de rede virtual com uma aplicação de front-end e um ponto final privado no back-end.

  • A arquitetura possui uma rede virtual que contém duas sub-redes. Uma sub-rede está integrada com a aplicação web frontend, e a outra sub-rede tem um endpoint privado para a aplicação web backend. A rede virtual bloqueia todo o tráfego de rede de entrada, exceto o tráfego que tem como alvo a aplicação frontend integrada.

  • Uma aplicação web frontend está integrada na rede virtual e acessível a partir da internet pública.

  • Uma aplicação web de backend é acessível apenas através do endpoint privado na rede virtual.

  • Um endpoint privado integra-se com a aplicação web do backend e torna a aplicação acessível através de um endereço IP privado.

  • Uma zona DNS privada permite resolver um nome DNS para o endereço IP do endpoint privado.

Nota

Para configurar integração de rede virtual e endpoints privados, precisa do nível Basic de Serviço de Aplicações do Azure ou de um nível superior. O nível Gratuito não suporta esses recursos.

O cenário neste tutorial apresenta o seguinte comportamento:

  • O tráfego público para a aplicação de backend é bloqueado.
  • O tráfego de saída do App Service é encaminhado para a rede virtual e pode alcançar a aplicação de back-end.
  • O App Service pode efetuar a resolução de DNS para a aplicação de back-end.

Crie as duas aplicações web

Precisas de duas aplicações web do App Service, uma para o frontend e outra para o backend. As aplicações podem correr na mesma região. Para configurar integração com redes virtuais e trabalhar com endpoints privados, use pelo menos o nível Basic de Serviço de Aplicações do Azure. Depois configuras a integração da rede virtual e outras definições.

  1. Cria um grupo de recursos para gerir todos os recursos deste tutorial.

    Defina o <resource-group> marcador para o nome do seu novo grupo de recursos, como zava-resources. Defina o marcador de posição <region-location> para a região do seu novo grupo de recursos, por exemplo, eastus.

    # Define variables for the resource group name and region location
    resourceGroupName=<resource-group>
    regionLocation=<region-location>
    
    # Create the resource group
    az group create --name $resourceGroupName --location $regionLocation
    

    Para mais informações, consulte a referência do comando az group create.

  2. Crie um plano de App Service para os seus recursos.

    Defina o marcador de posição <app-service-plan> com o nome do seu novo plano do App Service, como zava-app-service-plan.

    O exemplo do tutorial define o --sku parâmetro para P1V3 (Premium V3). Pode usar este valor ou especificar um SKU diferente. O SKU deve suportar as funcionalidades de rede necessárias para este tutorial. Selecione o nível Básico ou superior.

    # Define a variable for the App Service plan name
    appServicePlanName=<app-service-plan>
    
    # Create the App Service plan
    az appservice plan create --name $appServicePlanName --resource-group $resourceGroupName --is-linux --location $regionLocation --sku P1V3
    

    Para mais informações, consulte a referência do comando az appservice plan create.

  3. Crie as aplicações web de front-end e back-end.

    O exemplo do tutorial cria duas aplicações de Node.js exemplo, onde a versão da linguagem de runtime é NODE:24-lts. Se preferires usar as tuas próprias aplicações, define o valor dos --runtime parâmetros <language-version> em conformidade. Pode executar o az webapp list-runtimes comando para a lista de runtimes disponíveis:

    az webapp list-runtimes
    

    Defina o <frontend-app-name> marcador para o nome da sua nova aplicação web frontend, como zava-frontend-app. O nome deve ser globalmente único e consistir em caracteres válidos (a-z, 0-9, -). Da mesma forma, defina o marcador de posição <backend-app-name> com o nome da sua nova aplicação Web de back-end, tal como zava-backend-app.

    # Define variables for the App Service web app names
    frontendAppName=<frontend-app-name>
    backendAppName=<backend-app-name>
    
    # Create the web apps
    az webapp create --name $frontendAppName --resource-group $resourceGroupName --plan $appServicePlanName --runtime "NODE:24-lts"
    az webapp create --name $backendAppName  --resource-group $resourceGroupName --plan $appServicePlanName --runtime "NODE:24-lts"
    

    Para mais informações, consulte a referência do comando az webapp create.

Criar a infraestrutura de rede

A infraestrutura de rede virtual consiste nos seguintes recursos:

  • Uma instância de Rede Virtual do Azure
  • Uma sub-rede para a integração da rede virtual do App Service
  • Outra sub-rede para o endpoint privado
  • Uma zona Azure DNS Privado
  • Um endpoint privado
  1. Crie uma rede virtual do Azure.

    Defina o <virtual-network-name> marcador para o nome da sua nova rede virtual, como zava-virtual-network. O nome tem de ser globalmente exclusivo.

    # Define a variable for the virtual network name
    virtualNetworkName=<virtual-network-name>
    
    # Create the virtual network
    az network vnet create --resource-group $resourceGroupName --location $regionLocation --name $virtualNetworkName --address-prefixes 10.0.0.0/16
    

    Para mais informações, consulte a referência do comando az network vnet create.

  2. Crie uma sub-rede para a integração da rede virtual do App Service.

    Defina o <network-integration-subnet> marcador para o nome da sua nova sub-rede que suporta integração com redes virtuais, como zava-integration-subnet.

    Para o Serviço de Aplicativo, recomenda-se que a sub-rede de integração de rede virtual tenha um bloco CIDR de /26 , no mínimo. /24 é mais do que suficiente. --delegations Microsoft.Web/serverfarms especifica que a sub-rede está delegada para a integração de rede virtual do App Service.

    # Define a variable for the integration subnet name
    networkIntegrationSubnet=<network-integration-subnet>
    
    # Create the subnet for virtual network integration
    az network vnet subnet create --resource-group $resourceGroupName --vnet-name $virtualNetworkName --name $networkIntegrationSubnet \
       --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms \
       --disable-private-endpoint-network-policies false
    

    Para mais informações, consulte a referência do comando az network vnet subnet create.

  3. Crie outra sub-rede para os endpoints privados.

    Defina o <private-endpoint-subnet> marcador para o nome da sua nova sub-rede que suporta o endpoint privado, como zava-endpoint-subnet.

    # Define a variable for the private endpoint subnet name
    privateEndpointSubnet=<private-endpoint-subnet>
    
    # Create the subnet for the private endpoint
    az network vnet subnet create --resource-group $resourceGroupName --vnet-name $virtualNetworkName --name $privateEndpointSubnet \
       --address-prefixes 10.0.1.0/24 \
       --disable-private-endpoint-network-policies true
    

    Para sub-redes de pontos finais privados, deve desativar as políticas de rede de pontos finais privados definindo o sinalizador --disable-private-endpoint-network-policies como true. Para mais informações, consulte os parâmetros opcionais para o comando criar subrede vnet da rede az .

    Nota

    A --private-endpoint-network-policies bandeira pode em breve substituir a --disable-private-endpoint-network-policies bandeira.

  4. Cria a zona Azure DNS Privado.

    Defina o marcador de posição <private-zone-name> para o nome da sua nova zona de DNS Privado, como zava-private.azurewebsites.net.

    # Define a variable for the Private DNS zone
    privateDNSZone=<private-zone-name>
    
    # Create the Private DNS zone
    az network private-dns zone create --resource-group $resourceGroupName --name $privateDNSZone
    

    Para mais informações, consulte a referência do comando az network vnet subnet create. Para mais informações sobre como configurar a zona de DNS Privado, consulte configuração da zona DNS do serviço Azure.

    Nota

    Se criares o endpoint privado no portal Azure, uma zona Azure DNS Privado é criada automaticamente para a tua configuração. Para garantir a consistência processual neste tutorial, cria a zona DNS Privado e o private endpoint em separado, utilizando a CLI do Azure.

  5. Liga a zona DNS Privado à rede virtual.

    Defina o <dns-link-name> marcador para o nome do seu novo link DNS, como zava-private-link.

    # Define a variable for the DNS link name
    dnsLinkName=<dns-link-name>
    
    # Create the link between the Private DNS zone and the virtual network
    az network private-dns link vnet create --resource-group $resourceGroupName --name $dnsLinkName --zone-name $privateDNSZone \
       --virtual-network $virtualNetworkName --registration-enabled False
    

    Para mais informações, consulte a referência do comando az network private-dns link vnet create.

  6. Na sub-rede do ponto final privado da sua rede virtual, crie um ponto final privado para a sua aplicação Web de back-end.

    Defina o marcador de posição <private-endpoint-name> para o nome do novo ponto final privado da sua aplicação Web de back-end, como zava-backend-endpoint. Defina o <service-connection-name> marcador para o nome da nova ligação de serviço, como zava-backend-connection.

    # Define variables for the private endpoint and service connection
    privateEndpointName=<private-endpoint-name>
    serviceConnectionName=<service-connection-name>
    
    # Get the resource ID of the backend web app
    resourceId=$(az webapp show --resource-group $resourceGroupName --name $backendAppName --query id --output tsv)
    
    # Create the private endpoint for the backend web app by using the resource ID
    az network private-endpoint create --resource-group $resourceGroupName --name $privateEndpointName --location $regionLocation \
       --connection-name $serviceConnectionName --private-connection-resource-id $resourceId \
       --group-id sites --vnet-name $virtualNetworkName --subnet $privateEndpointSubnet
    

    Para mais informações, consulte a referência do comando az network private-endpoint create.

  7. Associe o ponto final privado à zona de DNS privado com um grupo de zonas DNS para o ponto final privado da aplicação Web de back-end.

    Defina o marcador de posição <dns-zone-group-name> com o nome do seu novo grupo de zonas DNS, como zava-dns-zone-group. O grupo de zonas DNS ajuda na atualização automática da zona DNS Privado quando o endpoint privado é atualizado.

    # Define a variable for the DNS Zone group
    dnsZoneGroupName=<dns-zone-group-name>
    
    # Link the private endpoint to the Private DNS      
    az network private-endpoint dns-zone-group create --resource-group $resourceGroupName --endpoint-name $privateEndpointName \
       --name $dnsZoneGroupName --private-dns-zone $privateDNSZone --zone-name $privateDNSZone
    

    Para mais informações, consulte a referência do comando az network private-endpoint dns-zone-group create.

  8. Confirme que o acesso direto ao seu endpoint privado está negado.

    Quando cria um endpoint privado para uma aplicação de Serviços de Aplicações, o acesso público fica implicitamente desativado. Se tentar aceder à sua aplicação web backend usando o URL predefinido, o seu acesso é negado.

    Num navegador, introduza o URL predefinido da sua aplicação web backend, como <backend-app-name>.azurewebsites.net.

    A mensagem do navegador indica que o acesso direto está negado:

    Captura de ecrã da mensagem do navegador quando o acesso direto à aplicação de backend é proibido.

    Para obter mais informações sobre restrições de acesso ao Serviço de Aplicativo com pontos de extremidade privados, consulte Restrições de acesso do Serviço de Aplicativo do Azure.

Configurar a integração de rede virtual

Depois de criar a infraestrutura de rede virtual, pode configurar a integração da rede virtual na sua aplicação web frontend. A integração de rede virtual permite que o tráfego de saída flua diretamente para a rede virtual. Por predefinição, apenas o tráfego IP local definido no espaço de endereços privados RFC-1918 > Private Address Space é encaminhado para a rede virtual. Este nível de encaminhamento é o que precisas para ativar endpoints privados.

Ative a integração de rede virtual na sua aplicação web frontend. O comando seguinte assume que a sub-rede e a aplicação web estão localizadas no mesmo grupo de recursos.

az webapp vnet-integration add --resource-group $resourceGroupName --name $frontendAppName --vnet $virtualNetworkName --subnet $networkIntegrationSubnet

Para mais informações, consulte a documentação de referência do comando az webapp vnet-integration add.

Para encaminhar todo o tráfego para a rede virtual, veja Gerenciar encaminhamento de integração de rede virtual. O encaminhamento de todo o tráfego também pode ser usado se quiser encaminhar o tráfego da internet através da sua rede virtual, como através de um Rede Virtual do Azure NAT ou Azure Firewall.

Permitir a implementação na aplicação web de backend

Como a sua aplicação web backend não é acessível publicamente, deve permitir que a sua ferramenta de implementação contínua chegue à sua aplicação, tornando o site SCM acessível publicamente a partir da internet. O próprio aplicativo Web principal pode continuar a negar todo o tráfego.

  1. Habilite o acesso público para o aplicativo Web back-end.

    az webapp update --resource-group $resourceGroupName --name $backendAppName --set publicNetworkAccess=Enabled
    
  2. Defina a ação de regra incomparável para o aplicativo Web principal para negar todo o tráfego.

    Essa configuração nega acesso público ao aplicativo Web principal, embora a configuração geral de acesso ao aplicativo esteja definida para permitir acesso público.

    az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \
       --resource-type sites --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Deny
    
  3. Defina a ação de regra incomparável para o site do SCM para permitir todo o tráfego.

    az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \
       --resource-type sites --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow
    

Restrição do acesso FTP e SCM

Como o seu site de SCM backend é acessível ao público, precisa de o proteger com melhor segurança.

  1. Desative o acesso FTP tanto para a aplicação Web do frontend como para a do backend:

    az resource update --resource-group $resourceGroupName --name ftp --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false
    
    az resource update --resource-group $resourceGroupName --name ftp --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=false
    
  2. Desative o acesso básico de autenticação às portas WebDeploy e aos sites SCM/ferramentas avançadas para ambas as aplicações web:

    az resource update --resource-group $resourceGroupName --name scm --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false
    
    az resource update --resource-group $resourceGroupName --name scm --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=false
    

Quando desativa a autenticação básica no App Service, limita o acesso aos endpoints FTP e SCM a utilizadores registados com o Microsoft Entra ID. Esta ação protege ainda mais as suas aplicações. Para mais informações sobre como desativar a autenticação básica, incluindo como testar e monitorizar logins, consulte Desabilitar a autenticação básica no App Service.

Configurar implementação contínua com GitHub Actions

Para este procedimento, precisa de duas aplicações prontas para implementar nas suas aplicações de front-end e back-end do App Service. Para aceder às aplicações web, precisas de um principal de serviço e implementação contínua com GitHub Actions.

Obtenha aplicações web para testes de implementação

Os repositórios Azure Samples no GitHub fornecem aplicações Node.js exemplos para implementação.

  1. No navegador, aceda à aplicação de exemplo Node.js Backend sample app.

    Faz um fork no repositório do GitHub para teres a tua própria cópia para fazer alterações. Este exemplo constrói uma aplicação 'Hello World'. Implementas esta aplicação na tua aplicação web de backend.

  2. Repita o mesmo processo para a aplicação de exemplo Node.js Frontend.

    Faz um fork no repositório do GitHub para teres a tua própria cópia para fazer alterações. Este exemplo constrói uma aplicação web que recolhe e exibe o conteúdo de uma URL. Implementas esta aplicação na tua aplicação frontend web.

Configurar o principal de serviço

Precisa de um princípio de serviço para a sua aplicação web frontend e para a aplicação web backend.

  1. Crie um principal de serviço.

    Defina o marcador de posição <service-principal-name> como o nome do seu novo principal de serviço, por exemplo zava-service-principal.

    Substitua os outros valores dos parâmetros <placeholder> pelas informações dos seus próprios recursos.

    # Define a variable for the service principal name
    servicePrincipalName=<service-principal-name>
    
    # Link the private endpoint to the Private DNS 
    
     az ad sp create-for-rbac --name <service-principal-name> --role contributor --scopes \
       /subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<frontend-app-name> \
       /subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<backend-app-name>
    

    A saída é um objeto JSON com as credenciais de atribuição de função que fornecem acesso aos seus aplicativos do Serviço de Aplicativo.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "<service-principal-name>",
      "password": "0Aa!1Bb!2Cc!3Dd!4Ee!5Ff!6Gg!7Hh!8Ii!9Jj!",
      "tenantId": "aaaabbbb-6666-cccc-7777-dddd8888eeee"
    }
    

    O JSON inclui a palavra-passe do seu principal de serviço, que só é visível neste momento.

    Tip

    É uma boa prática conceder acesso mínimo. Neste exemplo, o âmbito está limitado apenas às aplicações, não a todo o grupo de recursos.

  2. Copie o objeto JSON para que tenha um registo do nome principal de serviço.

  3. Forneça as suas credenciais de principal de serviço à operação de iniciar sessão no Azure como parte do seu fluxo de trabalho do GitHub Actions.

    Guarda as credenciais como segredos do GitHub que são referenciados no teu fluxo de trabalho.

    1. Num navegador, vai ao repositório bifurcado da tua aplicação de backend Node.js no GitHub.

    2. Vai a Definições>Segurança>Segredos e variáveis>Ações.

    3. Selecione Novo segredo de repositório e crie um segredo para cada uma das seguintes definições.

      Usa os valores da tua saída JSON.

      Definições Valor Example
      AZURE_CLIENT_ID <application/client-id> 00001111-aaaa-2222-bbbb-3333cccc4444
      AZURE_TENANT_ID <tenant-id> aaaabbbb-6666-cccc-7777-dddd8888eeee
      AZURE_SUBSCRIPTION_ID <subscription-id> cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a
    4. Repete este processo para o repositório forked da tua aplicação frontend Node.js na GitHub.

Configurar implementação contínua com GitHub Actions

Pode configurar uma implementação contínua com o GitHub Actions.

  1. No portal Azure, vá para a página Descrição geral da sua aplicação Web de front-end.

  2. No menu à esquerda, selecione Centro de Implantação (Deployment>Deployment Center).

  3. No separador Settings, defina a opção Source para GitHub:

    Captura de ecrã que mostra como escolher a fonte de implementação para a aplicação web frontend no portal Azure.

  4. Se você estiver implantando a partir do GitHub pela primeira vez, selecione Autorizar e siga os prompts de autorização. Se você quiser implantar a partir do repositório de um usuário diferente, selecione Alterar conta.

  5. Depois de autorizar a sua conta de Azure com GitHub, selecione Organization, Repository e Branch para configurar o CI/CD. Se não conseguires encontrar uma organização ou repositório, talvez precises de ativar mais permissões no GitHub. Para mais informações, consulte Gerir o acesso dos utilizadores aos repositórios da sua organização.

    Definições Valor
    Organização <your-GitHub-organization>
    Repositório <forked-repository-name>
    Filial principal
  6. Selecione Guardar.

  7. Repita este processo para a sua aplicação web backend e para o repositório forked correspondente.

Validar ligações e acesso à aplicação

Agora está pronto para verificar as conexões e o acesso às suas aplicações web de front-end e back-end.

  1. Tente aceder diretamente à sua aplicação Web de back-end utilizando o respetivo URL, https://<backend-app-name>.azurewebsites.net.

    Deverá ver a seguinte mensagem do navegador:

    Captura de ecrã da mensagem do navegador quando é proibido o acesso direto à aplicação de backend.

    Se conseguires aceder à aplicação, verifica a tua configuração:

    • Confirma que o endpoint privado está corretamente configurado.

    • Confirme que as restrições de acesso à sua aplicação estão definidas para negar todo o tráfego à aplicação web principal.

  2. Agora tente aceder diretamente à sua aplicação web de frontend utilizando o respetivo URL, https://<frontend-app-name>.azurewebsites.net.

    Quando a ligação é bem-sucedida, vê a página seguinte:

    Captura de ecrã de uma ligação bem-sucedida à aplicação frontend a correr no navegador.

  3. Na caixa do URL, introduza o URL da sua aplicação web backend, https://<backend-app-name>.azurewebsites.net, e selecione Buscar.

    Se configurares as ligações corretamente, a página atualiza-se para mostrar o conteúdo da mensagem da aplicação web de backend:

    Captura de ecrã do conteúdo do navegador depois da aplicação frontend tentar aceder à aplicação backend.

    Todo o tráfego de saída da aplicação web frontend passa pela rede virtual. A sua aplicação Web de front-end está a ligar-se de forma segura à sua aplicação Web de back-end através do ponto final privado.

    Se algo estiver errado com as suas ligações, verá a mensagem Erro 403 - Proibido na saída.

Estabelecer uma sessão SSH e abrir um shell remoto

Valide que a aplicação web de frontend está a aceder à aplicação web de backend através da ligação privada, utilizando SSH para aceder a uma instância de frontend.

  1. Estabeleça uma sessão SSH no contentor web da sua aplicação e abra um shell remoto no seu navegador:

    az webapp ssh --resource-group $resourceGroupName --name $frontendAppName
    

    Para mais informações, consulte a referência do comando az webapp ssh.

  2. Depois de a linha de comandos abrir no seu navegador, confirme que a sua aplicação Web de back-end está acessível utilizando o endereço IP privado da sua aplicação Web de back-end.

    Nos comandos seguintes, substitua os valores dos <placeholder> parâmetros pela informação do seu próprio recurso.

    1. Executar o comando nslookup:

      nslookup <backend-app-name>.azurewebsites.net
      
    2. Execute novamente o curl comando para validar o conteúdo do site:

      curl https://<backend-app-name>.azurewebsites.net
      

    Captura de ecrã de uma sessão SSH para uma instância frontend a mostrar como validar as ligações da aplicação ao backend.

    O nslookup comando deve ser resolvido para o endereço IP privado da sua aplicação web de backend. O endereço IP privado deve ser um endereço da sua rede virtual.

    Pode confirmar o seu endereço IP privado no portal Azure. Aceda à página Definições>Rede da sua aplicação Web de back-end.

    Captura de ecrã que mostra a página de Rede de uma aplicação web no portal Azure com o endereço IP de entrada destacado.

  3. Repita os mesmos comandos nslookup e curl noutro terminal (que não seja uma sessão de SSH nas suas instâncias de front-end).

    Captura de ecrã de um terminal externo a executar os comandos nslookup e curl da aplicação Web de back-end, mostrando que o acesso é proibido.

    O nslookup comando devolve o IP público da aplicação web do backend. Como o acesso público à aplicação web do backend está desativado, se tentar aceder ao IP público, recebe um erro de acesso negado. Este erro significa que o site não está acessível a partir da internet pública, que é o comportamento pretendido.

    O nslookup comando não resolve para o IP privado porque o endereço só pode ser resolvido dentro da rede virtual através da zona DNS privada. Apenas a aplicação web frontend está dentro da rede virtual. Se tentar executar o curl comando na aplicação web backend a partir do terminal externo, o HTML devolvido contém a mensagem de Erro 403, Proibido - A aplicação web que tentou aceder bloqueou o seu acesso. Alguns terminais também mostram o mesmo HTML da página de erro devolvida quando tenta aceder diretamente à aplicação web do backend.

Limpeza de recursos

Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se achar que não vai precisar destes recursos no futuro, execute o seguinte comando no Cloud Shell para eliminar o grupo de recursos.

Substitua o valor do <placeholder> parâmetro pela informação do seu próprio recurso:

az group delete --name <resource-group>

Este comando pode demorar vários minutos a concluir.

Perguntas mais frequentes

Neste tutorial, implementaste uma infraestrutura básica para suportar uma aplicação web segura de nível N. O App Service oferece funcionalidades que podem ajudar a garantir que está a executar aplicações que seguem as melhores práticas e recomendações de segurança.

Esta secção contém respostas a perguntas frequentes que podem ajudá-lo a proteger ainda mais as suas aplicações e a implementar e gerir os seus recursos de acordo com as melhores práticas.

Implementar com métodos diferentes do principal de serviço

Neste tutorial, desativaste a autenticação básica. Não podes autenticar com o site SCM do backend usando um nome de utilizador e palavra-passe, ou usando um perfil de publicação. No entanto, em vez de se autenticar com uma identidade de serviço, pode utilizar credenciais do OpenID Connect.

Configurar a implementação do GitHub Actions no App Service

O Azure gera automaticamente um ficheiro de workflow no teu repositório. Novos commits no repositório e ramo selecionados são implementados continuamente na sua aplicação de Serviços de Aplicação. Podes acompanhar os commits e implementações no separador Logs na GitHub.

Um arquivo de fluxo de trabalho padrão que usa um perfil de publicação para autenticar no Serviço de Aplicativo é adicionado ao repositório do GitHub. Você pode visualizar este arquivo indo para o <repo-name>/.github/workflows/ diretório.

Confirme o acesso público seguro ao site SCM de backend

Quando bloqueia o acesso FTP e SCM, pode garantir que apenas os principais suportados por Microsoft Entra podem aceder ao endpoint SCM, mesmo que este seja acessível publicamente. Esta configuração ajuda a tranquilizá-lo de que a sua aplicação web backend continua segura.

Implementar sem um site SCM de back-end aberto

Se está preocupado em permitir o acesso público ao site SCM, ou tem restrições de política, considere outras opções de implementação de Serviços de Aplicações, como correr a partir de um pacote ZIP.

Implemente esta arquitetura com um modelo

Os recursos que criaste neste tutorial podem ser implementados usando um modelo do Azure Resource Manager (template ARM) ou Bicep. A aplicação ligada a um ficheiro Bicep de uma aplicação Web de back-end permite-lhe criar uma solução de aplicação segura em N camadas.

Para aprender a implementar modelos ARM e Bicep, consulte Implementação de ficheiros Bicep através do CLI do Azure.