Configura el acceso a Internet y las reglas de firewall

En este documento, se explica cómo configurar las instancias de máquina virtual (VM) de Dataflow para el acceso a Internet, crear etiquetas de red y definir reglas de firewall para la red asociada con los trabajos de Dataflow.

En este documento, se requiere que tengas conocimientos básicos de las redes de Google Cloud. A fin de definir una red para tu trabajo de Dataflow, consulta Especifica la red y la subred.

Acceso a Internet para Dataflow

Las máquinas virtuales (VM) de trabajador de Dataflow deben llegar a las API y los servicios de Google Cloud. Según tu caso de uso, tus VM también pueden necesitar acceso a recursos fuera de Google Cloud. Usa uno de los siguientes métodos a fin de configurar el acceso a Internet para Dataflow:

Desactiva la dirección IP externa

De forma predeterminada, el servicio de Dataflow asigna direcciones IP internas y externas a los trabajadores. Cuando desactivas direcciones IP externas, la canalización de Dataflow solo puede acceder a los recursos en los siguientes lugares:

Sin direcciones IP externas, aún puedes realizar tareas administrativas y de supervisión. Puedes acceder a los trabajadores mediante SSH a través de las opciones enumeradas en la lista anterior. Sin embargo, la canalización no puede acceder a Internet y los hosts de Internet no pueden acceder a tus trabajadores de Dataflow.

No usar direcciones IP externas ayuda a proteger mejor tu infraestructura de procesamiento de datos. Además, puedes reducir la cantidad de direcciones IP externas que consumes de la cuota del proyecto de Google Cloud.

Si desactivas las direcciones IP externas, tus trabajos de Dataflow no podrán acceder a las API ni a los servicios fuera de Google Cloud que requieren acceso a Internet.

Si quieres obtener más información a fin de configurar el acceso a Internet para trabajos con direcciones IP internas, lee la sección anterior.

Para desactivar las direcciones IP externas, realiza una de las siguientes acciones:

Java

  1. Habilita el Acceso privado a Google para la red o subred.
  2. En los parámetros de tu trabajo de Dataflow, especifica --usePublicIps=false y --network=NETWORK-NAME o --subnetwork=SUBNETWORK-NAME.

    Según tu elección, reemplaza una de las siguientes acciones:

    • NETWORK-NAME: el nombre de tu red de Compute Engine.
    • SUBNETWORK-NAME: el nombre de tu subred de Compute Engine.

Python

  1. Para almacenar en etapa intermedia todas las dependencias de paquetes de Python, sigue las instrucciones de las dependencias de canalizaciones de Apache Beam.
  2. Habilita el Acceso privado a Google para la red o subred.
  3. En los parámetros de tu trabajo de Dataflow, especifica --no_use_public_ips y --network=NETWORK o --subnetwork=SUBNETWORK.
  4. Según tu elección, reemplaza una de las siguientes acciones:

    • NETWORK-NAME: el nombre de tu red de Compute Engine.
    • SUBNETWORK-NAME: el nombre de tu subred de Compute Engine.

Etiquetas de red para Dataflow

Las etiquetas de red son atributos de texto que puedes adjuntar a las VM de Compute Engine. Las etiquetas de red te permiten hacer que las reglas de firewall de la red de VPC y ciertas rutas estáticas personalizadas se puedan aplicar a instancias de VM específicas. Dataflow admite la adición de etiquetas de red a todas las VM de trabajador que ejecutan un trabajo de Dataflow en particular.

Incluso si no usas el parámetro de red, Dataflow siempre agrega la etiqueta de red predeterminada dataflow a cada VM de trabajador que creas.

Habilita las etiquetas de red

Puedes especificar las etiquetas de red solo cuando ejecutas la plantilla de trabajo de Dataflow para crear un trabajo. Después de que se inicia un trabajo, no puedes agregar más etiquetas de red al trabajo. Para aplicar etiquetas de red adicionales a un trabajo, debes volver a crear la plantilla de trabajo con las etiquetas de red requeridas.

Agrega lo siguiente al código de tu canalización, ya sea que lo ejecutes en Java o Python:

--experiments=use_network_tags=TAG-NAME

Reemplaza TAG-NAME por los nombres de las etiquetas. Si agregas más de una etiqueta, separa cada una con un punto y coma (;) como se muestra en el siguiente formato: TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;....

Incluso si no usas este parámetro, Dataflow siempre agrega la etiqueta de red dataflow a cada VM de trabajador que creas.

Habilita las etiquetas de red para las VM del iniciador de plantillas flexibles

Cuando usas plantillas flexibles, las etiquetas de red solo se aplican a las VM de trabajador de Dataflow y no a la VM de selector.

A fin de habilitar las etiquetas de red para las VM del selector, usa la opción --additional-experiments como se muestra en el siguiente ejemplo:

--additional-experiments=use_network_tags_for_flex_templates=TAG-NAME

Reemplaza TAG-NAME por los nombres de las etiquetas. Si agregas más de una etiqueta, separa cada una con un punto y coma (;) como se muestra en el siguiente formato: TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;....

Después de habilitar las etiquetas de red, las etiquetas se analizan y se adjuntan a las VM del iniciador.

Consulta los límites aplicables a las etiquetas de red.

Reglas de firewall para Dataflow

Antes de configurar las reglas de firewall para Dataflow, lee la siguiente información:

Las reglas de firewall permiten o rechazan el tráfico desde y hacia tus VM. Las VM de Dataflow deben poder enviar y recibir tráfico de red en los puertos TCP 12345 y 12346 para funcionar. Un propietario, editor o administrador de seguridad del proyecto debe crear las reglas de firewall necesarias en la red de VPC que usan las VM de Dataflow.

Cuando crees reglas de firewall para Dataflow, especifica las etiquetas de red de Dataflow. De lo contrario, las reglas de firewall se aplican a todas las VM de la red de VPC.

Cuando corresponda, las políticas de firewall jerárquicas se evalúan primero y estas reglas interrumpen las reglas de firewall de VPC. Si el trabajo de Dataflow está en un proyecto que forma parte de una organización o carpeta en la que se usan las políticas de firewall jerárquicas, se requiere la función compute.orgFirewallPolicyAdmin para realizar modificaciones en las políticas.

Si no creaste etiquetas de red personalizadas cuando ejecutaste el código de la canalización, las VM de Dataflow usan la etiqueta predeterminada dataflow. Si no hay etiquetas de red personalizadas, crea las reglas de firewall con la etiqueta dataflow predeterminada.

Si creaste etiquetas de red personalizadas cuando ejecutaste el código de canalización, las VM de Dataflow usan esas etiquetas. Crea las reglas de firewall con las etiquetas personalizadas.

Algunas redes de VPC, como la red default creada de forma automática, incluyen una regla default-allow-internal que cumple con los requisitos de firewall de Dataflow.

Ejemplo de regla de entrada de firewall

La regla de firewall de entrada permite que las VM de Dataflow reciban paquetes entre sí. Siempre debes crear reglas de firewall de permiso de entrada o el tráfico siempre está bloqueado, incluso si las reglas de salida permiten dicho tráfico.

En el siguiente ejemplo, se crea una regla de entrada de firewall para Dataflow, en la que todas las VM de trabajador tienen la etiqueta de red predeterminada dataflow. Un propietario, editor o administrador de seguridad del proyecto puede usar el siguiente comando de gcloud para crear una regla de permiso de entrada que permita el tráfico en los puertos TCP 1234512346 de las VM con la etiqueta de red dataflow a las VM con la misma etiqueta:

gcloud compute firewall-rules create FIREWALL_RULE_NAME_INGRESS \
    --action=allow \
    --direction=ingress \
    --network=NETWORK  \
    --target-tags=CUSTOM_TAG \
    --source-tags=CUSTOM_TAG \
    --priority=PRIORITY_NUM \
    --rules tcp:12345-12346

Reemplaza lo siguiente:

  • FIREWALL_RULE_NAME_INGRESS es un nombre para la regla de firewall.

  • NETWORK es el nombre de la red que usan las VM de trabajadores.

  • CUSTOM_TAG: es una lista delimitada por comas de etiquetas de red.

    A continuación, se muestra una lista de lineamientos para usar etiquetas de red:

    • Si omites --target-tags, la regla se aplica a todas las VM de la red de VPC.

    • Si omites --source-tags y todas las demás especificaciones de origen, se permite el tráfico de cualquier fuente.

    • Si no especificaste etiquetas de red personalizadas y quieres que la regla sea específica de las VM de Dataflow, usa dataflow como etiqueta de red.

    • Si especificaste etiquetas de red personalizadas y quieres que la regla sea específica para las VM de Dataflow, usa las etiquetas de red personalizadas.

  • PRIORITY_NUM: la prioridad de la regla de firewall.

    Los números más bajos tienen prioridades más altas y 0 es la prioridad más alta.

Ejemplo de regla de salida de firewall

La regla de firewall de salida permite que las VM de Dataflow se envíen paquetes entre sí. Si creaste reglas de firewall de denegación de salida, es posible que debas crear reglas de firewall de permiso de salida personalizadas en tu red de VPC.

En este ejemplo, se crea una regla de salida de firewall para Dataflow, en la que todas las VM de trabajador tienen la etiqueta de red predeterminada de dataflow. Un propietario, editor o administrador de seguridad del proyecto puede usar el siguiente comando de gcloud para crear una regla de permiso de salida que permita el tráfico de los puertos TCP 12345 y 12346 de las VM con la etiqueta de red dataflow a las VM con la misma etiqueta:

gcloud compute firewall-rules create FIREWALL_RULE_NAME_EGRESS \
    --network=NETWORK \
    --action=allow \
    --direction=egress \
    --target-tags=CUSTOM_TAG \
    --destination-ranges=DESTINATION-RANGES\
    --priority=PRIORITY_NUM  \
    --rules tcp:12345-12346

Reemplaza lo siguiente:

  • FIREWALL_RULE_NAME_EGRESS es un nombre para la regla de firewall.

  • NETWORK es el nombre de la red que usan las VM de trabajadores.

  • CUSTOM_TAG: es una lista delimitada por comas de etiquetas de red.

    A continuación, se muestra una lista de lineamientos para usar etiquetas de red:

    • Si omites --target-tags, la regla se aplica a todas las VM de la red de VPC.

    • Si omites --source-tags y todas las demás especificaciones de origen, se permite el tráfico de cualquier fuente.

    • Si no especificaste etiquetas de red personalizadas y quieres que la regla sea específica de las VM de Dataflow, usa dataflow como etiqueta de red.

    • Si especificaste etiquetas de red personalizadas y quieres que la regla sea específica para las VM de Dataflow, usa las etiquetas de red personalizadas.

  • DESTINATION-RANGES: una lista delimitada por comas de CIDR

    Incluye el rango de direcciones IP principal de la subred seleccionada.

  • PRIORITY_NUM: la prioridad de la regla de firewall.

    Los números más bajos tienen prioridades más altas y 0 es la prioridad más alta.

Para los puertos TCP específicos que usa Dataflow, puedes consultar el manifiesto del contenedor del proyecto. El manifiesto del contenedor especifica de manera explícita los puertos para asignar puertos de host al contenedor.

Acceso SSH a las VM de trabajador

Dataflow no requiere SSH; sin embargo, SSH es útil para la solución de problemas.

Si tu VM de trabajador tiene una dirección IP externa, puedes conectarte a la VM a través de Cloud Console o mediante la herramienta de línea de comandos de gcloud. Para conectarse mediante SSH, debes tener una regla de firewall que permita conexiones entrantes en el puerto TCP 22 desde al menos la dirección IP del sistema en el que se ejecuta gcloud o el sistema que ejecuta el navegador web que usas para acceder a Cloud Console.

Para ver la configuración y la actividad de red, abre una sesión SSH en uno de tus trabajadores y ejecuta iproute2. Para obtener más información, consulta la página de iproute2.

Si necesitas conectarte a una VM de trabajador que solo tiene una dirección IP interna, consulta Conéctate a instancias que no tienen direcciones IP externas.