Configuración del acceso de red privada para el almacenamiento de back-end en la red virtual
Nota:
Los planes de Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retiro de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.
El plan de consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para obtener más información, consulte Migrar el plan de consumo y dedicado Azure Spring Apps Standard a Azure Container Apps.
Este artículo se aplica a:✅ Estándar ✅ Enterprise
En este artículo se explica cómo configurar el acceso de red privada al almacenamiento de back-end para la aplicación dentro de la red virtual.
Al implementar una aplicación en una instancia de servicio de Azure Spring Apps con inyección de red virtual, la instancia de servicio se basa en el almacenamiento de back-end para hospedar recursos asociados, incluidos los archivos JAR y los registros. Aunque la configuración predeterminada enruta el tráfico a este almacenamiento back-end a través de la red pública, puede activar la característica de acceso al almacenamiento privado. Esta característica le permite dirigir el tráfico a través de la red privada, mejorar la seguridad y mejorar potencialmente el rendimiento.
Nota:
Esta característica solo se aplica a una instancia de servicio insertada de red virtual de Azure Spring Apps.
Antes de habilitar esta característica para la instancia de servicio de Azure Spring Apps, asegúrese de que hay al menos dos direcciones IP disponibles en la subred del entorno de ejecución del servicio.
Habilitar o deshabilitar esta característica cambia la resolución DNS al almacenamiento back-end. Durante un breve período de tiempo, es posible que experimente implementaciones que no puedan establecer una conexión con el almacenamiento de back-end o que no puedan resolver su punto de conexión durante la actualización.
Después de habilitar esta característica, el almacenamiento back-end solo es accesible de forma privada, por lo que tiene que implementar la aplicación dentro de la red virtual.
Requisitos previos
- Suscripción a Azure. Si no tiene una suscripción, cree una cuenta gratuita antes de empezar.
- CLI de Azure versión 2.56.0 o posterior.
- Una instancia de servicio de Azure Spring Apps existente implementada en una red virtual. Para obtener más información, consulte Implementación de Azure Spring Apps en una red virtual.
Habilitación del acceso de almacenamiento privado al crear una nueva instancia de Azure Spring Apps
Al crear una instancia de Azure Spring Apps en la red virtual, use el siguiente comando para pasar el argumento --enable-private-storage-access true
para habilitar el acceso de almacenamiento privado. Para obtener más información, consulte Implementación de Azure Spring Apps en una red virtual.
az spring create \
--resource-group "<resource-group>" \
--name "<Azure-Spring-Apps-instance-name>" \
--vnet "<virtual-network-name>" \
--service-runtime-subnet "<service-runtime-subnet>" \
--app-subnet "<apps-subnet>" \
--location "<location>" \
--enable-private-storage-access true
Se crea un grupo de recursos más en la suscripción para hospedar los recursos de vínculo privado para la instancia de Azure Spring Apps. Este grupo de recursos se denomina ap-res_{service instance name}_{service instance region}
.
Hay dos conjuntos de recursos de vínculo privado implementados en el grupo de recursos, cada uno compuesto por los siguientes recursos de Azure:
- Un punto de conexión privado que representa el punto de conexión privado de la cuenta de almacenamiento de back-end.
- Una interfaz de red (NIC) que mantiene una dirección IP privada dentro de la subred del entorno de ejecución del servicio.
- Una zona DNS privada implementada para la red virtual, con un registro A de DNS también creado para la cuenta de almacenamiento dentro de esta zona DNS.
Importante
El servicio Azure Spring Apps administra completamente los grupos de recursos. No elimine ni modifique manualmente ningún recurso dentro de estos grupos de recursos.
Habilitación o deshabilitación del acceso de almacenamiento privado para una instancia de Azure Spring Apps existente
Use el siguiente comando para actualizar una instancia de Azure Spring Apps existente para habilitar o deshabilitar el acceso de almacenamiento privado:
az spring update \
--resource-group "<resource-group>" \
--name "<Azure-Spring-Apps-instance-name>" \
--enable-private-storage-access <true-or-false>
Uso de la resolución DNS central
Una arquitectura de administración centralizada de DNS se documenta en la arquitectura de red radial en integración de Private Link y DNS a escala. En esta arquitectura, todas las zonas DNS privadas se implementan y administran de forma centralizada en una red virtual central diferente a la instancia de servicio de Azure Spring Apps. Si usa esta arquitectura, puede habilitar la resolución DNS central para el acceso de almacenamiento privado mediante la configuración de DNS de forma adecuada. Esta configuración garantiza que:
- Cuando se crea un punto de conexión privado, los registros DNS correspondientes se agregan automáticamente a la zona DNS privada centralizada.
- Los registros DNS se deben administran según el ciclo de vida del punto de conexión privado, lo que significa que se quita automáticamente cuando se elimina el punto de conexión privado.
En las secciones siguientes se explica cómo habilitar la resolución DNS central para blobs de Azure Storage mediante Azure Policy, suponiendo que ya tiene la zona DNS privada privatelink.blob.core.windows.net
configurada en la red virtual central. Los mismos principios se aplican a los archivos de Azure Storage y a otros servicios de Azure que admiten Private Link.
Definición de directiva
Además de las zonas DNS privadas debe crear una definición de Azure Policy personalizadas. Para obtener más información, consulte Tutorial: Creación de una definición de directiva personalizada. Esta definición crea automáticamente el registro DNS necesario en la zona DNS privada central al crear un punto de conexión privado.
La siguiente directiva se desencadena cuando crea un recurso de punto de conexión privado con un servicio específico groupId
. groupId
es el identificador del grupo obtenido del recurso remoto o servicio al que se debe conectar este punto de conexión privado. En este ejemplo, el groupId
para blobs de Azure Storage es blob
. Para obtener más información sobre groupId
para otros servicios de Azure, consulte las tablas de valores de zona DNS del punto de conexión privado de Azure, en la columna Subrecurso.
A continuación, la directiva se desencadena una implementación de privateDNSZoneGroup
en el punto de conexión privado, que asocia el punto de conexión privado con la zona DNS privada especificada como en el parámetro. En el siguiente ejemplo, el id. de recurso de la zona DNS privada es /subscriptions/<subscription-id>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/privateDnsZones/privatelink.blob.core.windows.net
:
{
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Network/privateEndpoints"
},
{
"value": "[contains(resourceGroup().name, 'ap-res_')]",
"equals": "true"
},
{
"count": {
"field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
"where": {
"field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
"equals": "blob"
}
},
"greaterOrEquals": 1
}
]
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"evaluationDelay": "AfterProvisioningSuccess",
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"privateDnsZoneId": {
"type": "string"
},
"privateEndpointName": {
"type": "string"
},
"location": {
"type": "string"
}
},
"resources": [
{
"name": "[concat(parameters('privateEndpointName'), '/deployedByPolicy')]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2020-03-01",
"location": "[parameters('location')]",
"properties": {
"privateDnsZoneConfigs": [
{
"name": "storageBlob-privateDnsZone",
"properties": {
"privateDnsZoneId": "[parameters('privateDnsZoneId')]"
}
}
]
}
}
]
},
"parameters": {
"privateDnsZoneId": {
"value": "[parameters('privateDnsZoneId')]"
},
"privateEndpointName": {
"value": "[field('name')]"
},
"location": {
"value": "[field('location')]"
}
}
}
}
}
}
},
"parameters": {
"privateDnsZoneId": {
"type": "String",
"metadata": {
"displayName": "privateDnsZoneId",
"description": null,
"strongType": "Microsoft.Network/privateDnsZones"
}
}
}
}
Asignación de directiva
Después de implementar la definición de directiva, asigne la directiva en la suscripción que hospeda las instancias de servicio de Azure Spring Apps y especifique la zona DNS privada central como parámetro.
La zona DNS privada central y la instancia de servicio de Azure Spring Apps se pueden hospedar en las distintas suscripciones. En este caso, recuerde asignar el rol de Colaborador de zona de DNS privada en la suscripción y el grupo de recursos en que estén hospedadas las zonas DNS privadas a la identidad administrada creada por la asignación de directiva DeployIfNotExists
que es responsable de crear y administrar el registro DNS del punto de conexión privado en la zona DNS privada. Para más información, consulte la sección Configuración de la identidad administrada de Corregir recursos no compatibles con Azure Policy.
Después de finalizar las configuraciones, al habilitar o deshabilitar la característica de acceso de almacenamiento privado, los registros DNS de los puntos de conexión privados se registran automáticamente y se quitan después de eliminar un punto de conexión privado, en la zona DNS privada correspondiente.
Costos adicionales
La instancia de Azure Spring Apps no incurre en cargos por esta característica. Sin embargo, se le facturan los recursos de vínculo privado hospedados en la suscripción que admiten esta característica. Para más información, consulte Precios de Azure Private Link y Precios de Azure DNS.
Uso de servidores DNS personalizados
Si usa un servidor de sistema de nombres de dominio (DNS) personalizado y la dirección IP de Azure DNS 168.63.129.16
no está configurada como servidor DNS ascendente, debe enlazar manualmente todos los registros DNS de las zonas DNS privadas que se muestran en el grupo de recursos ap-res_{service instance name}_{service instance region}
para resolver las direcciones IP privadas.