Bloquea el acceso externo a un trabajo

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

Bloquear el acceso externo de una tarea para cumplir con los requisitos de red o mejorar la seguridad Debes bloquear el acceso externo a las VMs de un trabajo usando VMs sin direcciones IP externas si se cumple alguna de las siguientes condiciones:

Como alternativa, si no quieres bloquear todo el acceso externo directo de un trabajo, puedes bloquear el acceso externo a cualquier contenedor en el que se ejecute un trabajo.

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

Antes de comenzar

  1. Si nunca usaste Batch, revisa Comienza a usar Batch y habilitar Batch completando el requisitos previos para los proyectos y usuarios.
  2. Con el fin de obtener los permisos que necesitas para crear un trabajo que bloquee el acceso externo, solicita a tu administrador que te otorgue el los siguientes roles de IAM:

    Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

  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 especificas para un trabajo que el acceso externo de sus VMs debe cumplir con los siguientes requisitos:
    • La red es una red de nube privada virtual (VPC) que se encuentra en mismo proyecto que el trabajo o es un Red de VPC compartida que se aloja o se comparte con el proyecto para el trabajo.
    • La red incluye una subred en la ubicación en la que deseas ejecutar la tarea.
    • 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 a Google para permitir el acceso a los dominios de las APIs y los servicios que usa tu trabajo. Por ejemplo, todos los trabajos usan las instancias APIs de Compute Engine y, con frecuencia, usan la API de Cloud Logging.
    Para obtener más información, consulta Crear y administrar redes de VPC.

Crea un trabajo que bloquee el acceso externo para todas las VMs

Bloquea el acceso externo a las VMs de un trabajo cuando lo crees. Cuando bloqueas el acceso externo a 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 instancias de VM mientras creas este trabajo, debes especificar la red e inhabilitar las direcciones IP externas en la Plantilla de instancia de VM. De lo contrario, usa los siguientes pasos para bloquear el acceso externo a las VMs de un trabajo con la CLI de gcloud o la API de Batch.

gcloud

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

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

Para crear una tarea y usar marcas de gcloud para bloquear el acceso externo a la tarea, completa los siguientes pasos:

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

    Por ejemplo, para crear un trabajo básico de secuencia de comandos, 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
    

    Reemplaza lo siguiente:

    • JOB_NAME: Es el nombre de este trabajo.
    • LOCATION: el location para este trabajo.
    • JSON_CONFIGURATION_FILE: Es la ruta de acceso del Archivo JSON con los detalles de configuración del trabajo.
    • HOST_PROJECT_ID: el ID del proyecto del proyecto para la red que especifiques:
      • Si usas una red de VPC compartida, especifica el host en un proyecto final.
      • De lo contrario, especifica el proyecto actual.
    • NETWORK: Es el nombre de un Red de VPC en el proyecto actual o una red de VPC compartida alojado en el proyecto actual o que se comparte con él.
    • REGION: Es la región en la que se encuentran la subred y las VMs del trabajo:
      • Si incluyes Campo allowedLocations para especificar la ubicación permitida para 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: Es el nombre de un subnet que es parte del red de VPC y se encuentra en la misma región que la VMs para el trabajo.

Usa campos JSON para bloquear el acceso externo a todas las VMs

Para crear una tarea y usar campos en el archivo de configuración JSON para bloquear el acceso externo de todas las VMs, completa los siguientes pasos:

  1. Crea un archivo JSON que especifique los detalles de configuración de tu trabajo. Para bloquear el acceso externo a todas las VMs, haz lo siguiente:

    Por ejemplo, para crear un trabajo de secuencia de comandos básico que bloquee el acceso externo para todas las VMs, crea un archivo JSON con los siguientes contenidos.

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

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: Es el ID del proyecto del proyecto de la red que especificas:
      • Si usas una red de VPC compartida, especifica el proyecto host.
      • De lo contrario, especifica el proyecto actual.
    • NETWORK: Es el nombre de una red que proporciona el acceso necesario para esta tarea. La red debe ser una red de VPC en el proyecto actual o una red de VPC compartida que aloje el proyecto actual o que se comparta con él.
    • REGION: el region donde la subred y las VMs del trabajo se encuentran en las siguientes ubicaciones:
      • Si incluyes el campo allowedLocations para especificar la ubicación permitida para las VMs del trabajo, debes especificar la misma región aquí.
      • De lo contrario, la región debe ser la misma que location que selecciones para el trabajo (LOCATION).
    • SUBNET: Es el nombre de un subnet que es parte del red de VPC y se encuentra en la misma región que la VMs para el trabajo.
  2. Crea el trabajo con el comando gcloud batch jobs submit.

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

    Reemplaza lo siguiente:

    • JOB_NAME: Es el nombre que deseas para este trabajo.
    • LOCATION: el location que deseas para este trabajo.
    • JSON_CONFIGURATION_FILE: Es la ruta del archivo JSON con los detalles de configuración de la tarea.

API

Para crear un trabajo con la API de Batch, usa el Método jobs.create y especifica los detalles de configuración de tu trabajo. Para bloquear el acceso externo a todas las VMs, haz lo siguiente:

Por ejemplo, para crear un trabajo de secuencia de comandos básico que bloquee el acceso externo para todas las VMs, realiza 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"
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto de tu proyecto.
  • LOCATION: Es la ubicación. que necesitas para este trabajo.
  • JOB_NAME: Es el nombre que deseas para este trabajo.
  • HOST_PROJECT_ID: Es el ID del proyecto del proyecto de la red que especificas:
    • Si usas una red de VPC compartida, especifica el proyecto host.
    • De lo contrario, especifica el proyecto actual (PROJECT_ID).
  • NETWORK: Es el nombre de una red que proporciona el acceso necesario para este trabajo. La red debe ser Red de VPC en el proyecto actual o una red de VPC compartida alojado en el proyecto actual o que se comparte con él.
  • REGION: el region donde la subred y las VMs del trabajo se encuentran en las siguientes ubicaciones:
    • Si incluyes el campo allowedLocations para especificar la ubicación permitida para las VMs del trabajo, debes especificar la misma región aquí.
    • De lo contrario, la región debe ser la misma que location que selecciones para el trabajo (LOCATION).
  • SUBNET: Es el nombre de un subnet que es parte del red de VPC y se encuentra en la misma región que la VMs para el trabajo.

Crea un trabajo que bloquee el acceso externo de uno o más contenedores

Bloquea el acceso externo a cualquiera de los contenedores de un trabajo cuando crees el el trabajo.

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

gcloud

Crear un trabajo que bloquee el acceso externo para uno o más contenedores con gcloud CLI, completa los siguientes pasos:

  1. Crea un archivo JSON que especifique los detalles de configuración de tu trabajo. Para cada contenedor del trabajo que quieras restringir, configura Campo blockExternalNetwork a true.

    Por ejemplo, para crear una tarea de contenedor básica 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
    

    Reemplaza lo siguiente:

    • JOB_NAME: Es el nombre que deseas para este trabajo.
    • LOCATION: el location que deseas para este trabajo.
    • JSON_CONFIGURATION_FILE: Es la ruta del archivo JSON con los detalles de configuración de la tarea.

API

Para crear un trabajo con la API de Batch, usa el método jobs.create y especifica los detalles de configuración de tu trabajo. Para cada contenedor del trabajo que quieras restringir, configura Campo blockExternalNetwork a true.

Por ejemplo, para crear un trabajo de contenedor básico que bloquee las conexiones acceso para el contenedor, realiza 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"
  }
}

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto de tu proyecto.
  • LOCATION: Es la ubicación. que necesitas para este trabajo.
  • JOB_NAME: Es el nombre que deseas para este trabajo.

¿Qué sigue?