Bloccare l'accesso esterno per un job

Questo documento spiega come configurare un job batch per bloccare l'accesso esterno per tutte le relative VM o container specifici.

Blocca l'accesso esterno per un job per soddisfare i requisiti di rete o migliorare la sicurezza. Devi bloccare l'accesso esterno alle VM di un job utilizzando VM senza indirizzi IP esterni se si verifica una delle seguenti condizioni:

In alternativa, se non vuoi bloccare tutti gli accessi esterni diretti per un job, puoi bloccare l'accesso esterno per tutti i container eseguiti da un job.

Per ulteriori informazioni sui concetti di networking e su quando configurare il networking, consulta la Panoramica del networking in batch.

Prima di iniziare

Crea un job che blocca l'accesso esterno per tutte le VM

Blocca l'accesso esterno alle VM di un job quando lo crei. Quando blocchi l'accesso esterno per tutte le VM su cui viene eseguito un job, devi anche specificare una rete e una subnet che consentano al job di accedere alle API richieste.

Se vuoi utilizzare un modello di istanza VM durante la creazione di questo job, devi specificare la rete e disabilitare gli indirizzi IP esterni nel modello di istanza VM. In caso contrario, segui questi passaggi per bloccare l'accesso esterno per le VM di un job utilizzando l'interfaccia a riga di comando gcloud o l'API Batch.

gcloud

Per creare un job che blocchi l'accesso esterno utilizzando gcloud CLI, seleziona una delle seguenti opzioni:

Utilizzare i flag gcloud per bloccare l'accesso esterno per tutte le VM

Per creare un job e utilizzare i flag gcloud per bloccare l'accesso esterno al job, completa i seguenti passaggi:

  1. Crea un file JSON che specifichi i dettagli di configurazione del job.

    Ad esempio, per creare un job di script di base, crea un file JSON con i contenuti seguenti.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Crea il job utilizzando il comando gcloud batch jobs submit. Per bloccare l'accesso esterno per tutte le VM, includi i flag --no-external-ip-address, --network e --subnetwork.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE \
        --no-external-ip-address \
        --network projects/HOST_PROJECT_ID/global/networks/NETWORK \
        --subnetwork projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome di questo job.
    • LOCATION: la località per questo job.
    • JSON_CONFIGURATION_FILE: il percorso del file JSON con i dettagli di configurazione del job.
    • HOST_PROJECT_ID: l'ID progetto del progetto per la rete specificata:
      • Se utilizzi una rete VPC condiviso, specifica il progetto host.
      • Altrimenti, specifica il progetto corrente.
    • NETWORK: il nome di una rete VPC nel progetto attuale o di una rete VPC condivisa ospitata o condivisa con il progetto attuale.
    • REGION: la regione in cui si trovano la subnet e le VM per il job:
      • Se includi il campo allowedLocations per specificare la località consentita per le VM per il job, devi specificare qui la stessa regione.
      • In caso contrario, la regione deve essere uguale alla località selezionata per il job (LOCATION).
    • SUBNET: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle VM per il job.

Utilizzare i campi JSON per bloccare l'accesso esterno per tutte le VM

Per creare un job e utilizzare i campi del file di configurazione JSON per bloccare l'accesso esterno per tutte le VM, segui questi passaggi:

  1. Crea un file JSON che specifichi i dettagli di configurazione del job. Per bloccare l'accesso esterno per tutte le VM:

    Ad esempio, per creare un job di script di base che blocca l'accesso esterno per tutte le VM, crea un file JSON con i seguenti contenuti.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "network": {
          "networkInterfaces": [
            {
              "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
              "noExternalIpAddress": true
            }
          ]
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Sostituisci quanto segue:

    • HOST_PROJECT_ID: l'ID progetto del progetto per la rete specificata:
      • Se utilizzi una rete VPC condiviso, specifica il progetto host.
      • Altrimenti, specifica il progetto corrente.
    • NETWORK: il nome di una rete che fornisce l'accesso necessario per questo job. La rete deve essere una rete VPC nel progetto attuale o una rete VPC condivisa ospitata dal progetto attuale o condivisa con il progetto attuale.
    • REGION: la regione in cui si trovano la subnet e le VM per il job:
      • Se includi il campo allowedLocations per specificare la località consentita per le VM per il job, devi specificare qui la stessa regione.
      • In caso contrario, la regione deve essere uguale alla località selezionata per il job (LOCATION).
    • SUBNET: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle VM per il job.
  2. Crea il job utilizzando il comando gcloud batch jobs submit.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome che vuoi assegnare al job.
    • LOCATION: la località che vuoi per il lavoro.
    • JSON_CONFIGURATION_FILE: il percorso del file JSON con i dettagli di configurazione del job.

API

Per creare un job con l'API Batch, utilizza il metodo jobs.create e specifica i dettagli di configurazione del job. Per bloccare l'accesso esterno per tutte le VM:

Ad esempio, per creare un job di script di base che blocchi l'accesso esterno per tutte le VM, effettua la seguente richiesta POST:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "network": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
          "noExternalIpAddress": true
        }
      ]
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto.
  • LOCATION: la località che vuoi per questo lavoro.
  • JOB_NAME: il nome che vuoi assegnare al job.
  • HOST_PROJECT_ID: l'ID progetto del progetto per la rete specificata:
    • Se utilizzi una rete VPC condiviso, specifica il progetto host.
    • Altrimenti, specifica il progetto corrente (PROJECT_ID).
  • NETWORK: il nome di una rete che fornisce l'accesso necessario per questo job. La rete deve essere una rete VPC nel progetto attuale o una rete VPC condivisa ospitata dal progetto attuale o condivisa con il progetto attuale.
  • REGION: la regione in cui si trovano la subnet e le VM per il job:
    • Se includi il campo allowedLocations per specificare la località consentita per le VM per il job, devi specificare qui la stessa regione.
    • In caso contrario, la regione deve essere uguale alla località selezionata per il job (LOCATION).
  • SUBNET: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle VM per il job.

Crea un job che blocca l'accesso esterno per uno o più container

Blocca l'accesso esterno per qualsiasi container di un job quando lo crei.

Puoi bloccare l'accesso esterno per qualsiasi container del job utilizzando gcloud CLI o l'API Batch.

gcloud

Per creare un job che blocchi l'accesso esterno per uno o più container utilizzando gcloud CLI, completa questi passaggi:

  1. Crea un file JSON che specifichi i dettagli di configurazione del job. Per ogni container nel job che vuoi limitare, imposta il campo blockExternalNetwork su true.

    Ad esempio, per creare un job di container di base che blocchi l'accesso esterno per il container, crea un file JSON con i seguenti contenuti.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "container": {
                  "imageUri": "gcr.io/google-containers/busybox",
                  "entrypoint": "/bin/sh",
                  "commands": [
                    "-c",
                    "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                  ],
                  "blockExternalNetwork": true
                }
              }
            ]
          },
          "taskCount": 4,
          "parallelism": 2
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Crea il job utilizzando il comando gcloud batch jobs submit.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Sostituisci quanto segue:

    • JOB_NAME: il nome che vuoi assegnare al job.
    • LOCATION: la località che vuoi per il lavoro.
    • JSON_CONFIGURATION_FILE: il percorso del file JSON con i dettagli di configurazione del job.

API

Per creare un job con l'API Batch, utilizza il metodo jobs.create e specifica i dettagli di configurazione del job. Per ogni container nel job che vuoi limitare, imposta il campo blockExternalNetwork su true.

Ad esempio, per creare un job di container di base che blocca l'accesso esterno per il container, effettua la seguente richiesta POST:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "container": {
              "imageUri": "gcr.io/google-containers/busybox",
              "entrypoint": "/bin/sh",
              "commands": [
                "-c",
                "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              ],
              "blockExternalNetwork": true
            }
          }
        ]
      },
      "taskCount": 4,
      "parallelism": 2
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto.
  • LOCATION: la località che vuoi per questo lavoro.
  • JOB_NAME: il nome che vuoi assegnare al job.

Passaggi successivi