Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, configura uma aplicação de Serviços de Aplicação com comunicação segura e isolada da rede para serviços de back-end. O exemplo de cenário utilizado está no Tutorial: Ligação Segura de Serviço Cognitivo a partir do App Service usando Key Vault. Quando terminar, tem uma aplicação de App Service que acede tanto ao Key Vault como ao Foundry Tools através de uma rede virtual Azure. Nenhum outro tráfego é autorizado a aceder a esses recursos de back-end. Todo o tráfego será isolado dentro da sua rede virtual através da integração da rede virtual e de endpoints privados.
Num serviço multi-inquilino, o tráfego de rede de saída da sua aplicação de Serviços de Aplicações para outros serviços Azure partilha o mesmo ambiente com outras aplicações ou até com outras subscrições. Embora o tráfego em si possa ser encriptado, certos cenários podem exigir um nível extra de segurança através do isolamento da comunicação de back-end de outro tráfego de rede. Estes cenários são normalmente acessíveis a grandes empresas com um elevado nível de especialização, mas o App Service coloca-os ao alcance da integração de redes virtuais.
Nesta arquitetura:
- O tráfego público para os serviços de back-end está bloqueado.
- O tráfego de saída do App Service é encaminhado para a rede virtual e pode chegar aos serviços de back-end.
- O App Service pode realizar resolução DNS para os serviços de back-end através das zonas DNS privadas.
O que você vai aprender:
- Criar uma rede virtual e sub-redes para integração de redes virtuais de Serviços de Aplicações
- Criar zonas DNS privadas
- Criar pontos de extremidade privados
- Configurar a integração da rede virtual no App Service
Pré-requisitos
Tutorial Completo: Ligação segura ao Serviço Cognitivo a partir do App Service usando o Key Vault e crie a aplicação detetor de línguas.
Certifique-se de definir as seguintes variáveis de ambiente do Tutorial: Ligação Segura ao Serviço Cognitivo a partir do App Service usando o Key Vault:
groupName=myKVResourceGroup region=canadacentral csResourceName=<cs-resource-name> appName=<app-name> vaultName=<vault-name> planName=<plan-name> csResourceKVUri=<cs-resource-kv-uri> csKeyKVUri=<cs-key-kv-uri>
Criar uma rede virtual e sub-redes
Crie uma rede virtual. Substitua <o nome> da rede virtual por um nome único.
# Save the virtual network name as a variable for convenience vnetName=<virtual-network-name> az network vnet create --resource-group $groupName --location $region --name $vnetName --address-prefixes 10.0.0.0/16Crie uma sub-rede para a integração da rede virtual do App Service.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name vnet-integration-subnet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms --private-endpoint-network-policies EnabledPara o App Service, a recomendação é que a sub-rede de integração de rede virtual tenha um bloco CIDR de
/26, no mínimo. (Ver requisitos de sub-redes de integração de rede virtual.)/24é mais do que suficiente.--delegations Microsoft.Web/serverfarmsespecifica que a sub-rede é delegada para a integração de rede virtual do App Service.Crie outra sub-rede para os endpoints privados.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --private-endpoint-network-policies DisabledPara sub-redes de endpoints privados, deve-se desabilitar as políticas de rede para endpoints privados.
Criar zonas DNS privadas
Como os seus recursos do Key Vault e do Foundry Tools estarão localizados atrás de endpoints privados, precisa de definir zonas DNS privadas para eles. Estas zonas são usadas para alojar os registos DNS dos endpoints privados e permitem aos clientes encontrar os serviços de back-end pelo nome.
Crie duas zonas DNS privadas, uma para o seu recurso Foundry Tools e outra para o seu cofre de chaves.
az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.netPara obter mais informações sobre essas configurações, consulte Configuração de DNS do Ponto de Extremidade Privado do Azure.
Liga as zonas DNS privadas à rede virtual.
az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
Criar pontos de extremidade privados
Na sub-rede privada do endpoint da sua rede virtual, crie um endpoint privado para o seu recurso Foundry Tools.
# Get Foundry Tools resource ID csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnetCrie um grupo de zonas DNS para o endpoint privado das Foundry Tools. Um grupo de zonas DNS é uma ligação entre a zona DNS privada e o endpoint privado. Este link ajuda-te a atualizar automaticamente a zona DNS privada quando há uma atualização para o endpoint privado.
az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.comBloqueie o tráfego público para o recurso Foundry Tools.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat the following command until the output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateObservação
Certifique-se de que o estado de provisionamento da sua alteração é
"Succeeded". Pode então observar a mudança de comportamento na aplicação de exemplo. Ainda podes carregar a aplicação, mas se tentares selecionar o botão Detetar , recebes umHTTP 500erro. A aplicação perdeu a ligação ao recurso Foundry Tools devido à rede partilhada.Repita os passos anteriores para o cofre de chaves.
# Create a private endpoint for the key vault vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet # Create a DNS zone group for the endpoint az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net # Block public traffic to the key vault az keyvault update --name $vaultName --default-action DenyForçar uma reobtenção imediata das referências ao cofre de chaves na sua app ao redefinir as definições da app. (Para mais informações, veja Rotação.)
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"Observação
Mais uma vez, pode observar a mudança de comportamento na aplicação de exemplo. Já não podes carregar a aplicação porque ela já não pode aceder às referências do cofre de chaves. A aplicação perdeu a ligação ao cofre de chaves através da rede partilhada.
Os dois endpoints privados só são acessíveis a clientes dentro da rede virtual que criou. Nem sequer podes aceder aos segredos no cofre de chaves a partir da página de Segredos no portal Azure, porque o portal acede a eles através da internet pública. (Consulte a gestão dos recursos restritos.)
Configure a integração da rede virtual na sua aplicação
Escale a aplicação para um escalão de preços suportado. ( Veja Integrar a sua aplicação com uma rede virtual Azure.)
az appservice plan update --name $planName --resource-group $groupName --sku S1Aplicar o HTTPS para pedidos recebidos. (Este passo não está relacionado com o cenário atual, mas é importante.)
az webapp update --resource-group $groupName --name $appName --https-onlyHabilite a integração de rede virtual em seu aplicativo.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetA integração de rede virtual permite que o tráfego de saída flua diretamente para a rede virtual. Por padrão, apenas o tráfego IP local definido no RFC-1918 é roteado para a rede virtual, que é o que você precisa para os pontos de extremidade privados. Para informações sobre como encaminhar todo o seu tráfego para a rede virtual, veja Gerenciar o encaminhamento de integração de rede virtual. Também pode encaminhar todo o tráfego se quiser encaminhar o tráfego da internet através da sua rede virtual, por exemplo, através do Azure NAT Gateway ou do Azure Firewall.
Num navegador, vá a
<app-name>.azurewebsites.nete aguarde que a integração entre em vigor. Se aparecer um erro HTTP 500, espere alguns minutos e tente novamente. Se conseguires carregar a página e obter resultados de deteção, estás a ligar-te ao endpoint do Foundry Tools usando referências do Azure Key Vault.Observação
Se continuares a receber erros HTTP 500 durante muito tempo, pode ajudar forçar novamente a recuperação das referências do cofre de chaves :
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
Gerir os recursos bloqueados
Dependendo dos seus cenários, pode não conseguir gerir os recursos privados protegidos pelo endpoint através do portal Azure, Azure CLI ou Azure PowerShell (por exemplo, Key Vault). Estas ferramentas fazem todas chamadas REST API para aceder aos recursos através da internet pública e são bloqueadas pela sua configuração. Aqui estão algumas opções para aceder aos recursos bloqueados:
- Para o Key Vault, adicione o IP público da sua máquina local para visualizar ou atualizar os segredos protegidos por endpoints privados.
- Se a sua rede local for estendida para a rede virtual Azure através de um gateway VPN ou Azure ExpressRoute, pode gerir os recursos protegidos do endpoint privado diretamente a partir da sua rede local.
- Gerir os recursos protegidos por endpoints privados a partir de um servidor intermediário na rede virtual.
- Implementa Cloud Shell na rede virtual.
Limpeza de recursos
Nos passos anteriores, criou recursos do Azure num grupo de recursos. Se não espera precisar destes recursos no futuro, elimine o grupo de recursos executando o seguinte comando na Cloud Shell:
az group delete --name $groupName
Esse comando pode levar um minuto para ser executado.