Establece la configuración de red

La configuración de red de Cloud Functions te permite controlar la entrada y la salida de red desde y hacia funciones individuales. Por ejemplo, puedes usar la configuración de red para los siguientes casos prácticos:

  • Proteger tus funciones mediante la implementación de un control de acceso basado en la red
  • Hacer que el tráfico de salida de una función se adhiera al firewall, al DNS y a las reglas de enrutamiento asociadas con tu red de VPC
  • Asociar el tráfico de salida de una función con una dirección IP estática

Para obtener más detalles sobre los casos de uso, consulta Casos de uso de ejemplo.

Configuración de entrada

La configuración de entrada restringe si se puede invocar una función con recursos fuera de tu proyecto de Google Cloud o del perímetro del servicio de losControles del servicio de VPC. Puedes especificar uno de los siguientes valores de configuración de entrada:

  • Permitir todo el tráfico: Opción predeterminada. Se permiten todas las solicitudes entrantes a la función, de Internet y de los recursos dentro del mismo proyecto.
  • Permitir solo el tráfico interno: Solo se permiten las solicitudes de redes de VPC en el mismo proyecto o en el perímetro de los Controles del servicio de VPC. Todas las demás solicitudes se rechazan con un error 403.
  • Permitir el tráfico interno y el proveniente de Cloud Load Balancing: Se permite el tráfico de las redes de VPC en el mismo proyecto, el mismo perímetro de Controles del servicio de VPC o Cloud Load Balancing.

Solo las funciones de HTTP de uso interno únicamente se pueden invocar mediante solicitudes HTTP que se crean dentro de una red de VPC, como las de Kubernetes Engine, Compute Engine o el entorno flexible de App Engine Esto significa que los eventos que se crean o enrutan mediante Pub/Sub, Eventarch, Cloud Scheduler, Cloud Tasks y Workflows no pueden activar estas funciones.

Puedes especificar la configuración de entrada cuando implementas o actualizas tu función con Google Cloud Console o la herramienta de línea de comandos de gcloud:

Console

  1. Abre la página Descripción general de Cloud Functions en Cloud Console:

    Ir a la página Descripción general de Cloud Functions

  2. Haz clic en Crear función. Como alternativa, haz clic en una función existente para ir a la página de detalles y haz clic en Editar.

  3. Para expandir la configuración avanzada, haz clic en Variables de entorno, herramientas de redes, tiempos de espera y más.

  4. En la sección Conexiones, selecciona un valor para Configuración de entrada.

gcloud

Usa el comando gcloud functions deploy para implementar o actualizar la función y especifica la marca --ingress-settings:

gcloud functions deploy FUNCTION_NAME \
--trigger-http \
--ingress-settings INGRESS_SETTINGS \
FLAGS...

En el ejemplo anterior, se ilustra lo siguiente:

  • FUNCTION_NAME es el nombre de la función.
  • INGRESS_SETTINGS es uno de los valores admitidos para la configuración de entrada. Los siguientes son los valores posibles:

    • all
    • internal-only
    • internal-and-gclb: permite el tráfico interno y el tráfico enviado a una IP pública que expone Cloud Load Balancing. Bloquea el tráfico enviado a cloudfunctions.net o a cualquier dominio personalizado que se configura a través de Cloud Functions. Evita que los usuarios eludan los controles de acceso (Cloud Armor, IAP) que configuran mediante Cloud Load Balancing.
  • FLAGS... hace referencia a otras marcas que pasas al comando deploy.

Si usas Google Cloud Armor con Cloud Load Balancing, puedes crear políticas de seguridad que filtren las condiciones basadas en el tráfico, como encabezados de la solicitud, el código regional, el rango de IP o la dirección IP de una solicitud entrante. Para obtener más información, consulta la descripción general de la política de seguridad de Google Cloud Armor.

Configuración de salida

La configuración de salida controla el enrutamiento de las solicitudes HTTP salientes de una función. Para especificar la configuración de salida, debes conectar la función a una red de VPC mediante un conector de Acceso a VPC sin servidores. La configuración de salida controla qué tipos de tráfico se enrutan a través del conector hacia la red de VPC.

Para la configuración de salida, puedes especificar lo siguiente:

  • Enrutar solo las solicitudes a las IP privadas mediante el conector de VPC: Opción predeterminada. Solo las solicitudes a los rangos de direcciones IP RFC 1918 y RFC 6598, o a nombres de DNS internos, se enrutan a la red de VPC. Todas las demás solicitudes se enrutan directamente a Internet.
  • Enrutar todo el tráfico mediante el conector de VPC: Todas las solicitudes salientes de la función se enrutan a la red de VPC.

Puedes especificar la configuración de salida cuando implementes o actualices tu función con Cloud Console o la herramienta de línea de comandos de gcloud:

Console

  1. Abre la página Descripción general de Cloud Functions en Cloud Console:

    Ir a la página Descripción general de Cloud Functions

  2. Haz clic en Crear función. Como alternativa, haz clic en una función existente para ir a la página de detalles y haz clic en Editar.

  3. Para expandir la configuración avanzada, haz clic en Variables de entorno, herramientas de redes, tiempos de espera y más.

  4. En la sección Conexiones, en Configuración de salida, selecciona un conector de Acceso a VPC sin servidores.

  5. Selecciona la configuración de salida adecuada en función de cómo deseas enrutar el tráfico saliente a través del conector.

gcloud

Usa el comando gcloud functions deploy para implementar o actualizar la función y especifica la marca --egress-settings:

gcloud functions deploy FUNCTION_NAME \
--vpc-connector CONNECTOR_NAME \
--egress-settings EGRESS_SETTINGS \
FLAGS...

En el ejemplo anterior, se ilustra lo siguiente:

  • FUNCTION_NAME es el nombre de la función.
  • CONNECTOR_NAME es el nombre del conector de Acceso a VPC sin servidores que se debe usar. Consulta la documentación sobre gcloud para obtener más información.

  • EGRESS_SETTINGS es uno de los valores admitidos para la configuración de salida; consulta la documentación de gcloud.

  • FLAGS... hace referencia a otras marcas que pasas al comando deploy.

Casos prácticos de ejemplo

Crea una función a la que los clientes externos no puedan llamar

Para proteger tus funciones de HTTP, puedes permitir que solo las llamen los recursos en el mismo proyecto de Cloud o el perímetro de servicio de los Controles del servicio de VPC.

  1. Implementa tu función y solo permite el tráfico interno. Usa Cloud Console o la herramienta de línea de comandos de gcloud:

    Console

    1. Abre la página Descripción general de Cloud Functions en Cloud Console:

      Ir a la página Descripción general de Cloud Functions

    2. Haz clic en Crear función. Como alternativa, haz clic en una función existente para ir a la página de detalles y haz clic en Editar.

    3. Para expandir la configuración avanzada, haz clic en Variables de entorno, herramientas de redes, tiempos de espera y más.

    4. En la sección Conexiones, ve a Configuración de entrada y selecciona Permitir solo el tráfico interno.

    gcloud

    Usa el comando gcloud functions deploy:

    gcloud functions deploy FUNCTION_NAME \
    --ingress-settings internal-only \
    FLAGS...
    

Después de implementar la función, las solicitudes que se originan fuera de tu proyecto de Cloud no pueden alcanzar la función. Si usas los Controles del servicio de VPC, se bloquearán las solicitudes desde fuera del perímetro de servicio. Las instancias de VM que estén dentro del perímetro de servicio o del proyecto aún pueden llegar a tu función mediante solicitudes al extremo de HTTPS.

Si deseas llamar a esta función restringida desde otra función, la función que haga la llamada deberá enrutar la salida a través de tu red de VPC.

Enruta una salida de función a través de la red de VPC

Las redes de VPC en Google Cloud admiten un amplio conjunto de opciones de configuración y funciones de red. Si enrutas el tráfico de salida de tu función a tu red de VPC, puedes asegurarte de que el tráfico de salida de Cloud Functions siga el firewall, el DNS, el enrutamiento y otras reglas de la red de VPC. También puedes usar productos como Cloud NAT.

  1. Configura una red de VPC. Configura una red de VPC existente o crea una nueva mediante la guía proporcionada en Usa redes de VPC.

  2. Configura un conector de Acceso a VPC sin servidores. Cloud Functions necesita un conector de Acceso a VPC sin servidores para enrutar el tráfico a tu red de VPC. Para crear un conector y configurar los permisos adecuados, sigue las instrucciones en Conéctate a una red de VPC.

  3. Implementa una función que use el conector y enrute toda la salida a través del conector. Usa Cloud Console o la herramienta de línea de comandos de gcloud:

    Console

    1. Abre la página Descripción general de Cloud Functions en Cloud Console:

      Ir a la página Descripción general de Cloud Functions

    2. Haz clic en Crear función. Como alternativa, haz clic en una función existente para ir a la página de detalles y haz clic en Editar.

    3. Para expandir la configuración avanzada, haz clic en Variables de entorno, herramientas de redes, tiempos de espera y más.

    4. En la sección Conexiones, en Configuración de salida, selecciona el conector de Acceso a VPC sin servidores y Enrutar todo el tráfico mediante el conector de VPC.

    gcloud

    Usa el comando gcloud functions deploy:

    gcloud functions deploy FUNCTION_NAME \
    --vpc-connector CONNECTOR_NAME \
    --egress-settings all \
    FLAGS...
    

Después de implementar la función, todo el tráfico que provenga de esta se enrutará a través de la red de VPC y cumplirá con las reglas establecidas en la red de VPC. Ten en cuenta que tu función no puede acceder a la Internet pública, a menos que configures Cloud NAT. Además, considera que Cloud NAT debe mapear todos los rangos de IP principales y secundarios para todas las subredes a la puerta de enlace NAT, a fin de incluir la subred del conector en el mapeo.

Asocia una salida de función con una dirección IP estática

En algunos casos, es posible que quieras que el tráfico proveniente de la función se asocie con una dirección IP estática. Por ejemplo, esto es útil si llamas a un servicio externo que solo permite solicitudes de direcciones IP especificadas de manera explícita.

  1. Enruta la salida de tu función a través de la red de VPC. Consulta la sección anterior, Enruta una salida de función a través de la red de VPC.

  2. Configura Cloud NAT y especifica una dirección IP estática. Sigue las guías en Especifica los rangos de subred para NAT y Especifica direcciones IP para NAT a fin de configurar Cloud NAT para la subred asociada con el conector de Acceso a VPC sin servidores de tu función. Como se mencionó anteriormente, Cloud NAT debe mapear todos los rangos de IP principales y secundarios para todas las subredes a la puerta de enlace NAT a fin de incluir la subred del conector en el mapeo.

Balanceo de cargas multirregión

Puedes implementar una función en diferentes regiones y permitir que se envíe la solicitud a la región en buen estado más cercana. A fin de lograrlo, debes configurar un grupo de extremos de red (NEG) sin servidores para la función y conectarlo a un balanceador de cargas, como se describe en Configura un balanceador de cargas HTTP(S) con NEG sin servidores