En este documento, se explica cómo configurar un trabajo por lotes para bloquear el acceso externo para todas sus VMs o contenedores específicos.
Bloquea el acceso externo para un trabajo para cumplir con los requisitos de redes o mejorar la seguridad. Debes bloquear el acceso externo para las VMs de un trabajo con VMs sin direcciones IP externas si se cumple alguna de las siguientes condiciones:
- Tu proyecto está restringido por la restricción de la política de la organización
compute.vmExternalIpAccess. La red que especificas para el trabajo usa el Acceso privado a Google para configurar la conectividad privada a los servicios y las APIs de Google. El Acceso privado a Google no tiene efecto en las VMs que tienen direcciones IP externas.
Si la red que especificas para el trabajo usa el Acceso privado a Google con los Controles del servicio de VPC para Batch, consulta Usa los Controles del servicio de VPC y Batch.
Como alternativa, si no deseas bloquear todo el acceso externo directo para un trabajo, puedes bloquear el acceso externo para cualquier contenedor que ejecute un trabajo.
Para obtener más información sobre los conceptos de redes y cuándo configurar las redes, consulta Descripción general de las redes de Batch.
Antes de comenzar
- Si nunca usaste Batch, revisa Comienza a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo que bloquee el acceso externo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- Editor de trabajos de Batch (
roles/batch.jobsEditor) en el proyecto - Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio del trabajo, que, de forma predeterminada, es la cuenta de servicio predeterminada de Compute Engine -
Para identificar la red y la subred de un trabajo:
Visualizador de red de Compute (
roles/compute.networkViewer) en el proyecto
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 a través de roles personalizados o cualquier otro rol predefinido.
- Editor de trabajos de Batch (
-
Si bloqueas el acceso externo para las VMs de un trabajo, debes identificar la red que deseas usar para el trabajo. La red que especificas para un trabajo que bloquea el acceso externo para sus VMs debe cumplir con 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 aloja el proyecto para el trabajo o se comparte con él.
- La red incluye una subred en la ubicación en la que deseas ejecutar el trabajo.
- La red permite cualquier acceso requerido para tu trabajo. Si bloqueas el acceso externo para las VMs de un trabajo, la red debe usar Cloud NAT o el Acceso privado a Google para permitir el acceso a los dominios de los servicios y las APIs que usa tu trabajo. Por ejemplo, todos los trabajos usan las APIs de Batch y Compute Engine, y, con mucha frecuencia, usan la API de Cloud Logging.
Crea un trabajo que bloquee el acceso externo para todas las VMs
Bloquea el acceso externo para las VMs de un trabajo cuando lo crees. Cuando bloqueas el acceso externo para 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 requeridas.
Si deseas usar una plantilla de instancias de VM mientras creas este trabajo, debes especificar la red y inhabilitar las direcciones IP externas en la plantilla de instancias de VM. De lo contrario, sigue los pasos que se indican a continuación para bloquear el acceso externo para las VMs de un trabajo con gcloud CLI o la API de Batch.
gcloud
Para crear un trabajo que bloquee el acceso externo con gcloud CLI, selecciona una de las siguientes opciones:
- Usa marcas de gcloud para bloquear el acceso externo para todas las VMs
- Usa campos JSON para bloquear el acceso externo para todas las VMs
Usa marcas de gcloud para bloquear el acceso externo para todas las VMs
Para crear un trabajo y usar marcas de gcloud para bloquear el acceso externo para el trabajo, completa los siguientes pasos:
Crea un archivo JSON que especifique los detalles de configuración de tu 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" } }Crea el trabajo con el
gcloud batch jobs submitcomando. Para bloquear el acceso externo para todas las VMs, incluye las marcas--no-external-ip-address,--networky--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/SUBNETReemplaza lo siguiente:
JOB_NAME: El nombre de este trabajoLOCATION: la ubicación de este trabajoJSON_CONFIGURATION_FILE: La ruta de acceso al archivo JSON con los detalles de configuración del trabajoHOST_PROJECT_ID: el ID 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: El nombre de una red de VPC en el proyecto actual o una red de VPC compartida que aloja el proyecto actual o se comparte con élREGION: la región en la que se encuentran la subred y las VMs del trabajo:- Si incluyes el
allowedLocationscampo 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 la
ubicación que seleccionas para el trabajo
(
LOCATION).
- Si incluyes el
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.
Usa campos JSON para bloquear el acceso externo para todas las VMs
Para crear un trabajo y usar campos en el archivo de configuración JSON para bloquear el acceso externo para todas las VMs, completa los siguientes pasos:
Crea un archivo JSON que especifique los detalles de configuración de tu trabajo. Para bloquear el acceso externo para todas las VMs, haz lo siguiente:
Establece el
noExternalIpAddresscampo entrue.Especifica la red para el trabajo en los
networkysubnetworkcampos.
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 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" } }Reemplaza lo siguiente:
HOST_PROJECT_ID: el ID 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: El nombre de una red que proporciona el acceso requerido para este trabajo. La red debe ser una red de VPC en el proyecto actual o una red de VPC compartida que aloja el proyecto actual o se comparte con él.REGION: la región en la que se encuentran la subred y las VMs del trabajo:- Si incluyes el
allowedLocationscampo 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 la
ubicación que seleccionas para el trabajo
(
LOCATION).
- Si incluyes el
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.
Crea el trabajo con el
gcloud batch jobs submitcomando.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEReemplaza lo siguiente:
JOB_NAME: El nombre que deseas para este trabajoLOCATION: la ubicación que deseas para este trabajoJSON_CONFIGURATION_FILE: La ruta de acceso al archivo JSON con los detalles de configuración del trabajo
API
Para crear un trabajo con la API de Batch, usa el
jobs.create método
y especifica los detalles de configuración de tu trabajo.
Para bloquear el acceso externo para todas las VMs, haz lo siguiente:
Establece el
noExternalIpAddresscampo entrue.Especifica la red para el trabajo en los
networkysubnetworkcampos.
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 proyectoLOCATION: la ubicación que deseas para este trabajoJOB_NAME: El nombre que deseas para este trabajoHOST_PROJECT_ID: el ID 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: El nombre de una red que proporciona el acceso requerido para este trabajo. La red debe ser una red de VPC en el proyecto actual o una red de VPC compartida que aloja el proyecto actual o se comparte con él.REGION: la región en la que se encuentran la subred y las VMs del trabajo:- Si incluyes el
allowedLocationscampo 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 la
ubicación que seleccionas para el trabajo
(
LOCATION).
- Si incluyes el
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.
Crea un trabajo que bloquee el acceso externo para uno o más contenedores
Bloquea el acceso externo para cualquiera de los contenedores de un trabajo cuando lo crees.
Puedes bloquear el acceso externo para cualquiera de los contenedores del trabajo con gcloud CLI o la API de Batch.
gcloud
Para crear un trabajo que bloquee el acceso externo para uno o más contenedores con gcloud CLI, completa los siguientes pasos:
Crea un archivo JSON que especifique los detalles de configuración de tu trabajo. Para cada contenedor del trabajo que deseas restringir, establece el
blockExternalNetworkcampo entrue.Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo para el 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" } }Crea el trabajo con el
gcloud batch jobs submitcomando.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEReemplaza lo siguiente:
JOB_NAME: El nombre que deseas para este trabajoLOCATION: la ubicación que deseas para este trabajoJSON_CONFIGURATION_FILE: La ruta de acceso al archivo JSON con los detalles de configuración del trabajo
API
Para crear un trabajo con la API de Batch, usa el
jobs.create método
y especifica los detalles de configuración de tu trabajo.
Para cada contenedor del trabajo que deseas restringir, establece el
blockExternalNetwork campo
en true.
Por ejemplo, para crear un trabajo de contenedor básico que bloquee el acceso externo 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 proyectoLOCATION: la ubicación que deseas para este trabajoJOB_NAME: El nombre que deseas para este trabajo
¿Qué sigue?
- Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
- Obtén más información sobre las redes.
- Obtén más información para crear un trabajo.
- Obtén información para ver trabajos y tareas.