De forma predeterminada, los servicios salientes en el entorno estándar de App Engine, como las APIs de recuperación de URL, Sockets y Mail, usan un grupo regional de direcciones IP dinámicas que se comparten en todas las cargas de trabajo sin servidores. Los rangos de direcciones IP en este grupo cambian de forma rutinaria, por lo que dos llamadas secuenciales desde la misma aplicación pueden originarse en direcciones IP diferentes.
Debido a que otras cargas de trabajo sin servidores comparten este grupo de direcciones IP predeterminado, no confíes en él cuando necesites una dirección IP de origen predecible o una reputación de IP aislada. En su lugar, configura una dirección IP saliente estática para tu servicio en las siguientes situaciones:
- Te conectas a una base de datos o API externa que usa una lista de direcciones IP permitidas o un firewall.
- Te conectas a extremos externos sensibles a la reputación, como puertas de enlace de pagos, bases de datos alojadas o APIs de socios protegidas por firewalls de aplicaciones web (WAF) de terceros. El tráfico ruidoso de otro usuario en el grupo de IP compartido predeterminado puede degradar la reputación de la IP y hacer que los WAF externos bloqueen o limiten tus solicitudes.
- Ejecutas análisis de red autorizados, enumeración de puertos, creación de huellas digitales de hosts, sondeo de vulnerabilidades, extracción de datos web o cargas de trabajo de pruebas de carga.
Si solo necesitas buscar los rangos de direcciones IP asociados con el tráfico saliente predeterminado de tu servicio, puedes encontrar los rangos de direcciones IP actuales que incluyen las direcciones IP de App Engine.
Direcciones IP para servicios de App Engine
Puedes encontrar los rangos de direcciones IP actuales para los servicios de App Engine con dos archivos JSON que publica Google:
Google publica una lista de direcciones IP de su propiedad en goog.json.
Google también publica una lista de los rangos de direcciones IP externas globales y regionales disponibles para los recursos de Google Cloud del cliente en cloud.json.
Si se quitan todos los rangos en cloud.json de los que están en goog.json, se obtiene un
conjunto grande de direcciones IP que usan las APIs de Google globales y otros servicios de Google,
incluidos los productos orientados al cliente fuera de Google Cloud.
Estas listas se actualizan con frecuencia.
Puedes usar la siguiente secuencia de comandos de Python para crear una lista de rangos de direcciones IP que incluyan los que usan las APIs y los servicios de Google.
Para obtener información sobre cómo ejecutar esta secuencia de comandos, consulta Cómo ejecutar.
Configura una dirección IP saliente estática
Para configurar una dirección IP estática para tu servicio del entorno estándar de App Engine, enruta el tráfico saliente a una red de nube privada virtual (VPC) con la salida de VPC directa (versión preliminar) o el Acceso a VPC sin servidores con Cloud Router y Cloud NAT. Agregar una puerta de enlace de Cloud NAT a tu red de VPC enruta el tráfico saliente de App Engine a través de tu dirección IP estática reservada.
Si tu servicio escala a muchas instancias o abre muchas conexiones simultáneas, como durante el análisis de red autorizado, asigna varias direcciones IP estáticas a Cloud NAT. También puedes aumentar la cantidad mínima de puertos por instancia o habilitar la asignación dinámica de puertos para evitar el agotamiento de puertos. Obtén más información sobre cómo las puertas de enlace de Cloud NAT usan direcciones IP y puertos.
Enrutar el tráfico a través de Cloud NAT no agrega un salto adicional en tu pila de red, ya que la puerta de enlace de Cloud NAT y el Cloud Router proporcionan solo un plano de control, y los paquetes no pasan por la puerta de enlace de Cloud NAT ni por el Cloud Router.
En los siguientes pasos, se muestra cómo configurar una dirección IP saliente estática para el servicio del entorno estándar de App Engine.
Asegúrate de tener la función roles/compute.networkAdmin o una función personalizada con los mismos permisos.
Crea una subred dentro de tu red de VPC para el tráfico de App Engine. Esto garantiza que otros recursos de la red de VPC no puedan usar la dirección IP estática.
gcloud compute networks subnets create SUBNET_NAME \ --range=RANGE \ --network=NETWORK_NAME \ --region=REGION
En el comando anterior, reemplaza los siguientes valores:
SUBNET_NAMEpor el nombre que deseas darle a la subredRANGEpor el rango de IP en formato CIDR que deseas asignar a esta subred (p. ej.,10.124.0.0/28)NETWORK_NAMEpor el nombre de la red de VPCREGIONpor la región del servicio de App Engine
Conecta tu servicio de App Engine a la subred.
Sigue la guía Conéctate a una red de VPC y especifica el nombre de la subred que creaste en el paso anterior para la subred del conector.
Crea un Cloud Router nuevo. Cloud Router es un componente necesario del plano de control para Cloud NAT.
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
En el comando anterior, reemplaza los siguientes valores:
ROUTER_NAMEpor un nombre para el recurso de Cloud Router que deseas crearNETWORK_NAMEpor el nombre de la red de VPCREGIONpor la región en la que deseas crear una puerta de enlace NAT
Reserva una dirección IP estática.
Esta es la dirección que usará tu servicio para enviar tráfico saliente. Un recurso de dirección IP reservada retiene la dirección IP subyacente cuando el recurso al que está asociado se borra y se vuelve a crear. Esta dirección IP se tiene en cuenta para las cuotas de direcciones IP estáticas en tu proyecto de Google Cloud .
gcloud compute addresses create ORIGIN_IP_NAME \ --region=REGION
En el comando anterior, reemplaza los siguientes valores:
ORIGIN_IP_NAMEpor el nombre que deseas asignar al recurso de dirección IPREGIONpor la región en la que se ejecutará el router de Cloud NAT. Lo ideal sería que el router esté en la misma región en la que está tu servicio de App Engine para minimizar la latencia y los costos de red.
Usa el comando
compute addresses describepara ver el resultado:gcloud compute addresses describe ORIGIN_IP_NAME
Crea una puerta de enlace de Cloud NAT y especifica tu dirección IP.
El tráfico que se origina en la subred pasará por esta puerta de enlace y usará la dirección IP estática que reservaste en el paso anterior.
gcloud compute routers nats create NAT_NAME \ --router=ROUTER_NAME \ --region=REGION \ --nat-custom-subnet-ip-ranges=SUBNET_NAME \ --nat-external-ip-pool=ORIGIN_IP_NAME
En el comando anterior, reemplaza los siguientes valores:
NAT_NAMEpor un nombre para el recurso de puerta de enlace de Cloud NAT que deseas crearROUTER_NAMEpor el nombre de tu Cloud RouterREGIONpor la región en la que deseas crear una puerta de enlace NATORIGIN_IP_NAMEpor el nombre del recurso de dirección IP reservada que creaste en el paso anterior
Establece el parámetro de configuración de salida del Acceso a VPC sin servidores en
all-traffic.De forma predeterminada, los servicios de App Engine que usan el Acceso a VPC sin servidores solo envían tráfico interno a tu red de VPC. Para enviar tráfico con destinos externos a tu red de VPC a fin de que tenga la dirección IP estática que especificaste, debes cambiar el parámetro de configuración de salida.
Especifica el parámetro de configuración de salida en el archivo
app.yamldel servicio:vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME egress_setting: all-traffic
Reemplaza lo siguiente:
PROJECT_IDpor el ID del proyecto de Google Cloud .REGIONpor la región en la que se encuentra el conectorCONNECTOR_NAMEpor el nombre de tu conector
Implementa el servicio:
gcloud app deploy