Questo documento spiega come configurare un job di Batch per bloccare l'accesso esterno per tutte le VM o per container specifici.
Blocca l'accesso esterno per un job per soddisfare i requisiti di networking o migliorare la sicurezza. Devi bloccare l'accesso esterno per le VM di un job utilizzando VM senza indirizzi IP esterni se si verifica una delle seguenti condizioni:
- Il tuo progetto è limitato dal vincolo della policy dell'organizzazione
compute.vmExternalIpAccess. La rete che specifichi per il job utilizza l'accesso privato Google per configurare la connettività privata alle API e ai servizi Google. L'accesso privato Google non ha alcun effetto sulle VM che hanno indirizzi IP esterni.
Se la rete che specifichi per il job utilizza l'accesso privato Google con i Controlli di servizio VPC per Batch, consulta Utilizzare i Controlli di servizio VPC e Batch.
In alternativa, se non vuoi bloccare tutto l'accesso esterno diretto 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 Panoramica del networking di Batch.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la pagina Inizia a utilizzare Batch e abilita Batch completando i prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job che blocca l'accesso esterno, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Batch Job Editor (
roles/batch.jobsEditor) sul progetto - Utente del service account (
roles/iam.serviceAccountUser) sul service account del job, che per impostazione predefinita è il service account predefinito di Compute Engine -
Per identificare la rete e la subnet per un job:
Compute Network Viewer (
roles/compute.networkViewer) sul progetto
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
- Batch Job Editor (
-
Se blocchi l'accesso esterno per le VM di un job, devi identificare la rete che vuoi utilizzare per il job. La rete che specifichi per un job che blocca l'accesso esterno per le sue VM deve soddisfare i seguenti requisiti:
- La rete è una rete Virtual Private Cloud (VPC) che si trova nello stesso progetto del job o è una rete VPC condivisa ospitata dal progetto per il job o condivisa con quest'ultimo.
- La rete include una subnet nella località in cui vuoi eseguire il job.
- La rete consente qualsiasi accesso richiesto per il job. Se blocchi l'accesso esterno per le VM di un job, la rete deve utilizzare Cloud NAT o l'accesso privato Google per consentire l'accesso ai domini per le API e i servizi utilizzati dal job. Ad esempio, tutti i job utilizzano le API Batch e Compute Engine e molto spesso utilizzano l'API Cloud Logging.
Creare un job che blocca l'accesso esterno per tutte le VM
Blocca l'accesso esterno per le VM di un job quando crei il job. 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 gcloud CLI o l'API Batch.
gcloud
Per creare un job che blocca l'accesso esterno utilizzando gcloud CLI, seleziona una delle seguenti opzioni:
- Utilizzare i flag gcloud per bloccare l'accesso esterno per tutte le VM
- Utilizzare i campi JSON per bloccare l'accesso esterno per tutte le VM
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 per il job, completa i seguenti passaggi:
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 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 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }Crea il job utilizzando il
gcloud batch jobs submitcomando. Per bloccare l'accesso esterno per tutte le VM, includi i flag--no-external-ip-address,--networke--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/SUBNETSostituisci quanto segue:
JOB_NAME: il nome di questo job.LOCATION: la località di 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 che specifichi:- Se utilizzi una rete VPC condiviso, specifica il progetto host.
- In caso contrario, specifica il progetto attuale.
NETWORK: il nome di una rete VPC nel progetto attuale o di una rete VPC condivisa ospitata dal progetto attuale o condivisa con quest'ultimo.REGION: la regione in cui si trovano la subnet per il job e le risorse Compute Engine del job. Per ulteriori informazioni, consulta Località.SUBNET: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle risorse Compute Engine del job.
Utilizzare i campi JSON per bloccare l'accesso esterno per tutte le VM
Per creare un job e utilizzare i campi nel file di configurazione JSON per bloccare l'accesso esterno per tutte le VM, completa i seguenti passaggi:
Crea un file JSON che specifichi i dettagli di configurazione del job. Per bloccare l'accesso esterno per tutte le VM:
Imposta il
noExternalIpAddresscampo sutrue.Specifica la rete per il job nei
networkesubnetworkcampi.
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 che specifichi:- Se utilizzi una rete VPC condiviso, specifica il progetto host.
- In caso contrario, specifica il progetto attuale.
NETWORK: il nome di una rete che fornisce l'accesso richiesto 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 quest'ultimo.REGION: la regione in cui si trovano la subnet per il job e le risorse Compute Engine del job. Per ulteriori informazioni, consulta Località.SUBNET: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle risorse Compute Engine del job.
Crea il job utilizzando il
gcloud batch jobs submitcomando.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESostituisci quanto segue:
JOB_NAME: il nome che vuoi assegnare a questo job.LOCATION: la località che vuoi assegnare a questo job.JSON_CONFIGURATION_FILE: il percorso del file JSON con i dettagli di configurazione del job.
API
Per creare un job utilizzando l'API Batch, utilizza il
jobs.create metodo
e specifica i dettagli di configurazione del job.
Per bloccare l'accesso esterno per tutte le VM:
Imposta il
noExternalIpAddresscampo sutrue.Specifica la rete per il job nei
networkesubnetworkcampi.
Ad esempio, per creare un job di script di base che blocca l'accesso esterno per tutte le VM, invia 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 tuo progetto.LOCATION: la località che vuoi assegnare a questo job.JOB_NAME: il nome che vuoi assegnare a questo job.HOST_PROJECT_ID: l' ID progetto del progetto per la rete che specifichi:- Se utilizzi una rete VPC condiviso, specifica il progetto host.
- In caso contrario, specifica il progetto attuale (
PROJECT_ID).
NETWORK: il nome di una rete che fornisce l'accesso richiesto 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 quest'ultimo.REGION: la regione in cui si trovano la subnet per il job e le risorse Compute Engine del job. Per ulteriori informazioni, consulta Località.SUBNET: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle risorse Compute Engine del job.
Creare un job che blocca l'accesso esterno per uno o più container
Blocca l'accesso esterno per uno qualsiasi dei container di un job quando crei il job.
Puoi bloccare l'accesso esterno per uno qualsiasi dei container di un job utilizzando gcloud CLI o l'API Batch.
gcloud
Per creare un job che blocca l'accesso esterno per uno o più container utilizzando gcloud CLI, completa i seguenti passaggi:
Crea un file JSON che specifichi i dettagli di configurazione del job. Per ogni container nel job che vuoi limitare, imposta il
blockExternalNetworkcampo sutrue.Ad esempio, per creare un job di container di base che blocca 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" } }Crea il job utilizzando il
gcloud batch jobs submitcomando.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESostituisci quanto segue:
JOB_NAME: il nome che vuoi assegnare a questo job.LOCATION: la località che vuoi assegnare a questo job.JSON_CONFIGURATION_FILE: il percorso del file JSON con i dettagli di configurazione del job.
API
Per creare un job utilizzando l'API Batch, utilizza il
jobs.create metodo
e specifica i dettagli di configurazione del job.
Per ogni container nel job che vuoi limitare, imposta il
blockExternalNetwork campo
su true.
Ad esempio, per creare un job di container di base che blocca l'accesso esterno per il container, invia 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 tuo progetto.LOCATION: la località che vuoi assegnare a questo job.JOB_NAME: il nome che vuoi assegnare a questo job.
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta Risoluzione dei problemi.
- Scopri di più sul networking.
- Scopri di più sulla creazione di un job.
- Scopri come visualizzare job e attività.