Questo documento spiega come configurare un job batch per bloccare per tutte le VM o per 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 una delle seguenti condizioni è vera:
- Il tuo progetto è limitato dall'organizzazione
compute.vmExternalIpAccess
un vincolo di criterio. La rete specificata per il job utilizza Accesso privato Google per configurare la connettività privata alle API e ai servizi Google. L'accesso privato Google non ha alcun effetto sulle VM con IP esterno indirizzi IP esterni.
Se la rete specificata 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 del tutto l'accesso esterno diretto a un job, puoi bloccare l'accesso esterno ai container eseguiti da un job.
Per ulteriori informazioni sui concetti di networking e su quando configurare il networking, consulta la panoramica del networking batch.
Prima di iniziare
- Se non hai mai utilizzato Batch, rivedi Inizia a utilizzare Batch e abilita Batch, completando prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job che blocchi l'accesso esterno, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Editor job batch (
roles/batch.jobsEditor
) del progetto -
Utente account di servizio (
roles/iam.serviceAccountUser
) sull'account di servizio del job, che per impostazione predefinita è l'account di servizio Compute Engine predefinito -
Per identificare la rete e la subnet per un job:
Compute Network Viewer (
roles/compute.networkViewer
) nel progetto
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
-
Editor job batch (
-
Se blocchi l'accesso esterno per le VM di un job, devi identificare la rete
che vuoi utilizzare per il job. La rete specificata per un job
blocca l'accesso esterno per le sue VM devono soddisfare i seguenti requisiti:
- La rete è un Rete Virtual Private Cloud (VPC) stesso progetto del job o è una Rete VPC condivisa ospitato o condiviso con il progetto relativo al job.
- La rete include una subnet. nella posizione in cui vuoi eseguire il job.
- La rete consenta qualsiasi accesso necessario per il tuo lavoro. Se blocchi l'accesso esterno per le VM di un job, la rete deve utilizzare Cloud NAT o 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 proprietà Batch le API Compute Engine e usano molto spesso l'API Cloud Logging.
Crea un job che blocchi 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 specificare una rete e una subnet che consentano al job di accedere alle API richieste.
Se vuoi utilizzare un modello di istanze VM durante la creazione di questo job, devi specificare la rete e disattivare gli indirizzi IP esterni nel modello di istanze VM. In caso contrario, segui i passaggi riportati di seguito per bloccare l'accesso esterno alle 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 l'interfaccia a riga di comando gcloud, 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
Utilizza 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 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" } }
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 lavoro.JSON_CONFIGURATION_FILE
: il percorso file JSON con i dettagli di configurazione del job.HOST_PROJECT_ID
: il ID progetto del progetto per la rete specificata:- Se utilizzi una rete VPC condiviso, specifica l'host progetto.
- In caso contrario, specifica il progetto attuale.
NETWORK
: il nome di un Rete VPC nel progetto attuale o una rete VPC condivisa ospitato o condiviso con il progetto corrente.REGION
: la regione in cui si trovano la subnet e le VM per il job:- Se includi il parametro
Campo
allowedLocations
specificare la località consentita per le VM per il job, deve specificare la stessa regione qui. - In caso contrario, la regione deve corrispondere alla
località selezionata per il job
(
LOCATION
).
- Se includi il parametro
Campo
SUBNET
: il nome di un subnet che fa parte della rete VPC e si trova nella stessa regione VM per il job.
Utilizza 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, svolgi 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 parametro Campo
noExternalIpAddress
atrue
.Specifica la rete per il job nel Campi
network
esubnetwork
:
Ad esempio, per creare un job di script di base che blocchi 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
: il ID progetto del progetto per la rete specificata:- Se utilizzi una rete VPC condiviso, specifica l'host progetto.
- 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 corrente o una rete VPC condivisa in hosting o condivisa con il progetto corrente.REGION
: la regione in cui si trovano la subnet e le VM per il job:- Se includi il
campo
allowedLocations
per specificare la posizione consentita per le VM del job, devi specificare la stessa regione qui. - In caso contrario, la regione deve corrispondere alla
località selezionata per il job
(
LOCATION
).
- Se includi il
campo
SUBNET
: il nome di una subnet che fa parte della rete VPC e si trova nella stessa regione delle VM per il job.
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 da assegnare a questo job.LOCATION
: il località desiderata per questo lavoro.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
metodo jobs.create
e specifica i dettagli di configurazione del job.
Per bloccare l'accesso esterno per tutte le VM:
Imposta il campo
noExternalIpAddress
sutrue
.Specifica la rete per il job nei campi
network
esubnetwork
.
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
: il ID progetto del tuo progetto.LOCATION
: la località che vuoi per questo lavoro.JOB_NAME
: il nome che vuoi assegnare a questo job.HOST_PROJECT_ID
: il ID progetto del progetto per la rete specificata:- Se utilizzi una rete VPC condivisa, specifica il progetto host.
- In caso contrario, specifica il progetto corrente (
PROJECT_ID
).
NETWORK
: il nome di una rete che fornisce l'accesso richiesto per questo job. La rete deve essere un Rete VPC nel progetto attuale oppure una rete VPC condivisa ospitato o condiviso con il progetto corrente.REGION
: il region in cui la subnet e le VM per il job si trovano:- Se includi il parametro
Campo
allowedLocations
specificare la località consentita per le VM per il job, deve specificare la stessa regione qui. - In caso contrario, la regione deve corrispondere alla
località selezionata per il job
(
LOCATION
).
- Se includi il parametro
Campo
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 blocchi l'accesso esterno per uno o più container
Blocca l'accesso esterno a uno qualsiasi dei container di un job quando crei il un lavoro.
Puoi bloccare l'accesso esterno per uno qualsiasi dei 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:
Crea un file JSON che specifichi i dettagli di configurazione del job. Per ogni container nel job che vuoi limitare, imposta il valore Campo
blockExternalNetwork
atrue
.Ad esempio, per creare un job contenitore di base che blocchi l'accesso esterno al contenitore, 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 comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Sostituisci quanto segue:
JOB_NAME
: il nome da assegnare a questo job.LOCATION
: la posizione che vuoi per questo lavoro.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
metodo jobs.create
e specifica i dettagli di configurazione del job.
Per ogni container nel job che vuoi limitare, imposta il valore
Campo blockExternalNetwork
a true
.
Ad esempio, per creare un job di container di base che blocchi l'accesso esterno al 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
: il ID progetto del tuo progetto.LOCATION
: la località che vuoi per questo lavoro.JOB_NAME
: il nome da assegnare a questo job.
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Scopri di più sul networking.
- Scopri di più sulla creazione di un job.
- Scopri come visualizzare lavori e attività.