Bloquear el acceso externo a un puesto

En este documento se explica cómo configurar un trabajo por lotes para bloquear el acceso externo de todas sus VMs o de contenedores específicos.

Bloquea el acceso externo a un trabajo para cumplir los requisitos de red o mejorar la seguridad. Debes bloquear el acceso externo a las VMs de un trabajo mediante VMs sin direcciones IP externas si se cumple alguna de las siguientes condiciones:

Si no quiere bloquear todo el acceso externo directo a un trabajo, puede bloquear el acceso externo a los contenedores en los que se ejecute un trabajo.

Para obtener más información sobre los conceptos de redes y cuándo configurar las redes, consulta la información general sobre las redes por lotes.

Antes de empezar

  1. Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
  2. Para obtener los permisos que necesitas para crear un trabajo que bloquee el acceso externo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

  3. Si bloqueas el acceso externo a las VMs de un trabajo, debes identificar la red que quieres usar para el trabajo. La red que especifiques para un trabajo que bloquee el acceso externo de sus VMs debe cumplir los siguientes requisitos:
    • La red es una red de nube privada virtual (VPC) que está en el mismo proyecto que el trabajo o es una red de VPC compartida que está alojada en el proyecto del trabajo o se comparte con él.
    • La red incluye una subred en la ubicación en la que quieres ejecutar el trabajo.
    • La red permite cualquier acceso necesario para tu trabajo. Si bloqueas el acceso externo a las VMs de un trabajo, la red debe usar Cloud NAT o Acceso privado de Google para permitir el acceso a los dominios de las APIs y los servicios que usa el trabajo. Por ejemplo, todos los trabajos usan las APIs Batch y Compute Engine, y muy a menudo la API Cloud Logging.
    Para obtener más información, consulta el artículo Crear y gestionar redes de VPC.

Crear un trabajo que bloquee el acceso externo de todas las VMs

Bloquea el acceso externo a las VMs de un trabajo al crear el trabajo. Si bloqueas el acceso externo de todas las VMs en las que se ejecuta un trabajo, también debes especificar una red y una subred que permitan que el trabajo acceda a las APIs necesarias.

Si quieres usar una plantilla de instancia de VM al crear este trabajo, debes especificar la red y inhabilitar las direcciones IP externas en la plantilla de instancia de VM. De lo contrario, sigue estos pasos para bloquear el acceso externo a las VMs de un trabajo mediante la CLI de gcloud o la API Batch.

gcloud

Para crear un trabajo que bloquee el acceso externo mediante gcloud CLI, selecciona una de las siguientes opciones:

Usar marcas de gcloud para bloquear el acceso externo de todas las VMs

Para crear un trabajo y usar las marcas de gcloud para bloquear el acceso externo al trabajo, sigue estos pasos:

  1. Crea un archivo JSON que especifique los detalles de configuración del trabajo.

    Por ejemplo, para crear un trabajo de secuencia de comandos básico, crea un archivo JSON con el siguiente contenido.

    {
      "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. Crea el trabajo con el comando gcloud batch jobs submit. Para bloquear el acceso externo a todas las VMs, incluye las marcas --no-external-ip-address, --network y --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
    

    Haz los cambios siguientes:

    • JOB_NAME: el nombre de este trabajo.
    • LOCATION: la ubicación de este trabajo.
    • JSON_CONFIGURATION_FILE: la ruta del archivo JSON con los detalles de configuración del trabajo.
    • HOST_PROJECT_ID: el ID del proyecto del proyecto de la red que especifiques:
      • Si utilizas una red de VPC compartida, especifica el proyecto host.
      • De lo contrario, especifica el proyecto actual.
    • NETWORK: el nombre de una red de VPC del proyecto actual o de una red de VPC compartida alojada en el proyecto actual o compartida con él.
    • REGION: la región en la que se encuentran la subred y las VMs del trabajo:
      • Si incluye el campo allowedLocations para especificar la ubicación permitida de las VMs del trabajo, debe especificar la misma región aquí.
      • De lo contrario, la región debe ser la misma que la ubicación que selecciones para el trabajo (LOCATION).
    • SUBNET: el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VMs del trabajo.

Usar campos JSON para bloquear el acceso externo de todas las VMs

Para crear un trabajo y usar campos del archivo de configuración JSON para bloquear el acceso externo de todas las máquinas virtuales, sigue estos pasos:

  1. Crea un archivo JSON que especifique los detalles de configuración del trabajo. Para bloquear el acceso externo de todas las VMs, sigue estos pasos:

    Por ejemplo, para crear un trabajo de secuencia de comandos básico que bloquee el acceso externo de todas las máquinas virtuales, crea un archivo JSON con el siguiente contenido.

    {
      "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"
      }
    }
    

    Haz los cambios siguientes:

    • HOST_PROJECT_ID: el ID del proyecto del proyecto de la red que especifiques:
      • Si utilizas una red de VPC compartida, especifica el proyecto host.
      • De lo contrario, especifica el proyecto actual.
    • NETWORK: el nombre de una red que proporciona el acceso necesario para este trabajo. La red debe ser una red de VPC del proyecto actual o una red de VPC compartida alojada en el proyecto actual o compartida con él.
    • REGION: la región en la que se encuentran la subred y las VMs del trabajo:
      • Si incluye el campo allowedLocations para especificar la ubicación permitida de las VMs del trabajo, debe especificar la misma región aquí.
      • De lo contrario, la región debe ser la misma que la ubicación que selecciones para el trabajo (LOCATION).
    • SUBNET: el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VMs del trabajo.
  2. Crea el trabajo con el comando gcloud batch jobs submit.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

    • JOB_NAME: el nombre que quieras darle a este trabajo.
    • LOCATION: la ubicación que quieras para este trabajo.
    • JSON_CONFIGURATION_FILE: la ruta del archivo JSON con los detalles de configuración del trabajo.

API

Para crear un trabajo con la API Batch, usa el método jobs.create y especifica los detalles de configuración del trabajo. Para bloquear el acceso externo de todas las VMs, sigue estos pasos:

Por ejemplo, para crear un trabajo de secuencia de comandos básico que bloquee el acceso externo a todas las VMs, haz la siguiente solicitud POST:

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"
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto de tu proyecto.
  • LOCATION: la ubicación que quieras para este puesto.
  • JOB_NAME: el nombre que quieras darle a este trabajo.
  • HOST_PROJECT_ID: el ID del proyecto del proyecto de la red que especifiques:
    • Si utilizas una red de VPC compartida, especifica el proyecto host.
    • De lo contrario, especifica el proyecto actual (PROJECT_ID).
  • NETWORK: el nombre de una red que proporciona el acceso necesario para este trabajo. La red debe ser una red de VPC del proyecto actual o una red de VPC compartida alojada en el proyecto actual o compartida con él.
  • REGION: la región en la que se encuentran la subred y las VMs del trabajo:
    • Si incluye el campo allowedLocations para especificar la ubicación permitida de las VMs del trabajo, debe especificar la misma región aquí.
    • De lo contrario, la región debe ser la misma que la ubicación que selecciones para el trabajo (LOCATION).
  • SUBNET: el nombre de una subred que forma parte de la red de VPC y se encuentra en la misma región que las VMs del trabajo.

Crear un trabajo que bloquee el acceso externo a uno o varios contenedores

Bloquea el acceso externo a cualquiera de los contenedores de un trabajo al crear el trabajo.

Puedes bloquear el acceso externo a cualquiera de los contenedores de un trabajo mediante la CLI de gcloud o la API Batch.

gcloud

Para crear un trabajo que bloquee el acceso externo a uno o varios contenedores mediante la CLI de gcloud, sigue estos pasos:

  1. Crea un archivo JSON que especifique los detalles de configuración del trabajo. En cada contenedor del trabajo que quieras restringir, asigna el valor true al campo blockExternalNetwork.

    Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo al contenedor, crea un archivo JSON con el siguiente contenido.

    {
      "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. Crea el trabajo con el comando gcloud batch jobs submit.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Haz los cambios siguientes:

    • JOB_NAME: el nombre que quieras darle a este trabajo.
    • LOCATION: la ubicación que quieras para este trabajo.
    • JSON_CONFIGURATION_FILE: la ruta del archivo JSON con los detalles de configuración del trabajo.

API

Para crear un trabajo con la API Batch, usa el método jobs.create y especifica los detalles de configuración del trabajo. En cada contenedor del trabajo que quieras restringir, asigna el valor true al campo blockExternalNetwork.

Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo al contenedor, haz la siguiente solicitud POST:

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"
  }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto de tu proyecto.
  • LOCATION: la ubicación que quieras para este puesto.
  • JOB_NAME: el nombre que quieras darle a este trabajo.

Siguientes pasos