Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, configurará una aplicación de App Service con comunicación segura y aislada de red a los servicios back-end. El escenario de ejemplo usado se encuentra en Tutorial: Conexión segura de Cognitive Service desde App Service mediante Key Vault. Cuando termine, tiene una aplicación de App Service que accede tanto a Key Vault como a Las herramientas de Foundry a través de una red virtual de Azure. No se permite que ningún otro tráfico acceda a esos recursos de fondo. Todo el tráfico se aislará dentro de la red virtual a través de la integración de red virtual y los puntos de conexión privados.
En un servicio multiinquilino, el tráfico de red saliente de la aplicación de App Service a otros servicios de Azure comparte el mismo entorno con otras aplicaciones o incluso con otras suscripciones. Aunque el propio tráfico se puede cifrar, ciertos escenarios pueden requerir un nivel adicional de seguridad a través del aislamiento de la comunicación de back-end de otro tráfico de red. Normalmente, estos escenarios son accesibles para grandes empresas con un alto nivel de experiencia, pero App Service lo pone al alcance de la integración de red virtual.
En esta arquitectura:
- El tráfico público a los servicios back-end está bloqueado.
- El tráfico saliente de App Service se enruta a la red virtual y puede llegar a los servicios back-end.
- App Service puede realizar la resolución de DNS para los servicios de back-end a través de las zonas DNS privadas.
Lo que aprenderá:
- Creación de una red virtual y subredes para la integración de red virtual de App Service
- Creación de zonas DNS privadas
- Creación de puntos de conexión privados
- Configuración de la integración de red virtual en App Service
Prerrequisitos
Tutorial completo: Protección de la conexión de Cognitive Service desde App Service mediante Key Vault y creación de la aplicación de detector de idioma.
Asegúrese de establecer las siguientes variables de entorno en Tutorial: Protección de la conexión de Cognitive Service desde App Service mediante 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>
Creación de una red virtual y subredes
Cree una red virtual. Reemplace <virtual-network-name> por un nombre ú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/16Cree una subred para la integración de red virtual de 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 App Service, la recomendación es que la subred de integración de red virtual tenga un bloque CIDR de
/26como mínimo. (Consulte Requisitos de subred de integración de red virtual)./24es más que suficiente.--delegations Microsoft.Web/serverfarmsespecifica que la subred se delega para la integración de red virtual de App Service.Cree otra subred para los puntos de conexión 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 DisabledEn el caso de las subredes de punto de conexión privado, debe deshabilitar las directivas de red del punto de conexión privado.
Creación de zonas DNS privadas
Dado que los recursos de Key Vault y Foundry Tools se ubicarán detrás de los puntos de conexión privados, debe definir zonas DNS privadas para ellos. Estas zonas se usan para hospedar los registros DNS para los puntos de conexión privados y permiten a los clientes encontrar los servicios back-end por nombre.
Cree dos zonas DNS privadas, una para el recurso de Foundry Tools y otra para el almacén de claves.
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 obtener más información sobre esta configuración, consulte Configuración de DNS para puntos de conexión privados de Azure.
Vincule las zonas DNS privadas a la red 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
Creación de puntos de conexión privados
En la subred del punto de conexión privado de la red virtual, cree un punto de conexión privado para el recurso de 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-subnetCree un grupo de zonas DNS para el punto de conexión privado de Foundry Tools. Un grupo de zonas DNS es un vínculo entre la zona DNS privada y el punto de conexión privado. Este vínculo le ayuda a actualizar automáticamente la zona DNS privada cuando hay una actualización al punto de conexión 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.comBloquear el tráfico público al recurso de 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.provisioningStateNota:
Asegúrese de que el estado de aprovisionamiento del cambio es
"Succeeded". A continuación, puede observar el cambio de comportamiento en la aplicación de ejemplo. Todavía puede cargar la aplicación, pero si intenta seleccionar el botón Detectar , recibirá unHTTP 500error. La aplicación ha perdido su conectividad con el recurso Foundry Tools a través de las redes compartidas.Repita los pasos anteriores para el Key Vault.
# 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 DenyForzar una reobtención inmediata de las referencias de la bóveda de claves en la aplicación restableciendo la configuración de la aplicación. (Para obtener más información, vea Rotation).
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)"Nota:
De nuevo, puede observar el cambio de comportamiento en la aplicación de ejemplo. Ya no puede cargar la aplicación porque ya no puede acceder a las referencias del almacén de claves. La aplicación ha perdido su conectividad con la bóveda de claves a través de la red compartida.
Los dos puntos de conexión privados solo son accesibles para los clientes dentro de la red virtual que creó. Ni siquiera puede acceder a los secretos en el almacén de claves desde la página Secretos de Azure Portal, ya que el portal accede a ellos a través de la red pública de Internet. (Consulte Administración de los recursos bloqueados).
Configuración de la integración de red virtual en la aplicación
Escale la aplicación hasta un plan de tarifa compatible. (Consulte Integración de la aplicación con una red virtual de Azure).
az appservice plan update --name $planName --resource-group $groupName --sku S1Exigir HTTPS para las solicitudes entrantes. (Este paso no está relacionado con el escenario actual, pero es importante).
az webapp update --resource-group $groupName --name $appName --https-onlyHabilite la integración de red virtual en la aplicación.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetLa integración de red virtual permite que el tráfico saliente fluya directamente a la red virtual. De manera predeterminada, solo el tráfico IP local definido en RFC-1918 se enruta a la red virtual, que es lo que necesita para los puntos de conexión privados. Para obtener información sobre cómo enrutar todo el tráfico a la red virtual, consulte Administración del enrutamiento de integración de red virtual. También puede enrutar todo el tráfico si desea enrutar el tráfico de Internet a través de la red virtual, por ejemplo, Azure NAT Gateway o Azure Firewall.
En un navegador, vaya a
<app-name>.azurewebsites.nety espere a que la integración surta efecto. Si recibe un error HTTP 500, espere unos minutos e inténtelo de nuevo. Si puede cargar la página y obtener resultados de detección, se va a conectar al punto de conexión de Foundry Tools mediante referencias del almacén de claves.Nota:
Si sigue recibiendo errores HTTP 500 durante mucho tiempo, puede ayudar a forzar una refetación de las referencias del almacén de claves de nuevo:
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)"
Administración de los recursos bloqueados
En función de los escenarios, es posible que no pueda administrar los recursos protegidos por puntos de conexión privados a través de Azure Portal, la CLI de Azure o Azure PowerShell (por ejemplo, Key Vault). Todas estas herramientas realizan llamadas a la API REST para acceder a los recursos a través de la red pública de Internet y están bloqueadas por la configuración. Estas son algunas opciones para acceder a los recursos bloqueados:
- En Key Vault, agregue la dirección IP pública de la máquina local para ver o actualizar los secretos protegidos por puntos de conexión privados.
- Si la red local se extiende a la red virtual de Azure a través de una puerta de enlace de VPN o Azure ExpressRoute, puede administrar los recursos protegidos del punto de conexión privado directamente desde la red local.
- Administre los recursos protegidos por puntos de conexión privados desde un servidor intermedio en la red virtual.
- Deploy Cloud Shell en la red virtual.
Limpieza de recursos
En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si no espera necesitar estos recursos en el futuro, elimine el grupo de recursos ejecutando el comando siguiente en el Cloud Shell:
az group delete --name $groupName
Este comando puede tardar un par de minutos en ejecutarse.