Ce document explique comment configurer un job Batch pour bloquer l'accès externe à toutes ses VM ou à des conteneurs spécifiques.
Bloquez l'accès externe à un job pour répondre aux exigences réseau ou améliorer la sécurité. Vous devez bloquer l'accès externe aux VM d'un job en utilisant des VM sans adresse IP externe si l'une des conditions suivantes est remplie :
- Votre projet est limité par la contrainte de règle d'administration
compute.vmExternalIpAccess
. Le réseau que vous spécifiez pour le job utilise l'accès privé à Google pour configurer une connectivité privée aux API et services Google. L'accès privé à Google n'a aucune incidence sur les VM disposant d'adresses IP externes.
Si le réseau que vous spécifiez pour le job utilise l'accès privé à Google avec VPC Service Controls pour Batch, consultez Utiliser VPC Service Controls et Batch.
Si vous ne souhaitez pas bloquer tout accès externe direct pour un job, vous pouvez bloquer l'accès externe pour tous les conteneurs exécutés par un job.
Pour en savoir plus sur les concepts de mise en réseau et sur le moment où configurer la mise en réseau, consultez Présentation de la mise en réseau par lot.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les conditions préalables pour les projets et les utilisateurs.
-
Pour obtenir les autorisations nécessaires pour créer un job qui bloque l'accès externe, demandez à votre administrateur de vous accorder les rôles IAM suivants :
-
Éditeur de tâches par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, qui par défaut est le compte de service Compute Engine par défaut -
Pour identifier le réseau et le sous-réseau d'un job :
Lecteur de réseau Compute (
roles/compute.networkViewer
) sur le projet
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de tâches par lot (
-
Si vous bloquez l'accès externe aux VM d'un job, vous devez identifier le réseau que vous souhaitez utiliser pour le job. Le réseau que vous spécifiez pour un job qui bloque l'accès externe à ses VM doit répondre aux exigences suivantes :
- Le réseau est un réseau de cloud privé virtuel (VPC) qui se trouve dans le même projet que le job ou qui est un réseau VPC partagé hébergé par le projet du job ou partagé avec lui.
- Le réseau inclut un sous-réseau à l'emplacement où vous souhaitez exécuter le job.
- Le réseau autorise tous les accès nécessaires à votre travail. Si vous bloquez l'accès externe aux VM d'un job, le réseau doit utiliser Cloud NAT ou l'accès privé à Google pour autoriser l'accès aux domaines des API et services utilisés par votre job. Par exemple, tous les jobs utilisent les API Batch et Compute Engine, et très souvent l'API Cloud Logging.
Créer un job qui bloque l'accès externe pour toutes les VM
Bloquez l'accès externe aux VM d'un job lorsque vous le créez. Lorsque vous bloquez l'accès externe pour toutes les VM sur lesquelles une tâche s'exécute, vous devez également spécifier un réseau et un sous-réseau qui permettent à la tâche d'accéder aux API requises.
Si vous souhaitez utiliser un modèle d'instance de VM lors de la création de ce job, vous devez spécifier le réseau et désactiver les adresses IP externes dans le modèle d'instance de VM. Sinon, suivez les étapes ci-dessous pour bloquer l'accès externe aux VM d'un job à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Pour créer un job qui bloque l'accès externe à l'aide de la gcloud CLI, sélectionnez l'une des options suivantes :
- Utiliser des options gcloud pour bloquer l'accès externe à toutes les VM
- Utiliser des champs JSON pour bloquer l'accès externe à toutes les VM
Utiliser des indicateurs gcloud pour bloquer l'accès externe pour toutes les VM
Pour créer un job et utiliser des indicateurs gcloud afin de bloquer l'accès externe au job, procédez comme suit :
Créez un fichier JSON qui spécifie les détails de configuration de votre job.
Par exemple, pour créer un job de script de base, créez un fichier JSON avec le contenu suivant.
{ "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" } }
Créez le job à l'aide de la commande
gcloud batch jobs submit
. Pour bloquer l'accès externe à toutes les VM, incluez les indicateurs--no-external-ip-address
,--network
et--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
Remplacez les éléments suivants :
JOB_NAME
: nom de ce job.LOCATION
: emplacement de ce job.JSON_CONFIGURATION_FILE
: chemin d'accès au fichier JSON contenant les informations de configuration du job.HOST_PROJECT_ID
: ID du projet du projet pour le réseau que vous spécifiez :- Si vous utilisez un réseau VPC partagé, spécifiez le projet hôte.
- Sinon, spécifiez le projet actuel.
NETWORK
: nom d'un réseau VPC dans le projet actuel ou d'un réseau VPC partagé hébergé par le projet actuel ou partagé avec lui.REGION
: région où se trouvent le sous-réseau et les VM pour le job :- Si vous incluez le champ
allowedLocations
pour spécifier l'emplacement autorisé des VM pour le job, vous devez spécifier la même région ici. - Sinon, la région doit être identique à l'emplacement que vous sélectionnez pour le job (
LOCATION
).
- Si vous incluez le champ
SUBNET
: nom d'un sous-réseau qui fait partie du réseau VPC et qui se trouve dans la même région que les VM du job.
Utiliser des champs JSON pour bloquer l'accès externe pour toutes les VM
Pour créer un job et utiliser les champs du fichier de configuration JSON afin de bloquer l'accès externe pour toutes les VM, procédez comme suit :
Créez un fichier JSON qui spécifie les détails de configuration de votre job. Pour bloquer l'accès externe à toutes les VM, procédez comme suit :
Définissez le champ
noExternalIpAddress
surtrue
.Spécifiez le réseau pour le job dans les champs
network
etsubnetwork
.
Par exemple, pour créer un job de script de base qui bloque l'accès externe pour toutes les VM, créez un fichier JSON avec le contenu suivant.
{ "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" } }
Remplacez les éléments suivants :
HOST_PROJECT_ID
: ID du projet du projet pour le réseau que vous spécifiez :- Si vous utilisez un réseau VPC partagé, spécifiez le projet hôte.
- Sinon, spécifiez le projet actuel.
NETWORK
: nom d'un réseau qui fournit l'accès requis pour ce job. Le réseau doit être un réseau VPC dans le projet actuel ou un réseau VPC partagé hébergé par le projet actuel ou partagé avec lui.REGION
: région où se trouvent le sous-réseau et les VM pour le job :- Si vous incluez le champ
allowedLocations
pour spécifier l'emplacement autorisé des VM pour le job, vous devez spécifier la même région ici. - Sinon, la région doit être identique à l'emplacement que vous sélectionnez pour le job (
LOCATION
).
- Si vous incluez le champ
SUBNET
: nom d'un sous-réseau qui fait partie du réseau VPC et qui se trouve dans la même région que les VM du job.
Créez le job à l'aide de la commande
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom que vous souhaitez donner à ce job.LOCATION
: emplacement souhaité pour ce job.JSON_CONFIGURATION_FILE
: chemin d'accès au fichier JSON contenant les informations de configuration du job.
API
Pour créer un job à l'aide de l'API Batch, utilisez la méthode jobs.create
et spécifiez les détails de configuration de votre job.
Pour bloquer l'accès externe à toutes les VM, procédez comme suit :
Définissez le champ
noExternalIpAddress
surtrue
.Spécifiez le réseau pour le job dans les champs
network
etsubnetwork
.
Par exemple, pour créer un job de script de base qui bloque l'accès externe pour toutes les VM, envoyez la requête POST
suivante :
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"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement que vous souhaitez utiliser pour ce job.JOB_NAME
: nom que vous souhaitez donner à ce job.HOST_PROJECT_ID
: ID du projet du projet pour le réseau que vous spécifiez :- Si vous utilisez un réseau VPC partagé, spécifiez le projet hôte.
- Sinon, spécifiez le projet actuel (
PROJECT_ID
).
NETWORK
: nom d'un réseau qui fournit l'accès requis pour ce job. Le réseau doit être un réseau VPC dans le projet actuel ou un réseau VPC partagé hébergé par le projet actuel ou partagé avec lui.REGION
: région où se trouvent le sous-réseau et les VM pour le job :- Si vous incluez le champ
allowedLocations
pour spécifier l'emplacement autorisé des VM pour le job, vous devez spécifier la même région ici. - Sinon, la région doit être identique à l'emplacement que vous sélectionnez pour le job (
LOCATION
).
- Si vous incluez le champ
SUBNET
: nom d'un sous-réseau qui fait partie du réseau VPC et qui se trouve dans la même région que les VM du job.
Créer un job qui bloque l'accès externe pour un ou plusieurs conteneurs
Bloquez l'accès externe pour l'un des conteneurs d'un job lorsque vous créez le job.
Vous pouvez bloquer l'accès externe pour n'importe quel conteneur d'un job à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Pour créer un job qui bloque l'accès externe pour un ou plusieurs conteneurs à l'aide de la gcloud CLI, procédez comme suit :
Créez un fichier JSON qui spécifie les détails de configuration de votre job. Pour chaque conteneur du job que vous souhaitez limiter, définissez le champ
blockExternalNetwork
surtrue
.Par exemple, pour créer un job de conteneur de base qui bloque l'accès externe au conteneur, créez un fichier JSON avec le contenu suivant.
{ "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" } }
Créez le job à l'aide de la commande
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom que vous souhaitez donner à ce job.LOCATION
: emplacement souhaité pour ce job.JSON_CONFIGURATION_FILE
: chemin d'accès au fichier JSON contenant les informations de configuration du job.
API
Pour créer un job à l'aide de l'API Batch, utilisez la méthode jobs.create
et spécifiez les détails de configuration de votre job.
Pour chaque conteneur du job que vous souhaitez limiter, définissez le champ blockExternalNetwork
sur true
.
Par exemple, pour créer un job de conteneur de base qui bloque l'accès externe au conteneur, envoyez la requête POST
suivante :
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"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement que vous souhaitez utiliser pour ce job.JOB_NAME
: nom que vous souhaitez donner à ce job.
Étapes suivantes
- Si vous rencontrez des problèmes pour créer ou exécuter un job, consultez la section Dépannage.
- En savoir plus sur la mise en réseau
- Découvrez comment créer un job.
- Découvrez comment afficher les tâches et les jobs.