Bloquer l'accès externe pour un job

Ce document explique comment configurer une tâche Batch 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 réseau ou améliorer la sécurité. Vous devez bloquer l'accès externe aux VM d'une tâche à l'aide de VM sans adresse IP externe si l'une des conditions suivantes est remplie :

Si vous ne souhaitez pas bloquer tout accès externe direct 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 le moment où configurer la mise en réseau, consultez Présentation de la mise en réseau Batch.

Avant de commencer

  1. 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.
  2. Pour obtenir les autorisations nécessaires pour créer une tâche qui bloque l'accès externe, demandez à votre administrateur de vous accorder les rôles IAM suivants :

    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.

  3. Si vous bloquez l'accès externe pour les 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 une tâche qui bloque l'accès externe pour 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 la tâche ou qui est un réseau VPC partagé hébergé par le projet de la tâche ou partagé avec celui-ci.
    • Le réseau inclut un sous-réseau dans l'emplacement où vous souhaitez exécuter la tâche.
    • Le réseau autorise tout accès requis pour votre tâche. Si vous bloquez l'accès externe pour les VM d'une tâche, 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 tâche. Par exemple, toutes les tâches utilisent les API Batch et Compute Engine, et très souvent l'API Cloud Logging.
    Pour en savoir plus, consultez Créer et gérer des réseaux VPC.

Créer une tâche qui bloque l'accès externe pour toutes les VM

Bloquez l'accès externe pour les VM d'une tâche lorsque vous la 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 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 pour les VM d'une 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 à l'aide de gcloud CLI, sélectionnez l'une des options suivantes :

Utiliser des options gcloud pour bloquer l'accès externe pour toutes les VM

Pour créer une tâche et utiliser des options gcloud afin de bloquer l'accès externe pour la tâche, procédez comme suit :

  1. Créez un fichier JSON qui spécifie 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 contenant les éléments 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"
      }
    }
    
  2. Créez la tâche à l'aide de la gcloud batch jobs submit commande. 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 cette tâche.
    • LOCATION : l' emplacement de cette 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 de 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 celui-ci.
    • REGION: the region where the subnet for the job and the job's Compute Engine resources are located. Pour plus d'informations, consultez la section Emplacements.
    • 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 ressources Compute Engine de la tâche.

Utiliser des champs JSON pour bloquer l'accès externe pour toutes les VM

Pour créer une tâche et utiliser des champs dans le fichier de configuration JSON afin de bloquer l'accès externe pour toutes les VM, procédez comme suit :

  1. Créez un fichier JSON qui spécifie les détails de configuration de votre tâche. Pour bloquer l'accès externe pour toutes les VM, procédez comme suit :

    Par exemple, pour créer une tâche de script de base qui bloque l'accès externe pour toutes les VM, créez un fichier JSON contenant les éléments 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
        }
      ],
      "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 de 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 cette tâche. 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 celui-ci.
    • REGION: the region where the subnet for the job and the job's Compute Engine resources are located. Pour plus d'informations, consultez la section Emplacements.
    • 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 ressources Compute Engine de la tâche.
  2. Créez la tâche à l'aide de la gcloud batch jobs submit commande.

    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 : l' emplacement que vous souhaitez attribuer à 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 jobs.create méthode et spécifiez les détails de configuration de votre tâche. Pour bloquer l'accès externe pour toutes les VM, procédez comme suit :

Par exemple, pour créer une tâche 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 : l'ID du projet de votre projet.
  • LOCATION : l'emplacement que vous souhaitez attribuer à cette tâche.
  • JOB_NAME : nom que vous souhaitez attribuer à cette tâche.
  • 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 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 cette tâche. 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 celui-ci.
  • REGION: the region where the subnet for the job and the job's Compute Engine resources are located. Pour plus d'informations, consultez la section Emplacements.
  • 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 ressources Compute Engine de la tâche.

Créer une tâche qui bloque l'accès externe pour un ou plusieurs conteneurs

Bloquez l'accès externe pour tous les conteneurs d'une tâche lorsque vous la créez.

Vous pouvez bloquer l'accès externe pour tous les conteneurs d'une 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 :

  1. Créez un fichier JSON qui spécifie les détails de configuration de votre tâche. Pour chaque conteneur de la tâche que vous souhaitez limiter, définissez le blockExternalNetwork champ sur true.

    Par exemple, pour créer une tâche de conteneur de base qui bloque l'accès externe pour le conteneur, créez un fichier JSON contenant les éléments suivants.

    {
      "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"
      }
    }
    
  2. Créez la tâche à l'aide de la gcloud batch jobs submit commande.

    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 : l' emplacement que vous souhaitez attribuer à 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 jobs.create méthode et spécifiez les détails de configuration de votre tâche. Pour chaque conteneur de la tâche que vous souhaitez limiter, définissez le blockExternalNetwork champ sur true.

Par exemple, pour créer une tâche de conteneur de base qui bloque l'accès externe pour le 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 : l'ID du projet de votre projet.
  • LOCATION : l'emplacement que vous souhaitez attribuer à cette tâche.
  • JOB_NAME : nom que vous souhaitez attribuer à cette tâche.

Étape suivante