Configurar regras de firewall e acesso à Internet

Neste documento, explicamos como concluir as seguintes tarefas:

  • Configurar instâncias de máquina virtual (VM) do Dataflow para acesso à Internet
  • Criar tags de rede
  • Defina regras de firewall para a rede associada aos seus 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. Para mais informações sobre como solucionar problemas de rede, consulte Resolver problemas de rede do Dataflow.

Acesso às APIs do Google Cloud para o Dataflow

As máquinas virtuais (VMs) de worker do Dataflow precisam acessar as APIs e os serviços do Google Cloud. O conjunto de endpoints dependentes do Google Cloud pode mudar com o tempo, mas todos são compatíveis com o VPC Service Controls. Use um dos seguintes métodos para configurar o acesso às APIs do Google Cloud:

Por padrão, as regras de firewall e as configurações de DNS permitem o acesso às APIs do Google Cloud. No entanto, talvez você esteja restringindo ativamente o acesso a um subconjunto de APIs do Google Cloud, como se estivesse usando o VPC Service Controls. Nesse caso, pelo menos, forneça acesso a restricted.googleapis.com. Se você estiver usando o Private Service Connect, conceda acesso ao pacote vpc-sc. O acesso a domínios mais permissivos, como private.googleapis.com, também oferece a funcionalidade necessária.

Para permitir o acesso às APIs do Google Cloud necessárias em um determinado domínio, seu ambiente precisa atender aos seguintes requisitos:

  • As regras de firewall precisam permitir a saída para todos os intervalos de endereços do domínio escolhido.

  • O DNS precisa resolver *.googleapis.com para o domínio escolhido.

Por exemplo, se as regras do firewall limitarem a saída ao intervalo de endereços restricted.googleapis.com, o *.googleapis.com precisará ser resolvido para endereços dentro desse intervalo. Para mais informações, consulte Configurar o DNS para googleapis.com.

Da mesma forma, se você estiver usando o Private Service Connect, é necessário criar registros DNS para o domínio padrão googleapis.com para garantir o acesso a pelo menos todos os serviços no pacote vpc-sc.

Acesso à Internet para o Dataflow

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 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 pipeline do Python na documentação do Apache Beam.

Desative o endereço IP externo

Por padrão, o Dataflow atribui endereços IP externos e internos aos workers. Quando você desativa os endereços IP externo, o job 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.

Ao não usar endereços IP externo, é possível proteger melhor sua infraestrutura de processamento de dados. Também é possível reduzir o número de endereços IP externo consumidos na sua cota do projeto do Google Cloud.

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

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;....

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, use 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.

Consulte 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, basta garantir que as regras de firewall permitam o acesso às APIs do Google Cloud. Caso contrário, você precisará configurar outras 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 criar tags de rede personalizadas ao executar o código do pipeline, as VMs do Dataflow vão usar 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ê criar tags de rede personalizadas ao executar o código do pipeline, as VMs do Dataflow vão usar 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 \
    --source-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 Google Cloud CLI. 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 em que você esteja executando gcloud ou do sistema que esteja executando o navegador da Web usado para acessar o console do Google Cloud.

Para conferir a configuração e a atividade da rede, abra uma sessão SSH em um worker e execute iproute2. Para mais informações, consulte a página iproute2 no wiki da Linux Foundation.

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.

A seguir