Configurazione dell'accesso a Internet e delle regole firewall

Questo documento spiega come completare le seguenti attività:

  • Configura le istanze di macchine virtuali (VM) Dataflow per l'accesso a internet
  • Utilizza i tag per proteggere il networking delle VM worker.
  • Definisci le regole firewall per la rete associata ai tuoi job Dataflow

Questo documento richiede una conoscenza di base delle reti Google Cloud . Per definire una rete per il job Dataflow, consulta Specifica la rete e la subnet. Per saperne di più su come risolvere i problemi di networking, consulta Risolvi i problemi di networking di Dataflow.

Accesso alle API Google Cloud per Dataflow

Le macchine virtuali (VM) worker di Dataflow devono raggiungere le API e i serviziGoogle Cloud . L'insieme di endpoint Google Cloud dipendenti potrebbe cambiare nel tempo, ma tutti supportano i Controlli di servizio VPC. Utilizza uno dei seguenti metodi per configurare l'accesso alle API Google Cloud :

Per impostazione predefinita, le regole firewall e le configurazioni DNS consentono l'accesso alle APIGoogle Cloud . Tuttavia, potresti limitare attivamente l'accesso a un sottoinsieme di API Google Cloud , ad esempio se utilizzi i Controlli di servizio VPC. In questo caso, fornisci almeno l'accesso a restricted.googleapis.com. Se utilizzi Private Service Connect, fornisci l'accesso al bundle vpc-sc. Anche fornire l'accesso a domini più permissivi, come private.googleapis.com, fornisce la funzionalità richiesta.

Per consentire l'accesso alle API Google Cloud necessarie tramite un determinato dominio, il tuo ambiente deve soddisfare i seguenti requisiti:

  • Le regole firewall devono consentire il traffico in uscita verso tutti gli intervalli di indirizzi nel dominio scelto.

  • Il DNS deve risolvere *.googleapis.com nel dominio scelto.

Ad esempio, se le regole firewall limitano il traffico in uscita all'intervallo di indirizzi restricted.googleapis.com, *.googleapis.com deve essere risolto in indirizzi all'interno di questo intervallo. Per saperne di più, consulta Configura il DNS per googleapis.com.

Analogamente, se utilizzi Private Service Connect, devi creare record DNS per il dominio predefinito googleapis.com per garantire l'accesso ad almeno tutti i servizi nel bundle vpc-sc.

Accesso a internet per Dataflow

A seconda del caso d'uso, le VM potrebbero anche dover accedere a risorse esterne aGoogle Cloud. Utilizza uno dei seguenti metodi per configurare l'accesso a internet per Dataflow:

  • Configura le VM worker con un indirizzo IP esterno in modo che soddisfino i requisiti di accesso a internet.

  • Configura una soluzione NAT, ad esempio Cloud NAT. Questa opzione è per l'esecuzione di job che accedono ad API e servizi esterni a Google Cloud che richiedono l'accesso a internet. Ad esempio, i job Python SDK potrebbero richiedere l'accesso al Python Package Index (PyPI) per scaricare le dipendenze delle pipeline. In questo caso, devi configurare le VM worker con indirizzi IP esterni o utilizzare Cloud NAT. Puoi anche fornire le dipendenze della pipeline Python durante l'invio del job. Ad esempio, puoi utilizzare container personalizzati per fornire le dipendenze della pipeline Python, eliminando la necessità di accedere a PyPI in fase di runtime.

    Per saperne di più, consulta Gestione delle dipendenze della pipeline Python nella documentazione di Apache Beam.

Disattiva l'indirizzo IP esterno

Per impostazione predefinita, Dataflow assegna ai worker sia indirizzi IP esterni che interni. Quando disattivi gli indirizzi IP esterni, il job Dataflow può accedere alle risorse solo nelle seguenti posizioni:

Senza indirizzi IP esterni, puoi comunque eseguire attività di amministrazione e monitoraggio. Puoi accedere ai worker utilizzando SSH tramite le opzioni elencate nell'elenco precedente. Tuttavia, la pipeline non può accedere a internet e gli host internet non possono accedere ai worker Dataflow.

Se non utilizzi indirizzi IP esterni, puoi proteggere meglio la tua infrastruttura di trattamento dati. Puoi anche ridurre il numero di indirizzi IP esterni che utilizzi rispetto alla quota di progettoGoogle Cloud.

Se disattivi gli indirizzi IP esterni, i tuoi job Dataflow non possono accedere ad API e servizi esterni a Google Cloud che richiedono l'accesso a internet.

Per disattivare gli indirizzi IP esterni, esegui una di queste operazioni:

Java

  1. Abilita l'accesso privato Google per la tua rete o subnet.
  2. Nei parametri del job Dataflow, specifica --usePublicIps=false e --network=NETWORK-NAME o --subnetwork=SUBNETWORK-NAME.

    A seconda della tua scelta, sostituisci uno dei seguenti elementi:

    • NETWORK-NAME: il nome della tua rete Compute Engine
    • SUBNETWORK-NAME: il nome della subnet di Compute Engine

Python

  1. Per eseguire lo staging di tutte le dipendenze dei pacchetti Python, segui le istruzioni per le dipendenze della pipeline di Apache Beam.
  2. Abilita l'accesso privato Google per la tua rete o subnet.
  3. Nei parametri del job Dataflow, specifica --no_use_public_ips e --network=NETWORK o --subnetwork=SUBNETWORK.

    A seconda della scelta, sostituisci uno dei seguenti elementi:

    • NETWORK-NAME: il nome della tua rete Compute Engine
    • SUBNETWORK-NAME: il nome della subnet di Compute Engine

Vai

  1. Abilita l'accesso privato Google per la tua rete o subnet.
  2. Nei parametri del job Dataflow, specifica --no_use_public_ips e --network=NETWORK o --subnetwork=SUBNETWORK.

    A seconda della scelta, sostituisci uno dei seguenti elementi:

    • NETWORK-NAME: il nome della tua rete Compute Engine
    • SUBNETWORK-NAME: il nome della subnet di Compute Engine

gcloud

  1. Abilita l'accesso privato Google per la tua rete o subnet.

  2. Quando avvii il job Dataflow, includi il flag --disable-public-ips e specifica il flag --network o --subnetwork. Puoi utilizzare uno dei seguenti comandi:

    L'esempio seguente utilizza il comando gcloud dataflow jobs run:

    gcloud dataflow jobs run JOB_NAME \
        --gcs-location=gs://TEMPLATE_BUCKET/templates/TEMPLATE_NAME \
        --region=REGION \
        --staging-location=gs://TEMP_BUCKET/staging \
        --network=NETWORK_NAME \
        --subnetwork=SUBNETWORK_NAME \
        --disable-public-ips
    

    Sostituisci i seguenti valori:

    • JOB_NAME: un nome univoco per il tuo job Dataflow.
    • TEMPLATE_BUCKET e TEMPLATE_NAME: il bucket Cloud Storage e il percorso del file del template.
    • REGION: la regione Dataflow in cui vuoi eseguire il deployment del job, ad esempio us-central1.
    • TEMP_BUCKET: il bucket Cloud Storage per i file temporanei e i file binari.
    • NETWORK_NAME: il nome della tua rete VPC.
    • SUBNETWORK_NAME: il nome o l'URL della tua subnet VPC.

API

  1. Abilita l'accesso privato Google per la tua rete o subnet.

  2. Quando avvii il job o il template Dataflow utilizzando il metodo projects.locations.templates.launch dell'API REST Dataflow, nell'oggetto environment, imposta il campo ipConfiguration su WORKER_IP_PRIVATE e specifica network o subnetwork:

    POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/templates:launch?gcsPath=gs://TEMPLATE_BUCKET/templates/TEMPLATE_NAME
    {
      "jobName": "JOB_NAME",
      "parameters": {
        "PARAM_KEY": "PARAM_VALUE"
      },
      "environment": {
        "tempLocation": "gs://TEMP_BUCKET/temp",
        "network": "NETWORK_NAME",
        "subnetwork": "SUBNETWORK_NAME",
        "ipConfiguration": "WORKER_IP_PRIVATE"
      }
    }
    

    Sostituisci i seguenti valori:

    • PROJECT_ID: il tuo ID progetto Google Cloud .
    • REGION: la regione Dataflow in cui vuoi eseguire il deployment del job, ad esempio us-central1.
    • TEMPLATE_BUCKET e TEMPLATE_NAME: il bucket Cloud Storage e il percorso del file del template.
    • JOB_NAME: un nome univoco per il tuo job Dataflow.
    • PARAM_KEY e PARAM_VALUE: eventuali parametri del template richiesti dalla pipeline.
    • TEMP_BUCKET: il nome del tuo bucket Cloud Storage per i file temporanei.
    • NETWORK_NAME: il nome della tua rete VPC.
    • SUBNETWORK_NAME: l'URL o il percorso completo della tua subnet VPC.

    Il campo ipConfiguration è di tipo WorkerIPAddressConfiguration e supporta i seguenti valori enum:

    • WORKER_IP_PRIVATE: ai worker vengono assegnati solo indirizzi IP interni. Gli indirizzi IP pubblici sono disabilitati. Richiede l'accesso privato Google.
    • WORKER_IP_PUBLIC: ai worker vengono assegnati indirizzi IP sia pubblici che interni.
    • WORKER_IP_UNSPECIFIED: utilizza la configurazione predefinita (i worker ricevono sia indirizzi IP pubblici che interni).

Utilizza i tag per proteggere il networking delle VM worker

I tag ti consentono di applicare regole firewall di rete a istanze VM specifiche. Quando esegui un job Dataflow, puoi specificare i tag per le VM worker Dataflow che eseguono il job. Le regole firewall per questi tag vengono quindi applicate alle VM worker di Dataflow.

Dataflow supporta due tipi di tag per il networking delle VM:

Utilizza i tag sicuri con Dataflow

I tag sicuri, chiamati anche tag regolati da Identity and Access Management (IAM), sono coppie chiave-valore che crei e gestisci in Resource Manager. A differenza dei tag di rete, i tag sicuri supportano il controllo degli accessi tramite IAM.

I vantaggi dell'utilizzo dei tag sicuri, anziché dei tag di rete, includono:

  • I tag sicuri impediscono la modifica non autorizzata dei tag e le conseguenti modifiche indesiderate alle regole firewall.

  • Le policy del firewall di rete globali e regionali supportano i tag sicuri. Utilizzando i tag sicuri, puoi raggruppare più regole firewall e aggiornarle contemporaneamente, con gli aggiornamenti regolati dai controlli dell'accesso IAM.

  • I tag sicuri vengono ereditati dalle risorse principali nella gerarchia Google Cloud , il che ti consente di definire i tag a livelli superiori, ad esempio a livello di organizzazione. Per saperne di più, consulta Ereditarietà dei tag.

  • Con i tag sicuri, le regole firewall in entrata possono includere origini nelle reti VPC connesse tramite il peering di rete VPC. Per i job Dataflow, ciò significa che una regola firewall può includere origini sia nella rete delle VM worker sia nelle reti VPC in peering.

Per saperne di più sulle differenze tra tag sicuri e tag di rete, consulta Confronto tra tag e tag di rete.

Per applicare tag sicuri a un job Dataflow, segui questi passaggi:

  1. Configura i tag sicuri per le policy del firewall. Per saperne di più, consulta Configura i tag sicuri.

  2. Concedi il ruolo Tag User (roles/resourcemanager.tagUser) al service account Dataflow sulla risorsa (valori dei tag). Per saperne di più sulle autorizzazioni necessarie, consulta Gestisci i tag sulle risorse.

  3. Quando crei il job Dataflow, utilizza l'opzione di servizio use_vm_tags con il seguente formato:

Java

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

Python

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

Vai

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

gcloud

Utilizza il comando gcloud dataflow jobs run con l'opzione additional-experiments. Se utilizzi i template flessibili, utilizza il comando gcloud dataflow flex-template run.

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

Utilizza i tag di rete con Dataflow

I tag di rete sono attributi di testo che puoi impostare sulle regole firewall e collegare alle VM di Compute Engine. A differenza dei tag sicuri, i tag di rete sono stringhe di testo e non sono una risorsa gestita da Resource Manager.

Per applicare i tag di rete a un job Dataflow, utilizza l'esperimento use_network_tags come segue:

Java

--dataflowServiceOptions=use_network_tags=TAG_NAME

Python

--dataflow_service_options=use_network_tags=TAG_NAME

Vai

--dataflow_service_options=use_network_tags=TAG_NAME

gcloud

Utilizza il comando gcloud dataflow jobs run con l'opzione additional-experiments. Se utilizzi i template flessibili, utilizza il comando gcloud dataflow flex-template run.

--additional-experiments=use_network_tags=TAG_NAME

Se specifichi il tag di rete, viene aggiunto anche il tag di rete predefinito Dataflow alle VM di avvio modello flessibile.

Sostituisci TAG_NAME con i nomi dei tag. Se aggiungi più di un tag, separa ogni tag con un punto e virgola (;), come segue: TAG_NAME_1;TAG_NAME_2;TAG_NAME_3;....

Una volta avviato un job, non puoi aggiungere altri tag di rete.

Dataflow aggiunge sempre il tag di rete predefinito dataflow a ogni VM worker che crea.

Consulta i limiti che si applicano ai tag di rete.

Regole firewall per Dataflow

Le regole firewall ti consentono di autorizzare o negare il traffico da e verso le tue VM. Se i tuoi job Dataflow utilizzano Dataflow Shuffle o Streaming Engine, devi solo assicurarti che le regole firewall consentano l'accesso alle API Google Cloud . In caso contrario, devi configurare regole firewall aggiuntive in modo che le VM Dataflow possano inviare e ricevere traffico di rete sulla porta TCP 12345 per i job di flussi di dati e sulla porta TCP 12346 per i job batch. Un Project Owner, un editor o un Security Administrator deve creare le regole firewall necessarie nella rete VPC utilizzata dalle VM Dataflow.

Prima di configurare le regole firewall per Dataflow, leggi i seguenti documenti:

Quando crei regole firewall per Dataflow, specifica i tag di rete di Dataflow. In caso contrario, le regole firewall si applicano a tutte le VM nella rete VPC.

Ove applicabile, le policy del firewall gerarchiche vengono valutate per prime e queste regole hanno la precedenza sulle regole firewall VPC. Se il job Dataflow si trova in un progetto che fa parte di una cartella o di un'organizzazione in cui vengono utilizzate le policy del firewall gerarchiche, per apportare modifiche alle policy è necessario il ruolo compute.orgFirewallPolicyAdmin.

Se non crei tag di rete personalizzati quando esegui il codice della pipeline, le VM Dataflow utilizzano il tag dataflow predefinito. In assenza di tag di rete personalizzati, crea le regole firewall con il tag dataflow predefinito.

Se crei tag di rete personalizzati quando esegui il codice della pipeline, le VM di Dataflow utilizzano questi tag. Crea le regole firewall con i tag personalizzati.

Alcune reti VPC, come la rete default creata automaticamente, includono una regola default-allow-internal che soddisfa il requisito del firewall per Dataflow.

Esempio di regola firewall in entrata

La regola firewall in entrata consente alle VM Dataflow di ricevere pacchetti l'una dall'altra. Devi sempre creare regole firewall di autorizzazione in entrata, altrimenti il traffico viene sempre bloccato, anche se le regole in uscita lo consentono.

Nell'esempio seguente, viene creata una regola firewall in entrata per Dataflow, in cui tutte le VM worker hanno il tag di rete predefinito dataflow. Un Project Owner, un editor o un Security Admin può utilizzare il seguente comando gcloud per creare una regola di autorizzazione in entrata che consenta il traffico sulle porte TCP 12345 e 12346 dalle VM con il tag di rete dataflow ad altre VM con lo stesso 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

Sostituisci quanto segue:

  • FIREWALL_RULE_NAME_INGRESS: un nome per la regola firewall

  • NETWORK: il nome della rete utilizzata dalle VM worker

  • CUSTOM_TAG: un elenco delimitato da virgole di tag di rete

    Di seguito sono riportate le linee guida per l'utilizzo dei tag di rete:

    • Se ometti --target-tags, la regola si applica a tutte le VM nella rete VPC.

    • Se ometti --source-tags e tutte le altre specifiche di origine, il traffico proveniente da qualsiasi origine è consentito.

    • Se non hai specificato tag di rete personalizzati e vuoi che la regola sia specifica per le VM Dataflow, utilizza dataflow come tag di rete.

    • Se hai specificato tag di rete personalizzati e vuoi che la regola sia specifica per le VM Dataflow, utilizza i tag di rete personalizzati.

  • PRIORITY_NUM: la priorità della regola firewall

    I numeri più bassi hanno priorità più alte e 0 è la priorità più alta.

Esempio di regola firewall in uscita

La regola firewall in uscita consente alle VM Dataflow di inviarsi pacchetti a vicenda. Se hai creato regole firewall di negazione in uscita, potresti dover creare regole firewall di autorizzazione in uscita personalizzate nella tua rete VPC.

In questo esempio, viene creata una regola firewall in uscita per Dataflow, in cui tutte le VM worker hanno il tag di rete predefinito dataflow. Un Project Owner, un editor o un amministratore della sicurezza può utilizzare il seguente comando gcloud per creare una regola di autorizzazione in uscita che consenta il traffico dalle porte TCP 12345 e 12346 sulle VM con il tag di rete dataflow ad altre VM con lo stesso 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

Sostituisci quanto segue:

  • FIREWALL_RULE_NAME_EGRESS: un nome per la regola firewall

  • NETWORK: il nome della rete utilizzata dalle VM worker

  • CUSTOM_TAG: un elenco delimitato da virgole di tag di rete

    Di seguito sono riportate le linee guida per l'utilizzo dei tag di rete:

    • Se ometti --target-tags, la regola si applica a tutte le VM nella rete VPC.

    • Se ometti --source-tags e tutte le altre specifiche di origine, il traffico proveniente da qualsiasi origine è consentito.

    • Se non hai specificato tag di rete personalizzati e vuoi che la regola sia specifica per le VM Dataflow, utilizza dataflow come tag di rete.

    • Se hai specificato tag di rete personalizzati e vuoi che la regola sia specifica per le VM Dataflow, utilizza i tag di rete personalizzati.

  • DESTINATION-RANGES: un elenco delimitato da virgole di CIDR

    Includi l'intervallo di indirizzi IP principale della subnet selezionata.

  • PRIORITY_NUM: la priorità della regola firewall

    I numeri più bassi hanno priorità più alte e 0 è la priorità più alta.

Per le porte TCP specifiche utilizzate da Dataflow, puoi visualizzare il manifest del container del progetto. Il manifest del container specifica esplicitamente le porte per mappare le porte dell'host nel container.

Accesso SSH alle VM worker

Dataflow non richiede SSH, ma SSH è utile per la risoluzione dei problemi.

Se la VM worker ha un indirizzo IP esterno, puoi connetterti alla VM tramite la console Google Cloud o utilizzando Google Cloud CLI. Per connetterti utilizzando SSH, devi disporre di una regola firewall che consenta le connessioni in entrata sulla porta TCP 22 almeno dall'indirizzo IP del sistema su cui esegui gcloud o del sistema che esegue il browser web che utilizzi per accedere alla consoleGoogle Cloud .

Puoi visualizzare la configurazione e l'attività della rete aprendo una sessione SSH su uno dei tuoi worker ed eseguendo iproute2. Per saperne di più, consulta la pagina iproute2 nel wiki della Linux Foundation.

Se devi connetterti a una VM worker che ha solo un indirizzo IP interno, consulta Scegli un'opzione di connessione per le VM solo interne.

Passaggi successivi