Configurar regras de firewall e acesso à Internet

Neste documento, você verá como configurar instâncias de máquina virtual (VM) do Dataflow para acesso à Internet, criar tags de rede e definir regras de firewall para a rede associada aos jobs do Dataflow.

Neste documento, você precisa ter conhecimento básico das redes do Google Cloud. Para definir uma rede para o job do Dataflow, consulte Especificar a rede e a sub-rede.

Acesso à Internet para o Dataflow

As máquinas virtuais (VMs) de worker do Dataflow precisam acessar as APIs e os serviços do Google Cloud. Dependendo do caso de uso, as VMs também podem precisar de acesso a recursos fora do Google Cloud. Use um dos seguintes métodos para configurar o acesso à Internet para o Dataflow:

  • Configure VMs de worker com um endereço IP externo para que atendam aos requisitos de acesso à Internet.

  • Configure Acesso privado do Google. Com o Acesso privado do Google, as VMs que têm apenas endereços IP internos podem acessar endereços IP para o Google Cloud e os serviços.

  • Configure um endereço IP do endpoint do Private Service Connect para acessar APIs e serviços do Google Cloud.

  • Configure uma solução NAT, como o Cloud NAT. Essa opção é para executar jobs que acessam APIs e serviços fora do Google Cloud que exigem acesso à Internet. Por exemplo, os jobs do SDK do Python podem exigir acesso ao índice de pacote do Python (PyPI) para fazer o download das dependências dos pipelines. Nesse caso, configure VMs de worker com endereços IP externos ou use o Cloud NAT. Também é possível fornecer dependências de pipeline do Python durante o envio do job. Por exemplo, é possível usar contêineres personalizados para fornecer dependências de pipeline do Python, o que elimina a necessidade de acessar o PyPI no ambiente de execução.

    Para mais informações, consulte Como gerenciar dependências de pipelines em Python na documentação do Apache Beam.

Desative o endereço IP externo

Por padrão, o serviço Dataflow atribui endereços IP externos e internos aos workers. Quando você desativa os endereços IP externo, o pipeline do Dataflow só pode acessar recursos nos seguintes locais:

Sem endereços IP externos, ainda é possível executar tarefas administrativas e de monitoramento. Você pode acessar seus workers usando o SSH por meio das opções listadas na lista anterior. No entanto, o pipeline não pode acessar a Internet e os hosts da Internet não podem acessar seus workers do Dataflow.

Não usar endereços IP externos ajuda a proteger melhor sua infraestrutura de processamento de dados. Além disso, também reduz o número de endereços IP externos consumidos na cota do projeto do Google Cloud.

Se você desativar os endereços IP externos, seus jobs do Dataflow não poderão acessar APIs e serviços fora do Google Cloud que exigem acesso à Internet.

Para informações sobre como configurar o acesso à Internet para jobs com endereços IP internos, leia a seção anterior.

Para desativar endereços IP externos, siga um destes procedimentos:

Java

  1. Ative o Acesso privado do Google para sua rede ou sub-rede.
  2. Nos parâmetros do job do Dataflow, especifique --usePublicIps=false e --network=NETWORK-NAME ou --subnetwork=SUBNETWORK-NAME.

    Dependendo do que você escolher, substitua um destes procedimentos:

    • NETWORK-NAME: o nome da sua rede do Compute Engine
    • SUBNETWORK-NAME: o nome da sub-rede do Compute Engine.

Python

  1. Para preparar todas as dependências de pacote do Python, siga as instruções de dependências do pipeline do Apache Beam.
  2. Ative o Acesso privado do Google para sua rede ou sub-rede.
  3. Nos parâmetros do job do Dataflow, especifique --no_use_public_ips e --network=NETWORK ou --subnetwork=SUBNETWORK.
  4. Dependendo do que você escolher, substitua um destes procedimentos:

    • NETWORK-NAME: o nome da sua rede do Compute Engine
    • SUBNETWORK-NAME: o nome da sub-rede do Compute Engine.

Go

  1. Ative o Acesso privado do Google para sua rede ou sub-rede.
  2. Nos parâmetros do job do Dataflow, especifique --no_use_public_ips e --network=NETWORK ou --subnetwork=SUBNETWORK.
  3. Dependendo do que você escolher, substitua um destes procedimentos:

    • NETWORK-NAME: o nome da sua rede do Compute Engine
    • SUBNETWORK-NAME: o nome da sub-rede do Compute Engine.

Tags de rede para o Dataflow

Tags de rede são atributos de texto que podem ser anexados às VMs do Compute Engine. Com as tags de rede, você pode tornar regras de firewall de rede VPC e determinadas rotas estáticas personalizadas aplicáveis a instâncias de VM específicas. O Dataflow é compatível com a adição de tags de rede a todas as VMs de worker que executam um job específico do Dataflow.

Mesmo que você não use o parâmetro de rede, o Dataflow sempre adiciona a tag de rede padrão dataflow a todas as VMs de worker que ele cria.

Ativar tags de rede

Você pode especificar as tags de rede somente ao executar o modelo do job do Dataflow para criar um job. Depois que o job é iniciado, não é possível adicionar mais tags de rede a ele. Para aplicar tags de rede adicionais a um job, você precisa recriar o modelo de job com as tags de rede necessárias.

Adicione o seguinte ao código do pipeline, seja ele executado em Java ou Python:

--experiments=use_network_tags=TAG-NAME

Substitua TAG-NAME pelos nomes das tags. Se você adicionar mais de uma tag, separe cada uma com um ";", (;) como mostrado no seguinte formato: TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;....

Mesmo que você não use esse parâmetro, o Dataflow sempre adiciona a tag de rede dataflow a cada VM de worker que ele cria.

Como ativar tags de rede para VMs do inicializador do modelo flexível

Ao usar modelos flexíveis, para ativar tags de rede para VMs de worker do Dataflow, use a opção --additional-experiments, conforme mostrado no exemplo a seguir:

--additional-experiments=use_network_tags=TAG-NAME

Para ativar as tags de rede para VMs de worker e de inicialização, é preciso usar as duas opções a seguir:

--additional-experiments=use_network_tags=TAG-NAME
--additional-experiments=use_network_tags_for_flex_templates=TAG-NAME

Substitua TAG-NAME pelos nomes das tags. Se você adicionar mais de uma tag, separe cada uma com um ";", (;) como mostrado no seguinte formato: TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;....

Depois de ativar as tags de rede, elas são analisadas e anexadas às VMs.

Veja os limites aplicáveis às tags de rede.

Regras de firewall para o Dataflow

Com as regras de firewall, você permite ou rejeita o tráfego proveniente ou destinado às VMs. Se os jobs do Dataflow usarem o Dataflow Shuffle ou o Streaming Engine, não será necessário configurar regras de firewall. Caso contrário, você precisará configurar regras de firewall para que as VMs do Dataflow possam enviar e receber tráfego de rede na porta TCP 12345 para jobs de streaming e na porta TCP 12346 para jobs em lote. Um proprietário, editor ou administrador de segurança do projeto precisa criar as regras de firewall necessárias na rede VPC usada pelas VMs do Dataflow.

Antes de configurar regras de firewall para o Dataflow, leia os seguintes documentos:

Ao criar regras de firewall para o Dataflow, especifique as tags de rede do Dataflow. Caso contrário, as regras de firewall serão aplicadas a todas as VMs na rede VPC.

Quando aplicável, as políticas hierárquicas de firewall são avaliadas primeiro e essas regras impedem as regras de firewall da VPC. Se o job do Dataflow estiver em um projeto que faz parte de uma pasta ou organização em que as políticas hierárquicas de firewall são usadas, o papel compute.orgFirewallPolicyAdmin será necessário para fazer modificações na política.

Se você não criou tags de rede personalizadas quando executou o código do pipeline, as VMs do Dataflow usam a tag dataflow padrão. Na ausência de tags de rede personalizadas, crie as regras de firewall com a tag dataflow padrão.

Se você criou tags de rede personalizadas quando executou o código do pipeline, as VMs do Dataflow usam essas tags. Crie as regras de firewall com as tags personalizadas.

Algumas redes VPC, como a rede default criada automaticamente, incluem uma regra default-allow-internal que atende ao requisito de firewall do Dataflow.

Exemplo de regra de entrada de firewall

A regra de firewall de entrada permite que as VMs do Dataflow recebam pacotes umas das outras. É necessário sempre criar regras de firewall de permissão de entrada ou o tráfego sempre será bloqueado, mesmo que as regras de saída permitam esse tráfego.

No exemplo a seguir, uma regra de entrada de firewall é criada para o Dataflow, em que todas as VMs de worker têm a tag de rede padrão dataflow. Um proprietário, editor ou administrador de segurança do projeto pode usar o seguinte comando gcloud para criar uma regra de permissão de entrada que permita tráfego nas portas TCP 12345 e 12346 desde VMs com a tag de rede dataflow até VMs com a mesma tag:

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

Substitua:

  • FIREWALL_RULE_NAME_INGRESS: um nome para a regra de firewall;

  • NETWORK: o nome da rede usada pelas VMs de worker.

  • CUSTOM_TAG: uma lista de tags de rede delimitada por vírgulas

    Esta é uma lista de diretrizes para o uso de tags de rede:

    • Se você omitir --target-tags, a regra se aplicará a todas as VMs na rede VPC.

    • Se você omitir --source-tags e todas as outras especificações de origem, será permitido o tráfego de qualquer origem.

    • Se você não tiver especificado tags de rede personalizadas e quiser que a regra seja específica para VMs do Dataflow, use dataflow como a tag de rede.

    • Se você especificou tags de rede personalizadas e quer que a regra seja específica para VMs do Dataflow, use suas tags de rede personalizadas.

  • PRIORITY_NUM: a prioridade da regra de firewall

    Números mais baixos têm prioridades mais altas, e 0 é a prioridade mais alta.

Exemplo de regra de saída de firewall

A regra de firewall de saída permite que as VMs do Dataflow enviem pacotes umas para as outras. Se você criou regras de firewall de negação de saída, talvez seja necessário criar regras de firewall de permissão de saída personalizadas na sua rede VPC.

Neste exemplo, uma regra de saída de firewall é criada para o Dataflow, em que todas as VMs de worker têm a tag de rede padrão dataflow. Um proprietário, editor ou administrador de segurança do projeto pode usar o seguinte comando gcloud para criar uma regra de permissão de saída que permita o tráfego de portas TCP 12345 e 12346 em VMs. com a tag de rede dataflow para outras VMs com a mesma tag:

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

Substitua:

  • FIREWALL_RULE_NAME_EGRESS: um nome para a regra de firewall;

  • NETWORK: o nome da rede usada pelas VMs de worker.

  • CUSTOM_TAG: uma lista de tags de rede delimitada por vírgulas

    Esta é uma lista de diretrizes para o uso de tags de rede:

    • Se você omitir --target-tags, a regra se aplicará a todas as VMs na rede VPC.

    • Se você omitir --source-tags e todas as outras especificações de origem, será permitido o tráfego de qualquer origem.

    • Se você não tiver especificado tags de rede personalizadas e quiser que a regra seja específica para VMs do Dataflow, use dataflow como a tag de rede.

    • Se você especificou tags de rede personalizadas e quer que a regra seja específica para VMs do Dataflow, use suas tags de rede personalizadas.

  • DESTINATION-RANGES: uma lista delimitada por vírgulas de CIDRs

    Inclua o intervalo de endereços IP primários da sub-rede selecionada.

  • PRIORITY_NUM: a prioridade da regra de firewall

    Números mais baixos têm prioridades mais altas, e 0 é a prioridade mais alta.

Para portas TCP específicas usadas pelo Dataflow, é possível visualizar o manifesto do contêiner do projeto. Esse manifesto especifica explicitamente as portas para mapear as portas do host no contêiner.

Acesso SSH às VMs de worker

O Dataflow não exige SSH. No entanto, o SSH é útil para a solução de problemas.

Se a VM de worker tiver um endereço IP externo, será possível se conectar à VM pelo Console do Google Cloud ou da CLI do Google Cloud. Para se conectar usando SSH, é preciso ter uma regra de firewall que permita conexões de entrada na porta TCP 22 pelo menos do endereço IP do sistema no qual você esteja executando gcloud ou do sistema que esteja executando o navegador da Web usado para acessar o Console do Google Cloud.

Para visualizar a configuração de rede e a atividade, abra uma sessão SSH em um worker e execute iproute2. Para mais informações, consulte a página iproute2.

Se você precisar se conectar a uma VM de worker que tenha apenas um endereço IP interno, consulte Escolha uma opção de conexão para VMs somente internas.