Ce document explique comment configurer une tâche par lot pour bloquer l'accès externe à toutes ses VM ou à des conteneurs spécifiques.
Bloquez l'accès externe à une tâche pour répondre aux exigences de mise en réseau ou améliorer la sécurité. Vous devez bloquer l'accès externe aux VM d'un job à l'aide de VM sans adresses IP externes 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 la tâche utilise l'accès privé à Google pour configurer la connectivité privée aux API et aux 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 la tâche utilise l'accès privé à Google avec VPC Service Controls pour Batch, consultez la page Utiliser VPC Service Controls et Batch.
Si vous ne souhaitez pas bloquer tous les accès externes directs pour une tâche, vous pouvez bloquer l'accès externe pour tous les conteneurs exécutés par une tâche.
Pour en savoir plus sur les concepts de mise en réseau et sur leur configuration, consultez Présentation de la mise en réseau par lot.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez la page Premiers pas avec Batch et activez-la en remplissant les conditions préalables pour les projets et les utilisateurs.
-
Pour obtenir les autorisations dont vous avez besoin pour créer une tâche qui bloque l'accès externe, demandez à votre administrateur de vous attribuer 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 de la tâche, qui est le compte de service Compute Engine par défaut par défaut -
Pour identifier le réseau et le sous-réseau d'une tâche : Lecteur de réseau Compute (
roles/compute.networkViewer
) sur le projet
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via 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 une tâche qui bloque l'accès externe à ses VM doit répondre aux exigences suivantes :
- Le réseau est un réseau cloud privé virtuel (VPC) qui se trouve dans le même projet que la tâche ou un réseau VPC partagé hébergé ou partagé avec le projet pour la tâche.
- Le réseau comprend un sous-réseau (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 aux VM d'une tâche, le réseau doit utiliser Cloud NAT ou l'accès privé à Google afin d'autoriser l'accès aux domaines pour les API et les services utilisés par votre tâche. Par exemple, toutes les tâches utilisent les API Batch et Compute Engine, et très souvent l'API Cloud Logging.
Créer une tâche qui bloque l'accès externe à toutes les VM
Bloquer l'accès externe aux VM d'un job lors de la création du job. Lorsque vous bloquez l'accès externe à 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 cette tâche, 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 l'accès externe aux VM d'un job à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Pour créer une tâche qui bloque l'accès externe à l'aide de gcloud CLI, sélectionnez l'une des options suivantes:
- Utiliser des indicateurs gcloud pour bloquer l'accès externe à toutes les VM
- Utiliser les champs JSON pour bloquer l'accès externe à toutes les VM
Utiliser les indicateurs gcloud pour bloquer l'accès externe à toutes les VM
Pour créer une tâche et utiliser des indicateurs gcloud afin de bloquer l'accès externe, procédez comme suit:
Créez un fichier JSON spécifiant les détails de configuration de votre tâche.
Par exemple, pour créer une tâche 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 la tâche à l'aide de la commande
gcloud batch jobs submit
. Pour bloquer l'accès externe à 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 cette tâche.LOCATION
: emplacement de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès au fichier JSON contenant les détails de configuration de la tâche.HOST_PROJECT_ID
: ID 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é ou partagé avec le projet actuel.REGION
: région où se trouvent le sous-réseau et les VM du job :- Si vous incluez le champ
allowedLocations
pour spécifier l'emplacement autorisé pour les VM pour la tâche, vous devez spécifier la même région ici. - Sinon, la région doit être identique à l'emplacement que vous avez sélectionné pour la tâche (
LOCATION
).
- Si vous incluez le champ
SUBNET
: nom d'un sous-réseau faisant partie du réseau VPC et situé dans la même région que les VM de la tâche.
Bloquer l'accès externe à toutes les VM à l'aide de champs JSON
Pour créer une tâche 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 spécifiant les détails de configuration de votre tâche. Pour bloquer l'accès externe à toutes les VM:
Définissez le champ
noExternalIpAddress
surtrue
.Spécifiez le réseau de la tâche dans les champs
network
etsubnetwork
.
Par exemple, pour créer une tâche de script de base qui bloque l'accès externe à 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 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 fournissant l'accès requis pour cette tâche. Le réseau doit être un réseau VPC dans le projet actuel ou un réseau VPC partagé hébergé ou partagé avec le projet actuel.REGION
: région où se trouvent le sous-réseau et les VM du job :- Si vous incluez le champ
allowedLocations
pour spécifier l'emplacement autorisé pour les VM pour la tâche, vous devez spécifier la même région ici. - Sinon, la région doit être identique à l'emplacement que vous avez sélectionné pour la tâche (
LOCATION
).
- Si vous incluez le champ
SUBNET
: nom d'un sous-réseau faisant partie du réseau VPC et situé dans la même région que les VM de la tâche.
Créez la tâche à 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 attribuer à cette tâche.LOCATION
: emplacement souhaité pour cette tâche.JSON_CONFIGURATION_FILE
: chemin d'accès au fichier JSON contenant les détails de configuration de la tâche.
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 bloquer l'accès externe à toutes les VM:
Définissez le champ
noExternalIpAddress
surtrue
.Spécifiez le réseau de la tâche dans les champs
network
etsubnetwork
.
Par exemple, pour créer une tâche 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
: ID de votre projet.LOCATION
: emplacement souhaité pour cette tâche.JOB_NAME
: nom que vous souhaitez attribuer à cette tâche.HOST_PROJECT_ID
: ID 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 fournissant l'accès requis pour cette tâche. Le réseau doit être un réseau VPC dans le projet actuel ou un réseau VPC partagé hébergé ou partagé avec le projet actuel.REGION
: région où se trouvent le sous-réseau et les VM du job :- Si vous incluez le champ
allowedLocations
pour spécifier l'emplacement autorisé pour les VM pour la tâche, vous devez spécifier la même région ici. - Sinon, la région doit être identique à l'emplacement que vous avez sélectionné pour la tâche (
LOCATION
).
- Si vous incluez le champ
SUBNET
: nom d'un sous-réseau faisant partie du réseau VPC et situé dans la même région que les VM de la tâche.
Créez une tâche qui bloque l'accès externe pour un ou plusieurs conteneurs
Bloquez l'accès externe à l'un des conteneurs d'une tâche lors de sa création.
Vous pouvez bloquer l'accès externe à n'importe quel conteneur de tâche à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Pour créer une tâche qui bloque l'accès externe pour un ou plusieurs conteneurs à l'aide de gcloud CLI, procédez comme suit:
Créez un fichier JSON spécifiant les détails de configuration de votre tâche. Pour chaque conteneur de la tâche que vous souhaitez restreindre, définissez le champ
blockExternalNetwork
surtrue
.Par exemple, pour créer une tâche 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 la tâche à 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 attribuer à cette tâche.LOCATION
: emplacement souhaité pour cette tâche.JSON_CONFIGURATION_FILE
: chemin d'accès au fichier JSON contenant les détails de configuration de la tâche.
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 le champ blockExternalNetwork
sur true
.
Par exemple, pour créer une tâche de conteneur de base qui bloque l'accès externe au 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 votre projet.LOCATION
: emplacement souhaité pour cette tâche.JOB_NAME
: nom que vous souhaitez attribuer à cette tâche.
Étapes suivantes
- Si vous rencontrez des problèmes lors de la création ou de l'exécution d'une tâche, consultez Dépannage.
- En savoir plus sur la mise en réseau
- Découvrez comment créer une tâche.
- Découvrez comment afficher les tâches et les tâches.