Ce document explique comment configurer un job par lot pour bloquer un accès externe pour toutes ses VM ou des conteneurs spécifiques.
bloquer l'accès externe à un job pour répondre aux exigences de mise en réseau ou pour améliorer la sécurité. Vous devez bloquer l'accès externe aux VM d'un job en utilisant VM sans adresse IP externe si l'une des conditions suivantes est remplie:
- Votre projet est limité par la contrainte de règles d'administration
compute.vmExternalIpAccess
. Le réseau que vous spécifiez pour le job utilise Accès privé à Google pour configurer une connectivité privée aux API et services Google. L'accès privé à Google n'a aucune répercussion sur les VM disposant d'adresses IP externes.
Si le réseau que vous spécifiez pour la tâche utilise l'accès privé à Google avec VPC Service Controls pour le traitement par lot, consultez la section Utiliser VPC Service Controls et le traitement par lot.
Sinon, si vous ne souhaitez pas bloquer tous les accès externes directs pour un job, vous pouvez bloquer l'accès externe à tous les conteneurs exécutés par un job.
Pour en savoir plus, sur les concepts de mise en réseau et savoir quand 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 auparavant, consultez Premiers pas avec Batch et activez Batch en suivant la 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 le rôles IAM suivants:
-
Éditeur de jobs par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, qui est par défaut le compte de service Compute Engine par défaut -
Pour identifier le réseau et le sous-réseau d'une tâche, procédez comme suit:
Lecteur de réseau Compute (
roles/compute.networkViewer
) sur le projet
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de jobs par lot (
-
Si vous bloquez l'accès externe aux VM d'une tâche, vous devez identifier le réseau que vous souhaitez utiliser pour la tâche. Le réseau que vous spécifiez pour un job
bloque l'accès externe pour ses VM doivent répondre aux exigences suivantes:
- Le réseau est réseau cloud privé virtuel (VPC) situé dans le le même projet que le poste Réseau VPC partagé qui est hébergé par ou partagé avec le projet pour le travail.
- Le réseau inclut un sous-réseau à l'emplacement où vous souhaitez exécuter la tâche.
- Le réseau autorise tous les accès requis pour votre tâche. Si vous bloquez l'accès externe pour les VM d'un job, le réseau doit utiliser Cloud NAT ou Accès privé à Google pour autoriser l'accès aux domaines des API et des services utilisés par votre travail. Par exemple, tous les jobs utilisent les commandes les API Compute Engine et utilisent très souvent l'API Cloud Logging.
Créer une tâche qui bloque l'accès externe pour toutes les VM
Bloquez l'accès externe aux VM d'un job lorsque vous créez le job. Lorsque vous bloquez l'accès externe pour toutes les VM sur lesquelles un job s'exécute, vous spécifier un réseau et un sous-réseau qui permettent au job 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, procédez comme suit pour bloquer des sources externes pour les VM d'un job en utilisant gcloud CLI ou l'API Batch.
gcloud
Pour créer une tâche 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 pour toutes les VM
Bloquez l'accès externe pour toutes les VM à l'aide des options gcloud
Pour créer un job et utiliser les options gcloud afin de bloquer l'accès externe associé, 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 la propriété les contenus suivants.
{ "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 pour toutes les VM, incluez les options--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 la tâche.LOCATION
: le location de cette tâche.JSON_CONFIGURATION_FILE
: chemin d'accès de JSON contenant les détails de la configuration du job.HOST_PROJECT_ID
: ID de projet du projet pour le réseau que vous spécifiez :- Si vous utilisez un réseau VPC partagé, spécifiez l'hôte projet.
- Sinon, spécifiez le projet actuel.
NETWORK
: nom d'un Réseau VPC dans le projet actuel ou un réseau VPC partagé qui est hébergé par ou partagé avec le projet en cours.REGION
: le région dans laquelle le sous-réseau et les VM pour le poste sont situés:- Si vous incluez le paramètre
Champ
allowedLocations
pour spécifier l'emplacement autorisé pour les VM associées au job, vous doit spécifier la même région ici. - Sinon, la région doit être identique à celle
Le lieu que vous avez sélectionné pour le projet
(
LOCATION
).
- Si vous incluez le paramètre
Champ
SUBNET
: nom d'un qui fait partie du sous-réseau réseau VPC et se trouve dans la même région que le des VM pour la tâche.
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 pour : 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 tâche. Pour bloquer l'accès externe à toutes les VM, procédez comme suit :
Définissez le paramètre Champ
noExternalIpAddress
àtrue
.Spécifiez le réseau du job dans la 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
: le 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 en cours.
NETWORK
: nom d'un réseau qui fournit l'accès requis pour ce job. Le réseau doit être Réseau VPC dans le projet en cours ou un réseau VPC partagé qui est hébergé par ou partagé avec le projet en cours.REGION
: le région dans laquelle le sous-réseau et les VM pour le poste sont situés:- Si vous incluez le paramètre
Champ
allowedLocations
pour spécifier l'emplacement autorisé pour les VM associées au job, vous doit spécifier la même région ici. - Sinon, la région doit être identique à celle
Le lieu que vous avez sélectionné pour le projet
(
LOCATION
).
- Si vous incluez le paramètre
Champ
SUBNET
: nom d'un qui fait partie du sous-réseau réseau VPC et se trouve dans la même région que le des VM pour la tâche.
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 souhaité pour cette tâche.LOCATION
: le location que vous souhaitez pour cette tâche.JSON_CONFIGURATION_FILE
: chemin d'accès de JSON contenant les détails de la configuration du job.
API
Pour créer un job à l'aide de l'API Batch, utilisez la classe
Méthode jobs.create
et spécifiez les détails de configuration de votre job.
Pour bloquer l'accès externe pour toutes les VM, procédez comme suit:
Définissez le paramètre Champ
noExternalIpAddress
àtrue
.Spécifiez le réseau du job dans la Champs
network
etsubnetwork
.
Par exemple, pour créer un job de script de base qui bloque l'accès externe
toutes les VM, exécutez 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
: le ID du projet de votre projet.LOCATION
: emplacement que vous souhaitez pour ce travail.JOB_NAME
: nom souhaité pour cette tâche.HOST_PROJECT_ID
: le ID du projet du projet pour le réseau que vous spécifiez:- Si vous utilisez un réseau VPC partagé, spécifiez l'hôte projet.
- Sinon, spécifiez le projet actuel (
PROJECT_ID
).
NETWORK
: nom d'un réseau qui fournit l'accès requis pour cette tâche. Le réseau doit être Réseau VPC dans le projet en cours ou un réseau VPC partagé qui est hébergé par ou partagé avec le projet en cours.REGION
: le région dans laquelle le sous-réseau et les VM pour le poste sont situés:- Si vous incluez le paramètre
Champ
allowedLocations
pour spécifier l'emplacement autorisé pour les VM associées au job, vous doit spécifier la même région ici. - Sinon, la région doit être identique à celle
Le lieu que vous avez sélectionné pour le projet
(
LOCATION
).
- Si vous incluez le paramètre
Champ
SUBNET
: nom d'un qui fait partie du sous-réseau réseau VPC et se trouve dans la même région que le des VM pour la tâche.
Créer un job qui bloque l'accès externe à un ou plusieurs conteneurs
Bloquez l'accès externe à l'un des conteneurs d'une tâche lorsque vous la créez.
Vous pouvez bloquer l'accès externe pour n'importe quel conteneur de job en utilisant gcloud CLI ou l'API Batch.
gcloud
Pour créer une tâche qui bloque l'accès externe à un ou plusieurs conteneurs à l'aide de la CLI gcloud, procédez comme suit :
Créez un fichier JSON qui spécifie les détails de configuration de votre job. Pour chaque conteneur de la tâche que vous souhaitez limiter, définissez le champ
blockExternalNetwork
surtrue
.Par exemple, pour créer un job de conteneur de base qui bloque les serveurs externes pour le 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 souhaité pour cette tâche.LOCATION
: le location que vous souhaitez pour cette tâche.JSON_CONFIGURATION_FILE
: chemin d'accès de JSON contenant les détails de la configuration du job.
API
Pour créer une tâche à l'aide de l'API Batch, utilisez la méthode jobs.create
et spécifiez les détails de configuration de votre tâche.
Pour chaque conteneur de la tâche que vous souhaitez restreindre, définissez
Champ blockExternalNetwork
à true
.
Par exemple, pour créer un job de conteneur de base qui bloque les serveurs externes
pour le conteneur, exécutez 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 pour ce travail.JOB_NAME
: nom souhaité pour cette tâche.
Étape suivante
- Si vous rencontrez des problèmes lors de la création ou de l'exécution d'un job, consultez la section Dépannage.
- En savoir plus sur la mise en réseau
- En savoir plus sur la création d'une offre d'emploi
- Découvrez comment afficher les jobs et les tâches.