Configurar el acceso a Internet y las reglas de cortafuegos

En este documento se explica cómo completar las siguientes tareas:

  • Configurar instancias de máquina virtual (VM) de Dataflow para acceder a Internet
  • Usa etiquetas para proteger la red de las VMs de los trabajadores.
  • Definir reglas de cortafuegos para la red asociada a tus trabajos de Dataflow

Para consultar este documento, debes tener conocimientos básicos sobre las redes de Google Cloud Platform. Para definir una red para tu tarea de Dataflow, consulta Especificar tu red y subred. Para obtener más información sobre cómo solucionar problemas de red, consulta el artículo Solucionar problemas de red de Dataflow.

Acceso a las Google Cloud APIs de Dataflow

Las máquinas virtuales de trabajador de Dataflow deben poder acceder a lasGoogle Cloud APIs y los servicios. El conjunto de endpoints Google Cloud dependientes puede cambiar con el tiempo, pero todos ellos admiten Controles de Servicio de VPC. Utilice uno de los siguientes métodos para configurar el acceso a las APIs de Google Cloud :

De forma predeterminada, las reglas de cortafuegos y las configuraciones de DNS permiten el acceso a las APIs deGoogle Cloud . Sin embargo, es posible que estés restringiendo activamente el acceso a un subconjunto de APIs, por ejemplo, si usas Controles de Servicio de VPC. Google Cloud En este caso, como mínimo, debe proporcionar acceso a restricted.googleapis.com. Si usas Private Service Connect, proporciona acceso al vpc-sc paquete. También se puede proporcionar acceso a dominios más permisivos, como private.googleapis.com, para obtener la funcionalidad necesaria.

Para permitir el acceso a las APIs necesarias a través de un dominio determinado, tu entorno debe cumplir los siguientes requisitos: Google Cloud

  • Las reglas de cortafuegos deben permitir el tráfico saliente a todos los intervalos de direcciones del dominio elegido.

  • El DNS debe resolver *.googleapis.com en el dominio que hayas elegido.

Por ejemplo, si las reglas de cortafuegos limitan el tráfico de salida al intervalo de direcciones restricted.googleapis.com, *.googleapis.com debe resolverse en direcciones de ese intervalo. Para obtener más información, consulta Configurar DNS para googleapis.com.

Del mismo modo, si usas Private Service Connect, debes crear registros DNS para el dominio predeterminado googleapis.com para asegurarte de que puedes acceder al menos a todos los servicios del vpc-sc paquete.

Acceso a Internet para Dataflow

En función de tu caso de uso, es posible que tus VMs también necesiten acceder a recursos fuera de Google Cloud Platform. Utilice uno de los siguientes métodos para configurar el acceso a Internet de Dataflow:

  • Configura las VMs de trabajador con una dirección IP externa para que cumplan los requisitos de acceso a Internet.

  • Configura una solución NAT, como Cloud NAT. Esta opción es para ejecutar trabajos que accedan a APIs y servicios fuera de Google Cloud que requieran acceso a Internet. Por ejemplo, las tareas del SDK de Python pueden requerir acceso al índice de paquetes de Python (PyPI) para descargar las dependencias de las canalizaciones. En este caso, debes configurar las VMs de trabajador con direcciones IP externas o usar Cloud NAT. También puedes proporcionar dependencias de la canalización de Python durante el envío del trabajo. Por ejemplo, puedes usar contenedores personalizados para proporcionar dependencias de la canalización de Python, lo que elimina la necesidad de acceder a PyPI en el tiempo de ejecución.

    Para obtener más información, consulta Gestión de dependencias de flujos de procesamiento de Python en la documentación de Apache Beam.

Desactivar la dirección IP externa

De forma predeterminada, Dataflow asigna direcciones IP externas e internas a los trabajadores. Si desactivas las direcciones IP externas, la tarea de Dataflow solo podrá acceder a los recursos de los siguientes lugares:

Aunque no tengas direcciones IP externas, podrás seguir realizando tareas administrativas y de monitorización. Puede acceder a sus workers mediante SSH a través de las opciones que se indican 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.

Si no usas direcciones IP externas, puedes proteger mejor tu infraestructura de procesamiento de datos. También puedes reducir el número de direcciones IP externas que consumes de cara a la Google Cloudcuota de tu proyecto.

Si desactivas las direcciones IP externas, tus trabajos de Dataflow no podrán acceder a APIs y servicios externos que requieran acceso a Internet. Google Cloud

Para desactivar las direcciones IP externas, sigue uno de estos procedimientos:

Java

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

    En función de lo que elijas, sustituye uno de los siguientes elementos:

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

Python

  1. Para organizar todas las dependencias de paquetes de Python, sigue las instrucciones sobre dependencias de la canalización de Apache Beam.
  2. Habilita Acceso privado de Google en tu red o subred.
  3. En los parámetros de tu tarea de Dataflow, especifica --no_use_public_ips y --network=NETWORK o --subnetwork=SUBNETWORK.

    En función de lo que elijas, sustituye uno de los siguientes elementos:

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

Go

  1. Habilita Acceso privado de Google en tu red o subred.
  2. En los parámetros de tu tarea de Dataflow, especifica --no_use_public_ips y --network=NETWORK o --subnetwork=SUBNETWORK.

    En función de lo que elijas, sustituye uno de los siguientes elementos:

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

Usar etiquetas para proteger la red de las VMs de trabajador

Las etiquetas te permiten aplicar reglas de cortafuegos de red a instancias de VM específicas. Cuando ejecutas una tarea de Dataflow, puedes especificar etiquetas para las VMs de trabajador de Dataflow que ejecutan la tarea. Las reglas de cortafuegos de esas etiquetas se aplican a las VMs de los trabajadores de Dataflow.

Dataflow admite dos tipos de etiquetas para las redes de máquinas virtuales:

Usar etiquetas seguras con Dataflow

Las etiquetas seguras, también llamadas etiquetas controladas por la gestión de identidades y accesos (IAM), son pares clave-valor que se crean y gestionan en Resource Manager. A diferencia de las etiquetas de red, las etiquetas seguras admiten el control de acceso mediante la gestión de identidades y accesos.

Estas son algunas de las ventajas de usar etiquetas seguras en lugar de etiquetas de red:

  • Las etiquetas seguras evitan que se modifiquen las etiquetas sin autorización y que se produzcan cambios no deseados en las reglas de cortafuegos.

  • Las políticas de cortafuegos de red globales y regionales admiten etiquetas seguras. Si usas etiquetas seguras, puedes agrupar varias reglas de cortafuegos y actualizarlas simultáneamente. Las actualizaciones se rigen por los controles de acceso de gestión de identidades y accesos.

  • Las etiquetas seguras se heredan de los recursos principales de la jerarquía de Google Cloud Platform, lo que te permite definir etiquetas en niveles superiores, como el nivel de organización. Para obtener más información, consulta Herencia de etiquetas.

  • Con las etiquetas seguras, las reglas de cortafuegos de entrada pueden incluir fuentes en redes de VPC conectadas mediante el emparejamiento de redes de VPC. En el caso de los trabajos de Dataflow, esto significa que una regla de cortafuegos puede incluir fuentes tanto en la red de la VM de trabajador como en las redes de VPC emparejadas.

Para obtener más información sobre las diferencias entre las etiquetas seguras y las etiquetas de red, consulte el artículo Comparación de etiquetas y etiquetas de red.

Para aplicar etiquetas seguras a un trabajo de Dataflow, sigue estos pasos:

  1. Configura etiquetas seguras para tus políticas de cortafuegos. Para obtener más información, consulta Configurar etiquetas seguras.

  2. Asigna el rol Usuario de etiquetas (roles/resourcemanager.tagUser) a la cuenta de servicio de Dataflow en el recurso (valores de etiquetas). Para obtener más información sobre los permisos necesarios, consulta Gestionar etiquetas en recursos.

  3. Cuando crees el trabajo de Dataflow, usa el use_vm_tags experimento con el siguiente formato:

Java

--experiments=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2

Python

--experiments=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2

Plantillas Flex

--additional-experiments=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2

Usar etiquetas de red con Dataflow

Las etiquetas de red son atributos de texto que puedes definir en reglas de cortafuegos y asociar a VMs de Compute Engine. A diferencia de las etiquetas seguras, las etiquetas de red son cadenas de texto. No son un recurso gestionado por el gestor de recursos.

Para aplicar etiquetas de red a un trabajo de Dataflow, usa el use_network_tags experiment, como se indica a continuación:

Java

--experiments=use_network_tags=TAG_NAME

Python

--experiments=use_network_tags=TAG_NAME

Plantillas Flex

Para habilitar las etiquetas de red en las VMs de trabajador de Dataflow, usa el experimento use_network_tags:

--additional-experiments=use_network_tags=TAG_NAME

Para habilitar las etiquetas de red en las VMs de inicio de plantillas Flex, usa el experimento use_network_tags_for_flex_templates:

--additional-experiments=use_network_tags_for_flex_templates=TAG_NAME

Si especificas la etiqueta de red, también se añade la etiqueta de red predeterminada Dataflow a las máquinas virtuales de inicio de plantillas de Flex.

Sustituye TAG_NAME por los nombres de tus etiquetas. Si añade más de una etiqueta, separe cada una con un punto y coma (;), como se indica a continuación: TAG_NAME_1;TAG_NAME_2;TAG_NAME_3;....

Una vez que se haya iniciado un trabajo, no podrás añadir más etiquetas de red.

Dataflow siempre añade la etiqueta de red predeterminada dataflow a cada máquina virtual de trabajador que crea.

Consulta los límites que se aplican a las etiquetas de red.

Reglas de cortafuegos de Dataflow

Con las reglas de cortafuegos, puedes permitir o rechazar el tráfico desde y hacia tus VMs. Si tus trabajos de Dataflow usan Dataflow Shuffle o Streaming Engine, solo tienes que asegurarte de que las reglas de cortafuegos permitan el acceso a las APIs de Google Cloud . De lo contrario, debes configurar reglas de cortafuegos adicionales para que las VMs de Dataflow puedan enviar y recibir tráfico de red en el puerto TCP 12345 para las tareas de streaming y en el puerto TCP 12346 para las tareas por lotes. Un propietario, editor o administrador de seguridad del proyecto debe crear las reglas de cortafuegos necesarias en la red de VPC que usen tus VMs de Dataflow.

Antes de configurar reglas de cortafuegos para Dataflow, lee los siguientes documentos:

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

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

Si no creas etiquetas de red personalizadas al ejecutar el código de la canalización, las VMs de Dataflow usarán la etiqueta dataflow predeterminada. Si no hay etiquetas de red personalizadas, crea las reglas de cortafuegos con la etiqueta dataflow predeterminada.

Si creas etiquetas de red personalizadas al ejecutar el código de la canalización, las VMs de Dataflow usarán esas etiquetas. Crea las reglas de cortafuegos con las etiquetas personalizadas.

Algunas redes de VPC, como la red default network creada automáticamente, incluyen una regla default-allow-internal que cumple el requisito del cortafuegos para Dataflow.

Regla de entrada de cortafuegos de ejemplo

La regla de cortafuegos de entrada permite que las VMs de Dataflow reciban paquetes entre sí. Siempre debes crear reglas de cortafuegos de entrada para permitir el tráfico, ya que, de lo contrario, se bloqueará, aunque las reglas de salida lo permitan.

En el ejemplo siguiente, se crea una regla de cortafuegos de entrada para Dataflow, donde todas las VMs de trabajador tienen la etiqueta de red predeterminada dataflow. Un propietario, editor o administrador de seguridad de un proyecto puede usar el siguiente comando gcloud para crear una regla de permiso de entrada que permita el tráfico en los puertos TCP 12345 y 12346 de las VMs con la etiqueta de red dataflow a otras VMs 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

Haz los cambios siguientes:

  • FIREWALL_RULE_NAME_INGRESS: nombre de la regla de cortafuegos

  • NETWORK: el nombre de la red que usan tus VMs de trabajador

  • CUSTOM_TAG: lista de etiquetas de red separadas por comas

    A continuación, se incluye una lista de directrices para usar etiquetas de red:

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

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

    • Si no ha especificado etiquetas de red personalizadas y quiere que la regla se aplique específicamente a las VMs de Dataflow, utilice dataflow como etiqueta de red.

    • Si has especificado etiquetas de red personalizadas y quieres que la regla se aplique específicamente a las VMs de Dataflow, usa tus etiquetas de red personalizadas.

  • PRIORITY_NUM: la prioridad de la regla de cortafuegos

    Cuanto más bajo sea el número, más alta será la prioridad. 0 es la prioridad más alta.

Regla de salida de cortafuegos de ejemplo

La regla de cortafuegos de salida permite que las VMs de Dataflow se envíen paquetes entre sí. Si has creado reglas de cortafuegos de salida de denegación, puede que tengas que crear reglas de cortafuegos de salida de permiso personalizadas en tu red de VPC.

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

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

Haz los cambios siguientes:

  • FIREWALL_RULE_NAME_EGRESS: nombre de la regla de cortafuegos

  • NETWORK: el nombre de la red que usan tus VMs de trabajador

  • CUSTOM_TAG: lista de etiquetas de red separadas por comas

    A continuación, se incluye una lista de directrices para usar etiquetas de red:

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

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

    • Si no ha especificado etiquetas de red personalizadas y quiere que la regla se aplique específicamente a las VMs de Dataflow, utilice dataflow como etiqueta de red.

    • Si has especificado etiquetas de red personalizadas y quieres que la regla se aplique específicamente a las VMs de Dataflow, usa tus etiquetas de red personalizadas.

  • DESTINATION-RANGES: lista de CIDRs separados por comas.

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

  • PRIORITY_NUM: la prioridad de la regla de cortafuegos

    Cuanto más bajo sea el número, más alta será la prioridad. 0 es la prioridad más alta.

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

Acceso SSH a máquinas virtuales de trabajador

Dataflow no requiere SSH, pero es útil para solucionar problemas.

Si tu VM de trabajador tiene una dirección IP externa, puedes conectarte a la VM a través de la Google Cloud consola o mediante la CLI de Google Cloud. Para conectarte mediante SSH, debes tener una regla de cortafuegos que permita las conexiones entrantes en el puerto 22 de TCP desde al menos la dirección IP del sistema en el que ejecutas gcloud o del sistema en el que se ejecuta el navegador web que usas para acceder a la consola deGoogle Cloud .

Para ver la configuración y la actividad de la red, puedes abrir una sesión SSH en uno de tus workers y ejecutar iproute2. Para obtener más información, consulta la página iproute2 de la wiki de Linux Foundation.

Si necesitas conectarte a una VM de trabajador que solo tenga una dirección IP interna, consulta Elegir una opción de conexión para VMs solo internas.

Siguientes pasos