Bloquer l'accès externe à une tâche

Ce document explique comment configurer un job par lot afin de bloquer l'accès externe à toutes ses VM ou à des conteneurs spécifiques.

Bloquez l'accès externe à une tâche afin de répondre aux exigences de mise en réseau ou d'améliorer la sécurité. Vous devez bloquer l'accès externe aux VM d'un job à l'aide de VM sans adresse IP externe si l'une des conditions suivantes est remplie:

Si vous ne souhaitez pas bloquer tous les accès externes directs d'une tâche, vous pouvez également bloquer l'accès externe à 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 la page Présentation de la mise en réseau par lots.

Avant de commencer

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

Bloquez l'accès externe aux VM d'une tâche lorsque vous créez celle-ci. 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 permettant à 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, 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:

Bloquer l'accès externe pour toutes les VM à l'aide des options gcloud

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

  1. Créez un fichier JSON qui spécifie les détails de configuration de votre job.

    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"
      }
    }
    
  2. Créez la tâche à 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 cette tâche.
    • LOCATION: lieu 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 en cours.
    • NETWORK: nom d'un réseau VPC dans le projet en cours ou d'un réseau VPC partagé hébergé par le projet en cours ou partagé avec lui.
    • REGION: région dans laquelle se trouvent le sous-réseau et les VM pour la tâche :
      • Si vous incluez le champ allowedLocations afin de spécifier l'emplacement autorisé des 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).
    • 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 pour toutes les VM à l'aide de champs JSON

Pour créer une tâche et utiliser des champs du 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 job. Pour bloquer l'accès externe de 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 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 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 en cours.
    • NETWORK: nom d'un réseau fournissant l'accès requis pour cette tâche. Il doit s'agir d'un réseau VPC du projet en cours ou d'un réseau VPC partagé hébergé par le projet en cours ou partagé avec lui.
    • REGION: région dans laquelle se trouvent le sous-réseau et les VM pour la tâche :
      • Si vous incluez le champ allowedLocations afin de spécifier l'emplacement autorisé des 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).
    • 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.
  2. 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 souhaité pour 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 de 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, 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 projet de votre projet.
  • LOCATION: emplacement souhaité pour cette tâche.
  • JOB_NAME: nom souhaité pour 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 fournissant l'accès requis pour cette tâche. Il doit s'agir d'un réseau VPC du projet en cours ou d'un réseau VPC partagé hébergé par le projet en cours ou partagé avec lui.
  • REGION: région dans laquelle se trouvent le sous-réseau et les VM pour la tâche :
    • Si vous incluez le champ allowedLocations afin de spécifier l'emplacement autorisé des 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).
  • 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éer 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 lorsque vous créez la tâche.

Vous pouvez bloquer l'accès externe pour n'importe quel conteneur de tâche à l'aide de la gcloud CLI ou de l'API Batch.

gcloud

Pour créer une tâche qui bloque l'accès externe à un ou plusieurs conteneurs à l'aide de la gcloud CLI, procédez comme suit:

  1. 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 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, 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"
      }
    }
    
  2. 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 souhaité pour 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 projet de votre projet.
  • LOCATION: emplacement souhaité pour cette tâche.
  • JOB_NAME: nom souhaité pour cette tâche.

Étapes suivantes